Lapisan softmax dalam jaringan saraf

43

Saya mencoba menambahkan lapisan softmax ke jaringan saraf yang dilatih dengan backpropagation, jadi saya mencoba menghitung gradiennya.

Output softmax adalah mana adalah nomor neuron output.hj=ezjezsayaj

Jika saya mendapatkannya maka saya mendapatkannya

hjzj=hj(1-hj)

Mirip dengan regresi logistik. Namun ini salah karena pemeriksaan gradien numerik saya gagal.

Apa yang saya lakukan salah? Saya punya pemikiran bahwa saya perlu menghitung turunan silang juga (yaitu ) tapi saya tidak yakin bagaimana melakukan ini dan menjaga dimensi gradien sama sehingga akan cocok untuk proses propagasi kembali.hjzk

Ran
sumber
3
Anda harus meningkatkan judul pertanyaan Anda karena itu tidak berbicara tentang menambahkan lapisan softmax umum ke NN, karena pertanyaan Anda spesifik tentang bagaimana cek gradien gagal. Saya sangat menyarankan untuk mengubah judul menjadi "Mengapa backpropagation berhenti bekerja dengan benar ketika saya menambahkan lapisan softmax ke Jaringan Saraf Saya".
Charlie Parker

Jawaban:

43

Saya merasa agak buruk tentang memberikan jawaban saya sendiri untuk ini karena cukup baik ditangkap oleh amuba dan juampa, kecuali mungkin intuisi terakhir tentang bagaimana Jacobian dapat direduksi kembali menjadi vektor.

Anda dengan benar mendapatkan gradien diagonal dari matriks Jacobian, yang artinya

hsayazj=hsaya(1-hj):saya=j

dan seperti yang dinyatakan amuba, Anda juga harus menurunkan entri diagonal dari Jacobian, yang menghasilkan

hsayazj=-hsayahj:sayaj

Kedua konsep definisi ini dapat dengan mudah digabungkan menggunakan konstruksi yang disebut Kronecker Delta , sehingga definisi gradien menjadi

hsayazj=hsaya(δsayaj-hj)

Jadi Jacobian adalah matriks persegi [J]sayaj=hsaya(δsayaj-hj)

Semua informasi hingga saat ini sudah dicakup oleh amuba dan juampa. Masalahnya tentu saja, bahwa kita perlu mendapatkan kesalahan input dari kesalahan output yang sudah dihitung. Karena gradien kesalahan output tergantung pada semua input, maka gradien input x i adalahhsayaxsaya

[x]k=saya=1hsaya,k

Mengingat matriks Jacobian didefinisikan di atas, ini diimplementasikan sepele sebagai produk dari matriks dan vektor kesalahan output:

σl=Jσl+1

Jika lapisan softmax adalah lapisan keluaran Anda, maka menggabungkannya dengan model biaya lintas-entropi menyederhanakan perhitungan menjadi hanya

σl=h-t

di mana adalah vektor label, dan h adalah output dari fungsi softmax. Tidak hanya bentuk yang disederhanakan nyaman, tetapi juga sangat berguna dari sudut pandang stabilitas numerik.th

Mranz
sumber
dengan , adalah σ l , j = Cσl=(σl,1,σl,2,...,σl,k) ? (Hanya mencoba memahami apa 'gradien' dalam kasus ini)σl,j=Czj
Alexandre Holden Daly
Ya itu benar.
Mranz
Bisakah seseorang tolong jelaskan apa istilah delta huruf kecil di Kronecker Delta dan bagaimana cara menghitungnya?
danijar
Saya terjebak pada masalah ini untuk sementara waktu. Untuk memperjelas. Anda memiliki vektor (pre softmax) dan kemudian Anda menghitung softmax. Karena nilai-nilai softmax tergantung pada semua nilai input, matriks jacobian yang sebenarnya diperlukan. Kemudian Anda mengambil matriks jacobian dan jumlah mengurangi baris untuk mendapatkan vektor baris tunggal, yang Anda gunakan untuk gradient descent seperti biasa. Apakah semua ini 100% benar?
harveyslash
14

Derivatif salah. Harus,

hjzk=hjδkj-hjhk

C

-nk=1Ctkndalamyk(xn)

tkntkn

Perhatikan, bahwa t adalah konstan. Oleh karena itu meminimalkan fungsional ini setara dengan meminimalkan,

-nk=1Ctkndalamyk(xn)+nk=1Ctkndalamtkn=-nk=1Ctkndalamyk(xn)tkn

yang memiliki keuntungan bahwa Jacobian mengambil bentuk yang sangat nyaman, yaitu,

Ezj=hj-tj

Saya akan merekomendasikan Anda untuk mendapatkan salinan Neural Networks untuk Pengenalan Pola . IMHO masih buku terbaik di jaringan saraf.

jpmuc
sumber
14

jhj=hjzj=hj(1-hj)khj=-hjhkjk

jj

C=-jtjcatatanhj,
tjCzj
amuba kata Reinstate Monica
sumber
1
Saya akan mencoba untuk menggambarkan masalah saya dengan lebih baik, sesuai dengan contoh untuk tutorial ini ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm , saya perlu elemen-gandakan gandakan bobot dan delta dengan turunannya (langkah nomor 3). Jadi jika saya memiliki matriks Jacobian penuh, dimensi tidak cocok. Terima kasih.
Berlari
Apakah Anda tahu bagaimana melanjutkan jika itu bukan softmax, tetapi lapisan tersembunyi yang biasa? Bayangkan bahwa setiap unit pada lapisan ini mendapat input dari semua unit dari lapisan sebelumnya (yaitu lapisan ini "terhubung sepenuhnya"), yang biasanya merupakan kasus. Kemudian Anda juga perlu mempropagandakan kesalahan kembali melalui lapisan ini, dan turunannya juga membentuk matriks Jacobian. Jika Anda bingung tentang cara melakukannya, maka kebingungan Anda tidak terkait dengan softmax.
Amoeba berkata Reinstate Monica
1
Saya berhasil mengimplementasikannya untuk lapisan linear dan sigmoid karena turunannya adalah vektor jadi saya tidak punya masalah dengan dimensi.
Berlari
jsaya