Saya memiliki CNN empat lapis untuk memprediksi respons terhadap kanker menggunakan data MRI. Saya menggunakan aktivasi ReLU untuk memperkenalkan nonlinier. Akurasi dan kehilangan kereta secara monoton meningkat dan menurun. Tapi, akurasi pengujian saya mulai berfluktuasi liar. Saya sudah mencoba mengubah tingkat belajar, mengurangi jumlah lapisan. Tapi, itu tidak menghentikan fluktuasi. Saya bahkan membaca jawaban ini dan mencoba mengikuti arahan dalam jawaban itu, tetapi tidak berhasil lagi. Adakah yang bisa membantu saya mencari tahu di mana saya salah?
machine-learning
python
deep-learning
Raghuram
sumber
sumber
Jawaban:
Jika saya memahami definisi akurasi dengan benar, akurasi (% dari titik data diklasifikasikan dengan benar) kurang kumulatif daripada katakanlah MSE (mean squared error). Itu sebabnya Anda melihat bahwa Anda
loss
meningkat dengan cepat, sementara akurasi berfluktuasi.Secara intuitif, ini pada dasarnya berarti, bahwa beberapa bagian dari contoh diklasifikasikan secara acak , yang menghasilkan fluktuasi, karena jumlah tebakan acak yang benar selalu berfluktuasi (bayangkan akurasi ketika koin harus selalu mengembalikan "kepala"). Pada dasarnya sensitivitas terhadap noise (ketika klasifikasi menghasilkan hasil acak) adalah definisi umum overfitting (lihat wikipedia):
Bukti lain dari overfitting adalah bahwa kerugian Anda meningkat, Kerugian diukur lebih tepat, lebih sensitif terhadap prediksi bising jika itu tidak tergencet oleh sigmoids / ambang batas (yang tampaknya menjadi kasus Anda untuk Kerugian itu sendiri). Secara intuitif, Anda bisa membayangkan situasi ketika jaringan terlalu yakin tentang output (ketika itu salah), sehingga memberikan nilai yang jauh dari ambang batas dalam kasus kesalahan klasifikasi acak.
Mengenai kasus Anda, model Anda tidak diatur dengan benar, kemungkinan alasan:
Solusi yang memungkinkan:
sumber
Pertanyaan ini sudah lama tetapi memposting ini karena belum ditunjukkan:
Kemungkinan 1 : Anda menerapkan semacam preprocessing (makna nol, normalisasi, dll.) Baik untuk set pelatihan Anda atau set validasi, tetapi tidak yang lain .
Kemungkinan 2 : Jika Anda membuat beberapa layer yang berkinerja berbeda selama pelatihan dan inferensi dari awal, model Anda mungkin diimplementasikan secara tidak benar (misalnya, memindahkan rata-rata dan memindahkan standar deviasi untuk normalisasi batch yang diperbarui selama pelatihan? Jika menggunakan dropout, apakah bobot diskalakan dengan benar selama kesimpulan?). Ini mungkin terjadi jika kode Anda mengimplementasikan hal-hal ini dari awal dan tidak menggunakan fungsi built-in Tensorflow / Pytorch.
Kemungkinan 3: Overfitting, seperti yang ditunjukkan semua orang. Saya menemukan dua opsi lainnya lebih mungkin dalam situasi spesifik Anda karena akurasi validasi Anda macet di 50% dari zaman 3. Secara umum, saya akan lebih khawatir tentang overfitting jika ini terjadi pada tahap selanjutnya (kecuali Anda memiliki masalah yang sangat spesifik di tangan).
sumber
Menambahkan ke jawaban oleh @ dk14. Jika Anda masih melihat fluktuasi setelah mengatur model Anda dengan benar , ini bisa menjadi alasan yang memungkinkan:
sumber
Jelas terlalu pas. Kesenjangan antara akurasi pada data pelatihan dan data tes menunjukkan bahwa Anda terlalu cocok untuk pelatihan. Mungkin regularisasi dapat membantu.
sumber
Akurasi validasi Anda pada masalah klasifikasi biner (saya berasumsi) adalah "berfluktuasi" sekitar 50%, itu berarti model Anda memberikan prediksi yang benar-benar acak (kadang-kadang menebak dengan benar beberapa sampel lebih banyak, kadang beberapa sampel lebih sedikit). Secara umum, model Anda tidak lebih baik daripada membalik koin.
Bagaimanapun, seperti yang telah ditunjukkan orang lain, model Anda mengalami overfitting yang parah. Dugaan saya adalah bahwa masalah Anda terlalu rumit , yaitu sangat sulit untuk mengekstrak informasi yang diinginkan dari data Anda, dan 4-layer conv-net terlatih sederhana seperti end2end tidak memiliki kesempatan untuk mempelajarinya .
sumber
Ada beberapa cara untuk mencoba dalam situasi Anda. Pertama-tama cobalah untuk meningkatkan ukuran bets, yang membantu SGD mini-batch kurang berkeliaran dengan liar. Kedua, menyesuaikan tingkat belajar, mungkin membuatnya lebih kecil. Ketiga, coba pengoptimal yang berbeda, misalnya Adam atau RMSProp yang dapat menyesuaikan tingkat pembelajaran untuk fitur WRT. Jika mungkin, coba tambah data Anda. Terakhir, coba jaringan saraf Bayesian melalui pendekatan dropout, sebuah karya yang sangat menarik dari Yarin Gal https://arxiv.org/abs/1506.02158
sumber
Sudahkah Anda mencoba jaringan yang lebih kecil? Mengingat akurasi pelatihan Anda dapat mencapai> .99, jaringan Anda tampaknya memiliki koneksi yang cukup untuk sepenuhnya memodelkan data Anda, tetapi Anda mungkin memiliki koneksi asing yang belajar secara acak (mis. Overfitting).
Dalam pengalaman saya, saya mendapatkan akurasi validasi ketidaksepakatan untuk stabil dengan jaringan yang lebih kecil dengan mencoba berbagai jaringan seperti ResNet, VGG, dan bahkan jaringan yang lebih sederhana.
sumber