Saya mencoba untuk melatih jaringan saraf untuk klasifikasi, tetapi label yang saya miliki agak bising (sekitar 30% dari label salah).
Kehilangan lintas-entropi memang berhasil, tetapi saya bertanya-tanya apakah ada alternatif yang lebih efektif dalam kasus ini? atau apakah kerugian lintas-entropi paling optimal?
Saya tidak yakin tetapi saya berpikir untuk "memotong" kehilangan lintas-entropi, sehingga kehilangan untuk satu titik data tidak akan lebih besar dari batas atas, apakah itu akan berhasil?
Terima kasih!
Pembaruan
Menurut jawaban Lucas, saya mendapatkan yang berikut untuk turunannya untuk hasil prediksi dan input dari fungsi softmax . Jadi saya kira pada dasarnya itu menambahkan istilah smoothing ke turunannya. \ frac {\ partial l} { \ partial z_i} = 0.7 \ sum_j \ frac {t_j} {p_j} \ frac {\ partial y_j} {\ partial z_i} = y_i \ sum_jt_j \ frac {y_j} {\ frac {3} {7N} + y_j} - t_i \ frac {y_i} {\ frac {3} {7N} + y_i}
Derivatif untuk kehilangan lintas-entropi asli:
\ frac {\ partial l} {\ partial y_i} = - \ frac {t_i} {y_i}z 3 pi=0,3/N+0,7yil=-Σtilog(pi)∂l
Pembaruan
Saya kebetulan membaca makalah oleh Google yang menerapkan rumus yang sama seperti dalam jawaban Lucas tetapi dengan interpretasi yang berbeda.
Dalam Bagian 7 Model Pengaturan melalui Label Smoothing
Ini (kehilangan entropi silang), bagaimanapun, dapat menyebabkan dua masalah. Pertama, ini dapat menyebabkan pemasangan yang berlebihan: jika model belajar untuk menetapkan probabilitas penuh ke label groundtruth untuk setiap contoh pelatihan, itu tidak dijamin untuk digeneralisasi. Kedua, ini mendorong perbedaan antara logit terbesar dan semua yang lain untuk menjadi besar, dan ini, dikombinasikan dengan gradien terikat , mengurangi kemampuan model untuk beradaptasi. Secara intuitif, ini terjadi karena model menjadi terlalu percaya diri tentang prediksi.
Tetapi alih-alih menambahkan istilah penghalusan ke prediksi, mereka menambahkannya ke kebenaran dasar , yang ternyata bermanfaat.
Dalam percobaan ImageNet kami dengan K = 1000 kelas, kami menggunakan u (k) = 1/1000 dan = 0,1. Untuk ILSVRC 2012, kami telah menemukan peningkatan yang konsisten sekitar 0,2% absolut baik untuk kesalahan top-1 dan kesalahan top-5.
Jawaban:
Hal yang benar untuk dilakukan di sini adalah mengubah model, bukan kerugiannya. Tujuan Anda masih mengklasifikasikan poin data sebanyak mungkin dengan benar (yang menentukan kerugian), tetapi asumsi Anda tentang data telah berubah (yang dikodekan dalam model statistik , jaringan saraf dalam kasus ini).
Biarkan menjadi vektor probabilitas kelas yang dihasilkan oleh jaringan saraf dan menjadi kehilangan lintas-entropi untuk label . Untuk secara eksplisit mempertimbangkan asumsi bahwa 30% dari label adalah noise (diasumsikan acak secara acak), kita dapat mengubah model kita untuk menghasilkanhalt ℓ ( yt, halt) yt
sebagai gantinya dan optimalkan
di mana adalah jumlah kelas. Ini sebenarnya akan berperilaku agak sesuai dengan intuisi Anda, membatasi kerugian menjadi terbatas.N
sumber
Saya menyadari bahwa ini adalah forum statistik dan harapannya adalah fokus pada derivasi matematika, tetapi jika itu bisa membantu dan Anda menggunakan Python, ada paket untuk klasifikasi dengan label berisik yang disebut
cleanlab
: https://github.com/ cgnorthcutt / cleanlab / .The
cleanlab
paket Python,pip install cleanlab
, yang saya seorang penulis, penemuan label kesalahan dalam dataset dan mendukung klasifikasi / belajar dengan label berisik. Ia bekerja dengan scikit-learn, PyTorch, Tensorflow, FastText, dll.Untuk belajar dengan label berisik.
Untuk menemukan kesalahan label pada dataset Anda.
Beberapa contoh dengan FastText (NLP) dan PyTorch (MNIST AlexNet).
Dokumentasi: https://l7.curtisnorthcutt.com/cleanlab-python-package
sumber