Tại sao độ chính xác xác nhận dao động?


31

Tôi có một CNN bốn lớp để dự đoán đáp ứng với bệnh ung thư bằng dữ liệu MRI. Tôi sử dụng kích hoạt ReLU để giới thiệu phi tuyến. Độ chính xác và tổn thất tàu tăng giảm đơn điệu tương ứng. Nhưng, độ chính xác kiểm tra của tôi bắt đầu dao động dữ dội. Tôi đã thử thay đổi tốc độ học tập, giảm số lượng lớp. Nhưng, nó không ngăn được biến động. Tôi thậm chí đã đọc câu trả lời này và cố gắng làm theo các hướng dẫn trong câu trả lời đó, nhưng không gặp may mắn nữa. Bất cứ ai có thể giúp tôi tìm ra nơi tôi đang đi sai?

Ảnh chụp màn hình



Vâng, tôi đọc câu trả lời đó. Xáo trộn dữ liệu xác nhận không giúp được gì
Raghuram

4
Bởi vì bạn chưa chia sẻ đoạn mã của mình, do đó tôi không thể nói nhiều điều sai trong kiến ​​trúc của bạn. Nhưng trong ảnh chụp màn hình của bạn, nhìn thấy độ chính xác đào tạo và xác nhận của bạn, rõ ràng là mạng của bạn đang bị quá tải. Sẽ tốt hơn nếu bạn chia sẻ đoạn mã của mình ở đây.
Nain

bạn có bao nhiêu mẫu có lẽ sự biến động không thực sự quan trọng. Ngoài ra, độ chính xác là thước đo khủng khiếp
rep_ho

Ai đó có thể giúp tôi xác minh xem việc sử dụng phương pháp tiếp cận có tốt không khi độ chính xác xác thực đang dao động? bởi vì tôi đã có thể quản lý xác thực dao động của mình bằng cách đưa vào một giá trị tốt.
Sri2110

Câu trả lời:


27

Nếu tôi hiểu định nghĩa về độ chính xác một cách chính xác, độ chính xác (% số điểm dữ liệu được phân loại chính xác) sẽ ít tích lũy hơn so với giả sử MSE (có nghĩa là lỗi bình phương). Đó là lý do tại sao bạn thấy rằng bạn lossđang tăng nhanh, trong khi độ chính xác đang dao động.

Theo trực giác, điều này về cơ bản có nghĩa là, một số phần của các ví dụ được phân loại ngẫu nhiên , tạo ra dao động, vì số lần đoán ngẫu nhiên chính xác luôn dao động (hãy tưởng tượng chính xác khi đồng xu luôn luôn trả về "đầu"). Về cơ bản độ nhạy với nhiễu (khi phân loại tạo ra kết quả ngẫu nhiên) là một định nghĩa phổ biến về quá mức (xem wikipedia):

Trong thống kê và học máy, một trong những nhiệm vụ phổ biến nhất là điều chỉnh "mô hình" cho một tập hợp dữ liệu đào tạo, để có thể đưa ra dự đoán đáng tin cậy về dữ liệu chưa được đào tạo chung. Trong quá mức, một mô hình thống kê mô tả lỗi hoặc tiếng ồn ngẫu nhiên thay vì mối quan hệ cơ bản

Một bằng chứng khác về việc quá mức là sự mất mát của bạn đang gia tăng, Mất mát được đo lường chính xác hơn, nó nhạy cảm hơn với dự đoán ồn ào nếu nó không bị sigmoids / ngưỡng (dường như là trường hợp của bạn đối với tổn thất). Theo trực giác, bạn có thể tưởng tượng một tình huống khi mạng quá chắc chắn về đầu ra (khi nó sai), do đó, nó đưa ra một giá trị cách xa ngưỡng trong trường hợp phân loại sai ngẫu nhiên.

Về trường hợp của bạn, mô hình của bạn không được chính quy hóa, lý do có thể:

  • không đủ điểm dữ liệu, dung lượng quá lớn
  • đặt hàng
  • không / sai tính năng chia tỷ lệ / chuẩn hóa
  • tốc độ học tập: quá lớn, vì vậy SGD nhảy quá xa và bỏ lỡ khu vực gần cực tiểu địa phương. Đây sẽ là trường hợp cực đoan của "không phù hợp" (không nhạy cảm với dữ liệu), nhưng có thể tạo ra (loại) nhiễu "tần số thấp" trên đầu ra bằng cách xáo trộn dữ liệu từ đầu vào - trái với trực giác quá mức, nó sẽ là như luôn luôn đoán đầu khi dự đoán một đồng tiền. Như @JanKukacka chỉ ra, khi đến khu vực "quá gần với" một cực tiểu có thể gây ra overfitting, vì vậy nếu là quá nhỏ nó sẽ nhận được nhạy cảm với "tần số cao" tiếng ồn trong dữ liệu của bạn. nên ở đâu đó ở giữa.ααα

Phương pháp khả thi:

  • có được nhiều điểm dữ liệu hơn (hoặc mở rộng một cách giả tạo tập hợp các điểm hiện có)
  • chơi với siêu tham số (ví dụ tăng / giảm công suất hoặc thuật ngữ chính quy)
  • chính quy : thử bỏ học, dừng sớm, v.v.

Về: "Mất mát được đo lường chính xác hơn, nó nhạy cảm hơn với dự đoán ồn ào bởi vì nó không bị đè bẹp bởi sigmoids / ngưỡng", tôi đồng ý không có ngưỡng, nhưng nếu bạn đang sử dụng entropy chéo nhị phân làm chức năng mất của bạn, thì sigmoid vẫn phát vai trò.
Zhubarb

1
Về tỷ lệ học tập và sgd thiếu tối thiểu: đạt mức tối thiểu rất có thể có nghĩa là quá mức (vì đó là mức tối thiểu trên tập huấn luyện)
Jan Kukacka

@Berkmeister đúng, tôi đã đọc lại một chút (xem chỉnh sửa). Tôi nghĩ rằng sự mất mát gia tăng là dấu hiệu của chức năng không bị đè bẹp đang được sử dụng.
dk14

@JanKukacka bạn có nghĩa là cực tiểu toàn cầu? Tôi ngụ ý cực tiểu địa phương (thực ra gần cực tiểu địa phương) - theo nghĩa là nếu nó ở quá xa bất kỳ cực tiểu nào, thì nó sẽ không phù hợp. Có lẽ, tôi nên mô tả nó cẩn thận hơn (xem chỉnh sửa), cảm ơn.
dk14

@ dk14 Tôi cho rằng tối thiểu toàn cầu không thể đạt được trong thực tế, vì vậy tôi có nghĩa là cực tiểu địa phương. Nếu bạn ở quá xa, bạn có thể không phù hợp, nhưng nếu bạn ở quá gần, rất có thể bạn đang bị quá sức. Có một công việc thú vị của Moritz Hardt "Đào tạo nhanh hơn, khái quát hóa tốt hơn: Tính ổn định của độ dốc dốc ngẫu nhiên" ( arxiv.org/abs/1509.01240 ) đặt ra giới hạn về mối quan hệ giữa đào tạo và kiểm tra lỗi khi đào tạo với SGD.
Jan Kukacka

6

Câu hỏi này đã cũ nhưng đăng câu hỏi này vì nó chưa được chỉ ra:

Khả năng 1 : Bạn đang áp dụng một số loại tiền xử lý (không có nghĩa, chuẩn hóa, v.v.) cho tập huấn luyện hoặc bộ xác nhận của bạn, nhưng không phải là bộ khác .

Khả năng 2 : Nếu bạn xây dựng một số lớp hoạt động khác nhau trong quá trình đào tạo và suy luận từ đầu, mô hình của bạn có thể được triển khai không chính xác (ví dụ: di chuyển trung bình và di chuyển độ lệch chuẩn cho chuẩn hóa hàng loạt được cập nhật trong quá trình đào tạo? Nếu sử dụng bỏ học, trọng lượng có được đo đúng trong quá trình đào tạo không? suy luận?). Đây có thể là trường hợp nếu mã của bạn thực hiện những điều này từ đầu và không sử dụng các hàm dựng sẵn của Tensorflow / Pytorch.

Khả năng 3: Quá mức, như mọi người đã chỉ ra. Tôi thấy hai tùy chọn khác có nhiều khả năng trong tình huống cụ thể của bạn vì độ chính xác xác thực của bạn bị kẹt ở mức 50% so với kỷ nguyên 3. Nói chung, tôi sẽ quan tâm hơn đến việc quá mức nếu điều này xảy ra ở giai đoạn sau (trừ khi bạn gặp vấn đề rất cụ thể trong tầm tay).


Tôi đang gặp một vấn đề tương tự nhưng không hoàn toàn, chi tiết hơn ở đây: stackoverflow.com/questions/55348052/ợi Trong trường hợp của tôi, tôi thực sự có độ chính xác cao nhất quán với dữ liệu kiểm tra và trong quá trình đào tạo, xác thực "chính xác" "(Không mất) cao hơn độ chính xác đào tạo. Nhưng thực tế là nó không bao giờ hội tụ và dao động khiến tôi nghĩ đến việc thừa, trong khi một số ý kiến ​​cho rằng đó không phải là trường hợp, vì vậy tôi tự hỏi liệu nó có phải là gì và biện minh là gì nếu không.
dusa

1
Đây là lời giải thích hợp lý nhất cho các câu trả lời được đưa ra. Lưu ý rằng động lượng chuẩn hóa hàng loạt cao (ví dụ: 0,999, hoặc thậm chí là 0,99 mặc định của Keras) kết hợp với tốc độ học tập cao cũng có thể tạo ra hành vi rất khác nhau trong đào tạo và đánh giá vì thống kê lớp bị tụt lại rất xa. Trong trường hợp đó, giảm đà xuống mức 0,9 nên thực hiện thủ thuật. Tôi đã có một vấn đề tương tự như OP và điều này đã làm điều đó.
kristjan

5

Thêm vào câu trả lời của @ dk14. Nếu bạn vẫn thấy biến động sau khi thường xuyên hóa mô hình của mình, đây có thể là những lý do có thể:

  • Sử dụng một mẫu ngẫu nhiên từ bộ xác thực của bạn: Điều đó có nghĩa là bộ xác thực của bạn ở mỗi bước đánh giá là khác nhau, do đó, mất xác thực của bạn.
  • Sử dụng hàm mất trọng số (được sử dụng trong trường hợp các bài toán lớp mất cân bằng cao). Ở bước đào tạo, bạn cân chức năng mất của bạn dựa trên trọng số của lớp, trong khi ở bước dev bạn chỉ cần tính toán tổn thất không trọng số. Trong trường hợp như vậy, mặc dù mạng của bạn đang bước vào hội tụ, bạn có thể thấy rất nhiều biến động về mất xác thực sau mỗi bước đào tạo. Nhưng nếu bạn chờ đợi một hình ảnh lớn hơn, bạn có thể thấy rằng mạng của bạn thực sự đang hội tụ đến một cực tiểu với sự dao động bị hao mòn (xem hình ảnh đính kèm cho một ví dụ như vậy).nhập mô tả hình ảnh ở đâynhập mô tả hình ảnh ở đây

2

Chắc chắn quá phù hợp. Khoảng cách giữa độ chính xác của dữ liệu huấn luyện và dữ liệu kiểm tra cho thấy bạn đã trang bị quá nhiều cho đào tạo. Có lẽ chính quy có thể giúp đỡ.


1

Độ chính xác xác thực của bạn đối với vấn đề phân loại nhị phân (tôi giả sử) là "dao động" khoảng 50%, điều đó có nghĩa là mô hình của bạn đang đưa ra dự đoán hoàn toàn ngẫu nhiên (đôi khi nó đoán chính xác một vài mẫu, đôi khi ít hơn một vài mẫu). Nói chung, mô hình của bạn không tốt hơn là lật một đồng xu.

{0;1}

Dù sao, như những người khác đã chỉ ra, mô hình của bạn đang gặp phải tình trạng quá tải nghiêm trọng. Tôi đoán là vấn đề của bạn quá phức tạp , tức là rất khó để trích xuất thông tin mong muốn từ dữ liệu của bạn và mạng lưới 4 lớp được đào tạo end2end đơn giản như vậy không có cơ hội tìm hiểu nó .


0

Có một vài cách để thử trong tình huống của bạn. Trước hết hãy cố gắng tăng kích thước lô, giúp SGD mini ít đi lang thang một cách điên cuồng. Thứ hai điều chỉnh tốc độ học tập, có thể đặt nó nhỏ hơn. Thứ ba, hãy thử trình tối ưu hóa khác nhau, ví dụ Adam hoặc RMSProp có khả năng điều chỉnh tỷ lệ học tập cho các tính năng wrt. Nếu có thể hãy thử tăng dữ liệu của bạn. Cuối cùng, hãy thử các mạng thần kinh Bayes thông qua xấp xỉ bỏ học, một công việc rất thú vị của Yarin Gal https://arxiv.org/abs/1506.02158


0

Bạn đã thử một mạng nhỏ hơn? Xem xét độ chính xác đào tạo của bạn có thể đạt> 0,99, mạng của bạn dường như có đủ kết nối để mô hình hóa đầy đủ dữ liệu của bạn, nhưng bạn có thể có các kết nối không liên quan đang học ngẫu nhiên (tức là quá mức).

Theo kinh nghiệm của tôi, tôi đã đạt được độ chính xác xác thực giữ ổn định với một mạng nhỏ hơn bằng cách thử các mạng khác nhau như ResNet, VGG và thậm chí các mạng đơn giản hơn.

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.