Kehilangan fungsi untuk autoencoder

19

Saya bereksperimen sedikit autoencoder, dan dengan tensorflow saya membuat model yang mencoba merekonstruksi dataset MNIST.

Jaringan saya sangat sederhana: X, e1, e2, d1, Y, di mana e1 dan e2 adalah lapisan pengkodean, d2 dan Y adalah lapisan decoding (dan Y adalah output yang direkonstruksi).

X memiliki 784 unit, e1 memiliki 100, e2 memiliki 50, d1 memiliki 100 lagi dan Y 784 lagi.

Saya menggunakan sigmoids sebagai fungsi aktivasi untuk layer e1, e2, d1, dan Y. Input ada di [0,1] dan seharusnya juga output.

Yah, saya mencoba menggunakan cross entropy sebagai fungsi kerugian, tetapi output selalu gumpalan, dan saya perhatikan bahwa bobot dari X ke e1 akan selalu menyatu ke matriks bernilai nol.

Di sisi lain, menggunakan rata-rata kesalahan kuadrat sebagai fungsi kerugian, akan menghasilkan hasil yang layak, dan saya sekarang dapat merekonstruksi input.

Kenapa begitu? Saya pikir saya bisa menafsirkan nilai-nilai sebagai probabilitas, dan oleh karena itu menggunakan cross entropy, tetapi jelas saya melakukan sesuatu yang salah.

AkiRoss
sumber
1
Anda menyebutkan menggunakan sigmoid untuk fungsi aktivasi di lapisan pertama. Mereka menunjukkan "saturasi," seperti yang dijelaskan lebih lengkap di Catatan CS231n . Sudahkah Anda mencoba fungsi aktivasi lain seperti ReLUs?
Jerry
Saya tidak dapat mengingat sekarang jika saya mencoba yang lain, tetapi terima kasih telah berbagi!
AkiRoss

Jawaban:

17

Saya pikir jawaban terbaik untuk ini adalah bahwa fungsi kehilangan lintas-entropi tidak cocok untuk tugas khusus ini.

Dalam mengambil pendekatan ini, Anda pada dasarnya mengatakan bahwa data MNIST yang sebenarnya adalah biner, dan intensitas piksel Anda menunjukkan probabilitas bahwa setiap piksel dalam keadaan 'aktif'. Tapi kita tahu sebenarnya ini bukan masalahnya. Kekeliruan dari asumsi implisit ini kemudian menyebabkan masalah bagi kami.

-[(target)catatan(ramalan)+(1-target)catatan(1-ramalan)] (menormalkan ini sehingga minimum adalah nol), kita mendapatkan:

cross-entropy vs mse loss

Kita dapat melihat bahwa kehilangan lintas-entropi adalah asimetris. Mengapa kita menginginkan ini? Apakah benar-benar lebih buruk untuk memprediksi 0,9 untuk 0,8 pixel ini daripada untuk memprediksi 0,7? Saya akan mengatakan itu mungkin lebih baik, jika ada.

Kami mungkin bisa masuk ke detail lebih lanjut dan mencari tahu mengapa ini mengarah ke gumpalan spesifik yang Anda lihat. Saya akan menebak bahwa itu karena intensitas piksel di atas 0,5 rata-rata di wilayah tempat Anda melihat gumpalan. Tetapi secara umum ini adalah kasus asumsi pemodelan tersirat yang Anda buat tidak sesuai untuk data.

Semoga itu bisa membantu!

nlml
sumber
3
apakah fungsi kerugian yang cocok jika input mengambang antara 0 dan 1?
Jemshit Iskenderov
Kerugian Entropi Binary Cross
torayeff