Saya melatih jaringan saraf untuk mengklasifikasikan satu set objek menjadi n-kelas. Setiap objek dapat menjadi milik beberapa kelas sekaligus (multi-class, multi-label).
Saya membaca bahwa untuk masalah multi-kelas umumnya direkomendasikan untuk menggunakan softmax dan entropi lintas kategorikal sebagai fungsi kerugian alih-alih mse dan saya kurang lebih mengerti mengapa.
Untuk masalah saya multi-label tidak masuk akal untuk menggunakan softmax tentu saja karena setiap probabilitas kelas harus independen dari yang lain. Jadi layer terakhir saya hanyalah unit sigmoid yang memasukkan input mereka ke dalam rentang probabilitas 0..1 untuk setiap kelas.
Sekarang saya tidak yakin apa fungsi kerugian yang harus saya gunakan untuk ini. Melihat definisi crossentropy kategoris, saya percaya itu tidak akan berlaku dengan baik untuk masalah ini karena hanya akan memperhitungkan output neuron yang seharusnya 1 dan mengabaikan yang lain.
Entropi silang biner sepertinya lebih cocok, tetapi saya hanya melihatnya pernah disebutkan untuk masalah klasifikasi biner dengan neuron keluaran tunggal.
Saya menggunakan python dan keras untuk pelatihan jika itu penting.
Jawaban:
Jika Anda menggunakan keras, cukup letakkan sigmoids di layer output dan binary_crossentropy pada fungsi biaya Anda.
Jika rata-rata setiap baris diberi label lebih sedikit maka Anda dapat menggunakan softmax_cross_entropy_with_logits karena dengan kehilangan ini sementara kelas-kelasnya saling eksklusif, probabilitasnya tidak perlu. Semua yang diperlukan adalah bahwa setiap baris label adalah distribusi probabilitas yang valid. Jika tidak, perhitungan gradien akan salah.
sumber
UPDATE (18/04/18): Jawaban lama masih terbukti bermanfaat pada model saya. Caranya adalah dengan memodelkan fungsi partisi dan distribusi secara terpisah, sehingga memanfaatkan kekuatan softmax.
Secara praktis, pilihan pengoptimal juga membuat perbedaan besar. Pengalaman saya dengan pendekatan factorisation bekerja paling baik di bawah Adadelta (Adagrad tidak bekerja untuk saya, belum mencoba RMSprop, kinerja SGD tergantung pada parameter).
UPDATE : (Pemikiran acak) Sepertinya menggunakan proses Dirichlet akan memungkinkan penggabungan beberapa sebelum pada jumlah label?
PEMBARUAN : Dengan percobaan, KL-divergence yang dimodifikasi masih cenderung untuk memberikan keluaran multi-kelas daripada keluaran multi-label.
(Jawaban lama)
Pengalaman saya dengan sigmoid lintas-entropi tidak terlalu menyenangkan. Saat ini saya menggunakan KL-divergence yang dimodifikasi. Itu mengambil bentuk
Penerapan keras
sumber
adam
jauh lebih baik daripadarmsprop
Saya belum pernah menggunakan keras. Mengambil caffe misalnya, bisa Anda gunakan
SigmoidCrossEntropyLossLayer
untuk masalah multi-label.sumber
Sebenarnya dalam tensorsflow Anda masih dapat menggunakan
sigmoid_cross_entropy_mean
fungsi perhitungan rugi dalam multi-label, saya sangat mengonfirmasinyasumber
Saya seorang pemula di sini tetapi saya akan mencoba mencobanya dengan pertanyaan ini. Saya mencari hal yang sama seperti Anda, dan akhirnya saya menemukan tutorial klasifikasi multi-kelas keras yang sangat bagus @ http://machinelearningmastery.com/multi-class-classification-tutorial-keras-deep-learning-library/ .
Penulis tutorial itu menggunakan fungsi kerugian lintas entropi kategoris, dan ada utas lain yang dapat membantu Anda menemukan solusi @ di sini .
sumber