Saya dapat melihat dua motif untuk menggunakan Gradien Sintetis di RNN:
- Untuk mempercepat pelatihan, dengan segera mengoreksi setiap lapisan dengan gradien yang diprediksi
- Untuk dapat mempelajari urutan yang lebih lama
Saya melihat masalah dengan keduanya. Harap dicatat, saya sangat suka Gradien Sintetis dan ingin menerapkannya. Tetapi saya perlu memahami di mana jejak pemikiran saya salah.
Sekarang saya akan menunjukkan mengapa Poin 1 dan Poin 2 tampaknya tidak bermanfaat, dan saya ingin Anda mengoreksi saya, jika mereka benar-benar bermanfaat:
Butir 1:
Gradien Sintetis memberi tahu kami bahwa kami dapat mengandalkan "mini-helper-network" lain (disebut DNI) untuk memberi tahu lapisan kami saat ini tentang gradien apa yang akan datang dari atas, bahkan selama penyangga fwd.
Namun, gradien tersebut hanya akan datang beberapa operasi nanti. Jumlah Backprop yang sama harus dilakukan tanpa DNI, kecuali sekarang kita juga perlu melatih DNI kita.
Menambahkan Asyncronisity ini seharusnya tidak membuat layer train lebih cepat daripada selama fwdprop full tradisional "terkunci" -> urutan prop full back, karena jumlah perhitungan yang sama harus dilakukan oleh perangkat. Hanya saja perhitungannya akan meluncur pada waktunya
Ini membuat saya berpikir Poin 1) tidak akan berfungsi. Cukup menambahkan SG di antara setiap lapisan seharusnya tidak meningkatkan kecepatan pelatihan.
Butir 2:
Ok, bagaimana kalau menambahkan SG hanya pada lapisan terakhir untuk memprediksi "gradien dari masa depan" dan hanya jika itu adalah timestep terakhir selama prop depan .
Dengan cara ini, meskipun LSTM kami harus berhenti memprediksi dan harus melakukan backpropagate, LSTM kami masih dapat memprediksi gradien masa depan yang akan diterima (dengan bantuan DNI yang duduk di catatan waktu terakhir).
Pertimbangkan beberapa sesi pelatihan (sesi A, sesi B):
fwdprop timestep_1A ---> fwdprop timestep_2A ---> fwdprop timestep_3A ----> berhenti dan bkprop!
fwdprop timestep_1B ---> fwdprop timestep_2B ---> fwdprop timestep_3B ----> berhenti dan bkprop!
Kami baru saja memaksa jaringan kami untuk "mem-parsing" 6 timesteps dalam dua bagian: 3 timesteps, kemudian 3 timesteps tersisa lagi.
Perhatikan, kita memiliki DNI kita di akhir "Session A" dan memprediksi "gradien apa yang akan saya dapatkan dari awal Sesi B (dari masa depan)". Karena itu, timestep_3A akan dilengkapi dengan gradien "yang akan datang dari timestep_1B", jadi memang, koreksi yang dilakukan selama A akan lebih dapat diandalkan.
Tapi hey! Ini diprediksi "gradien sintetik" akan sangat kecil (diabaikan) tetap - setelah semua, itu sebabnya kami memulai baru backprop sesi B . Bukankah mereka terlalu kecil, kami hanya akan mem-parsing semua 6 waktu dalam satu bkprop panjang "sesi A".
Karena itu saya pikir Butir 2) juga tidak memberi manfaat. Menambahkan SG pada catatan waktu terakhir dari fwdprop memungkinkan untuk melatih urutan yang lebih lama secara efektif, tetapi menghilangkan gradien tidak pergi ke mana pun.
Baik. Mungkin kita bisa mendapatkan manfaat dari pelatihan "sesi A" , "sesi B" dll pada mesin yang terpisah? Tapi lalu bagaimana bedanya dengan pelatihan dengan minibatch biasa secara paralel? Perlu diingat, disebutkan dalam poin 2: hal-hal diperparah oleh sesiA memprediksi gradien yang hilang pula.
Pertanyaan: Tolong bantu saya memahami manfaat Gradien Sintetis, karena 2 poin di atas sepertinya tidak menguntungkan