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
sumber
Jawaban:
-Itu belum tentu benar. Kami biasanya memotong dan memulai backprop baru karena kendala perangkat keras, seperti memori atau kecepatan komputasi. Gradien-gradien dapat ditingkatkan dengan cara lain, seperti Gradient Normalalization - meningkatkan vektor gradien jika terlalu kecil di luar lapisan tertentu, atau scaling-down jika akan meledak. Atau bahkan menggunakan Normalisasi Batch
Penting untuk memahami cara memperbarui modul DNI apa pun. Untuk menghapusnya, pertimbangkan contoh jaringan dengan beberapa lapisan dan 3 modul DNI:
Lapisan sebelumnya harus puas dengan gradien sintetik, karena mereka atau DNI mereka tidak akan pernah menyaksikan "gradien sejati".
Mengenai pelatihan paralel dengan minibatch alih-alih Paralelisasi melalui Lulusan Sintetis:
Urutan yang lebih panjang lebih tepat daripada minibatch, namun minibatch menambahkan efek pengaturan . Tetapi, mengingat beberapa teknik untuk mencegah gradien meledak atau menghilang, melatih urutan yang lebih lama dapat memberikan wawasan yang jauh lebih baik ke dalam konteks masalah. Itu karena jaringan menyimpulkan output setelah mempertimbangkan urutan input yang lebih panjang, sehingga hasilnya lebih rasional.
Untuk perbandingan manfaat yang diberikan oleh SG, lihat diagram halaman 6 dari makalah ini , terutama karena mampu menyelesaikan urutan yang lebih lama, yang menurut saya paling menguntungkan (toh kita sudah bisa melakukan paralelisasi melalui Minibatch, dan dengan demikian SG seharusnya tidak mempercepat proses ketika dilakukan pada mesin yang sama - bahkan jika kita memang hanya merambat ke DNI berikutnya).
Namun, semakin banyak modul DNI yang kita miliki, semakin ribut sinyalnya. Jadi mungkin layak untuk melatih semua layer dan DNI melalui backprop legacy, dan hanya setelah beberapa zaman berlalu kita mulai menggunakan DNI-bootstrap yang dibahas di atas.
Dengan begitu, DNI paling awal akan mendapatkan setidaknya beberapa perasaan tentang apa yang diharapkan pada awal pelatihan. Itu karena DNI berikut ini sendiri tidak yakin seperti apa sebenarnya gradien sebenarnya, ketika pelatihan dimulai, jadi pada awalnya, mereka akan menyarankan gradien "sampah" kepada siapa pun yang duduk lebih awal dari mereka.
Jangan lupa bahwa penulis juga bereksperimen dengan memprediksi input aktual untuk setiap layer.
Jika layer Anda memiliki backprop yang mahal (mungkin Anda memiliki Batch-Normalisasi atau beberapa fungsi aktivasi mewah), mengoreksi dengan DNI mungkin jauh lebih murah, setelah cukup terlatih. Ingatlah bahwa DNI tidak gratis - ia membutuhkan perkalian matriks dan mungkin tidak akan memberikan banyak peningkatan pada lapisan padat yang sederhana.
Minibatch memberi kita kecepatan (melalui paralelisasi) dan juga memberi kita regularisasi. Gradien Sintetis memungkinkan kita untuk menyimpulkan lebih baik dengan bekerja dengan urutan lebih lama dan (berpotensi) gradien lebih murah. Secara keseluruhan, ini adalah sistem yang sangat kuat.
sumber
Gradien sintetik membuat pelatihan lebih cepat, bukan dengan mengurangi jumlah zaman yang dibutuhkan atau dengan mempercepat konvergensi penurunan gradien, tetapi dengan membuat setiap zaman lebih cepat untuk dihitung. Gradien sintetik lebih cepat dihitung daripada gradien nyata (menghitung gradien sintetik lebih cepat daripada backpropagation), sehingga setiap iterasi keturunan gradien dapat dihitung lebih cepat.
sumber