Xác nhận cho thấy sự biến động lớn. Nguyên nhân có thể là gì?


8

Tôi đang đào tạo một CNN cho một vấn đề phân loại hình ảnh 3 lớp. Mất tập luyện của tôi giảm suôn sẻ, đó là hành vi dự kiến. Tuy nhiên, mất xác nhận của tôi cho thấy rất nhiều biến động.

nhập mô tả hình ảnh ở đây

Đây có phải là điều mà tôi nên lo lắng hay tôi chỉ nên chọn mô hình đạt điểm cao nhất trên thước đo hiệu suất của mình (độ chính xác)?

Thông tin bổ sung: Tôi đang tinh chỉnh lớp cuối cùng của Resnet-18 đã được đào tạo trước về dữ liệu ImageNet trong PyTorch. Tôi phải lưu ý rằng tôi đang sử dụng chức năng giảm cân cho giai đoạn đào tạo vì dữ liệu của tôi rất mất cân bằng. Tuy nhiên, để tính toán tổn thất, tôi sử dụng tổn thất không trọng số để có thể so sánh xác nhận và tổn thất đào tạo. Tôi sẽ sử dụng tổn thất không trọng số, không phải là các bản phân phối của tập dữ liệu huấn luyện và tập dữ liệu xác nhận có phần khác nhau (tuy nhiên cả hai đều không cân bằng cao).


Kiểm tra câu hỏi này tại crossvalidated. Tác giả ở đó có một vấn đề tương tự như của bạn. stats.stackexchange.com/questions/255105/ khăn
Nord112

Câu trả lời:


3

Từ việc kiểm tra đơn giản cốt truyện của bạn, tôi có thể đưa ra một vài kết luận và liệt kê những điều cần thử. (Điều này không cần biết thêm về thiết lập của bạn: thông số đào tạo và siêu đường kính mô hình).

Có vẻ như tổn thất đang giảm (đặt một dòng phù hợp nhất thông qua mất xác thực). Có vẻ như bạn có thể tập luyện lâu hơn để cải thiện kết quả, vì đường cong vẫn hướng xuống dưới.

Đầu tiên tôi sẽ thử trả lời câu hỏi tiêu đề của bạn:

nguyên nhân của sự biến động trong mất xác nhận là gì?

Tôi có thể nghĩ về ba khả năng:

  1. Chính quy hóa - để giúp làm trơn tru quá trình học tập và làm cho trọng lượng mô hình mạnh mẽ hơn. Thêm / tăng tính thường xuyên của bạn sẽ ngăn các cập nhật lớn cho các trọng số được giới thiệu.
  2. Kích thước hàng loạt - có tương đối nhỏ không (ví dụ <20?). Điều này có nghĩa là sai số trung bình đo được ở cuối mạng được tính chỉ bằng một vài mẫu. Với kích thước lô, giả sử 8, sau đó nhận được 4/8chính xác và so với nhận 6/8chính xác có sự khác biệt tương đối lớn khi nhìn vào sự mất mát. Lấy giá trị trung bình của các lỗi với các lô nhỏ như vậy sẽ dẫn đến một đường cong mất không quá trơn tru. Nếu bạn có đủ bộ nhớ GPU / RAM, hãy thử tăng kích thước lô.
  3. Tỷ lệ học tập - có thể quá lớn. Điều này tương tự như điểm đầu tiên liên quan đến chính quy. Để thực hiện các cải tiến mượt mà hơn, bạn có thể cần phải làm chậm tốc độ học tập khi bạn tiến gần đến mức tối thiểu. Bạn có thể làm cho điều này có thể chạy theo lịch trình, theo đó được giảm bởi một số yếu tố (ví dụ: nhân nó với 0,5) mỗi khi mất xác thực không được cải thiện sau đó, nói là 6kỷ nguyên. Điều này sẽ ngăn bạn thực hiện các bước lớn và sau đó có thể vượt quá mức tối thiểu và chỉ nảy xung quanh nó.

Cụ thể với nhiệm vụ của bạn, tôi cũng đề nghị cố gắng giải phóng một lớp khác , để tăng phạm vi điều chỉnh của bạn. Điều này sẽ giúp Resnet-18 tự do hơn một chút để học, dựa trên dữ liệu của bạn.

Về câu hỏi cuối cùng của bạn:

Đây có phải là điều mà tôi nên lo lắng hay tôi chỉ nên chọn mô hình đạt điểm cao nhất trên thước đo hiệu suất của mình (độ chính xác)?

Bạn có nên lo lắng? Tóm lại, không. Một đường cong mất xác nhận như của bạn có thể hoàn toàn tốt và mang lại kết quả hợp lý; tuy nhiên, tôi sẽ thử một số bước tôi đã đề cập ở trên trước khi giải quyết nó.

Bạn chỉ nên chọn mô hình hoạt động tốt nhất? Nếu bạn có nghĩa là lấy mô hình tại điểm của nó với mất xác thực tốt nhất (độ chính xác xác thực), thì tôi sẽ nói là cẩn thận hơn. Trong cốt truyện của bạn ở trên, điều này có thể tương đương với khoảng 30, nhưng cá nhân tôi sẽ lấy một điểm đã được đào tạo thêm một chút, trong đó đường cong sẽ ít biến động hơn một chút. Một lần nữa, sau khi đã thử một số bước được nêu ở trên.


Cảm ơn câu trả lời của bạn Dexter! Tôi thực sự đã nhận thấy rằng việc giảm tốc độ học tập theo thời gian làm cho đường cong mất xác nhận ít biến động hơn trong các kỷ nguyên sau này. Bây giờ tôi có một câu hỏi tiếp theo về việc giải phóng lớp khác. Tôi đã suy nghĩ về việc này nhưng không thực sự biết cách thực hiện. Trước tiên tôi có nên đào tạo trình phân loại cho một số kỷ nguyên và sau đó cả lớp phân loại VÀ lớp chập hay tôi có thể bắt đầu ngay lập tức đào tạo cả hai (có lẽ với tốc độ học tập khác nhau)? Tôi không muốn lãng phí một lượng nhỏ các công việc tính toán mà tôi có.
Tim

@Tim - Nếu có thể, thường là tốt hơn để đào tạo end-to-end, có nghĩa là cả hai cùng một lúc. Vì vậy, tôi sẽ giải phóng một lớp khác (lớp gần nhất với đầu ra vẫn bị đóng băng) và sau đó huấn luyện mọi thứ. Nếu điều này không mang lại cho bạn sự thúc đẩy sau này, có lẽ bạn có thể khởi tạo lại trọng lượng của các lớp không đông (không phải tất cả các lớp!) Và luyện tập lâu hơn, nhưng điều này sẽ có những rủi ro khác và có thể làm mọi thứ tồi tệ hơn. Hãy coi đó là phương sách cuối cùng.
n1k31t4

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.