Gradien Sintetis - apa manfaat praktisnya?

8

Saya dapat melihat dua motif untuk menggunakan Gradien Sintetis di RNN:

  1. Untuk mempercepat pelatihan, dengan segera mengoreksi setiap lapisan dengan gradien yang diprediksi
  2. 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

Kari
sumber
Menurut Anda mengapa ini tidak akan mempercepat pelatihan? Satu-satunya pembenaran yang saya lihat adalah pernyataan tegas bahwa ini "seharusnya tidak meningkatkan kecepatan pelatihan" tetapi Anda tidak memberikan alasan Anda. Juga tidak jelas apa yang Anda maksud dengan "langkah 1)" karena Anda belum menjelaskan langkah apa pun dalam pertanyaan. Dalam kasus apa pun, makalah ini menunjukkan bahwa ia memang menyediakan percepatan. Data mengalahkan teori setiap hari. Sudahkah Anda membaca koran?
DW
Saya setuju, data mengalahkan teori kapan saja, tetapi contoh penghitung terbaik yang bisa saya buat adalah GPU vs CPU. Di mana-mana orang terus mengatakan bahwa GPU menjalankan pesanan dengan magnitudo lebih cepat daripada CPU, dan memberikan perbandingan. Namun, CPU mulithreaded yang dikodekan dengan benar hanya 2-3 kali lebih lambat dari kategori GPU yang sama dan lebih murah daripada GPU. larsjuhljensen.wordpress.com/2011/01/28/... Sekali lagi, saya tidak akan menentang Synthetic Gradients, - mereka tampak luar biasa, hanya sampai saya bisa mendapatkan jawaban untuk posting saya, saya tidak akan bisa beristirahat: D
Kari
Saya tidak yakin posting blog berusia 7 tahun tentang BLAST sangat relevan di sini.
DW
Apa yang ingin saya katakan adalah "ada cara untuk membuat paralelisme tampak lebih baik daripada yang sebenarnya", dalam skenario apa pun
Kari

Jawaban:

2

Tapi hey! "Gradien sintetik" yang diprediksi ini akan menjadi sangat kecil (dapat diabaikan) - lagipula, itulah sebabnya kami memulai sesi backprop baru B. Bukannya terlalu kecil, kami hanya akan menguraikan semua 6 langkah dalam satu bkprop panjang "sesi A ".

-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:

 input
   |
   V
Layer_0 & DNI_0
Layer_1
Layer_2
Layer_3 & DNI_3
Layer_4
Layer_5 & DNI_5
Layer_6
Layer_7
   | 
   V
output

The DNI_0 selalu dilatih dengan sintetis gradien tiba dari DNI_3 (yang mengalir melalui Layer_2, dan Layer_1 tentu saja), penentuan tapak beberapa lapisan lebih lanjut.

Demikian juga, DNI_3 selalu dilatih dengan gradien sintetis yang datang dari DNI_5

DNI_0 atau DNI_3 tidak akan pernah melihat gradien sebenarnya, karena grad yang benar hanya dikirimkan ke DNI_5 , dan tidak lebih awal.

Bagi siapa pun yang masih berjuang untuk memahaminya, baca blogpost yang luar biasa ini , bagian 3

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.

Kari
sumber
0

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.

DW
sumber
Dari pemahaman saya, dari segi waktu gradien seharusnya tidak mencapai DNI lebih cepat, hanya saja mereka sekarang tergelincir dalam waktu, dan dikomputasi secara asinkron saat penyangga maju terjadi. DNI masih harus mendapatkan gradien sebenarnya untuk melatih dirinya sendiri . Jadi Gradien Sintetis harus membutuhkan jumlah perhitungan yang sama untuk dilakukan secara paralel seperti ketika dengan BPTT standar. Apakah ini benar?
Kari
Jadi tidak akan ada speedup hanya dengan memperkenalkan SG di antara lapisan. Ya, kita mendapatkan gradien diprediksi segera dari DNI, tetapi untuk setiap prediksi seperti kita akhirnya akan harus membayar harga dengan asynchronous propagasi kembali penuh terhadap yang DNI, sedikit kemudian
Kari
@Kari, tidak, itu tidak terdengar benar bagiku. Jika Anda membutuhkan jumlah iterasi yang sama, tetapi sekarang setiap iterasi membutuhkan waktu 50% lebih sedikit pada GPU, maka perhitungan yang dihasilkan akan dilakukan lebih awal. Sekalipun Anda membutuhkan iterasi / zaman 10% lebih banyak (karena gradien tertunda atau gradien sintetik tidak cocok dengan gradien aktual), itu masih merupakan kemenangan: percepatan dari kemampuan untuk menghitung gradien sintetik lebih cepat daripada gradien nyata melebihi efek lainnya. Anda tampaknya yakin bahwa ini tidak bisa membantu, tetapi data di koran menunjukkan itu membantu.
DW
Hm, misalnya, kita memiliki 4 layer setelah DNI kita; Dalam backprop normal, kita akan memiliki 4 "maju" pertukaran antara lapisan, dan kemudian 4 "pertukaran mundur", dan sementara ini terjadi sistem terkunci. Dengan DNI kita dapat langsung memperbaiki bobot kita, tetapi perlu mendapatkan gradien yang benar nanti. Tapi sekarang, sistem tidak dikunci, sementara itu memungkinkan lebih banyak lintasan ke depan untuk digeser. Tapi kami masih berutang gradien sebenarnya dari sebelumnya, ke DNI kami ... Untuk mendapatkan dan mengirimkan gradien ini kembali ke DNI akan membutuhkan 100% dari waktu (sama 4 langkah maju, sama 4 langkah mundur).
Kari
Hanya saja DNI kami mengatakan "baiklah, berikan mereka jika memungkinkan, nanti", tapi kami masih harus membayar harga penuh, jadi saya tidak melihat peningkatan kinerjanya. Saya setuju, makalah menunjukkan hasil yang bagus, tetapi bagaimana bisa? Kita sudah bisa melatih minibatch secara paralel: /
Kari