Pertanyaan Ketika Memajukan dari Jaringan Saraf Tiruan Vanilla ke Jaringan Saraf Berulang

8

Baru-baru ini saya belajar bagaimana jaringan saraf vanilla akan bekerja, dengan jumlah input yang diberikan, node tersembunyi, dan jumlah output yang sama dengan input.

Saya telah melihat berbagai posting yang sekarang berhubungan dengan jaringan saraf berulang, dan saya memahami konsep di baliknya, tetapi saya gagal untuk memahami bagian-bagian tertentu dari logika di belakang RNN.

Inilah empat pertanyaan utama yang saya miliki:

  1. Bagaimana cara back-propagation bekerja di jaringan saraf berulang?
  2. Apakah bobot yang mengarah dari input ke node tersembunyi sama untuk setiap langkah lainnya? Bagaimana dengan bobot dari node tersembunyi ke output?
  3. Bagaimana cara bias bekerja secara tepat dalam jaringan saraf berulang?
  4. Mengapa fungsi tanh biasanya digunakan alih-alih fungsi sigmoid sebagai fungsi aktivasi?

Saya menyadari beberapa pertanyaan ini sangat mendasar, tetapi saya rasa dasar-dasarnya adalah apa yang saya butuhkan saat ini.

Bahkan tautan ke video atau posting terkait akan sangat membantu, dan begitu juga kata kunci google yang menunjukkan hasil yang tepat. Keempat pertanyaan ini menghalangi saya untuk memahami contoh kode Python, jadi saya benar-benar membutuhkan bantuan.

Daniel
sumber
+ msgstr "jumlah output yang sama dengan input". Tunggu apa? Berhati-hatilah dengan ini - tidak sering Anda menemukan NN di mana pernyataan Anda benar. Angka-angka ini dapat sangat bervariasi dan saya tidak dapat memikirkan kapan terakhir kali saya bekerja pada NN di mana input dan output saya sama persis. Input Anda adalah apa pun yang Anda inginkan berdasarkan pada fitur yang tersedia, output Anda tergantung pada jawaban yang Anda coba dapatkan (biner, klasifikasi, dll). Sangat jarang memiliki keduanya cocok.
I_Play_With_Data

Jawaban:

3

Pertanyaan ini mendapatkan beberapa kualitas yang sangat penting dari RNN dan DNN secara umum. Saya akan menjawab masing-masing sub-pertanyaan Anda, meskipun tidak dalam urutan yang sama (saya akan mencoba menyoroti di mana saya melakukannya)

Berbagi Parameter

Pertama, kualitas RNNs yang paling penting disebut berbagi parameter . Data berurutan biasanya dimasukkan ke dalam lapisan yang terpisah. Untuk input panjang 20, jaringan RNN akan memiliki 20 lapisan. Parameter internal yang sama digunakan untuk setiap lapisan, sehingga semua 20 lapisan menggunakan bobot yang samaW dan bias b. Bandingkan ini dengan perceptron multilayer yang akan memiliki 20 bobot dan bias terpisah.

Berbagi parameter memiliki beberapa manfaat:

  • Kami sekarang memiliki banyak parameter yang lebih sedikit. Ada 1 blok berulang bukannya 20 lapisan terpisah. Pengurangan 20x!
  • Ini secara efektif melipatgandakan data pelatihan. Lapisan berulang dapat belajar dari setiap kata dalam satu contoh kalimat sedangkan setiap lapisan dalam MLP belajar dari satu kata per kalimat.
  • Jaringan kami sekarang jauh lebih fleksibel. Kita dapat melatih kalimat hingga 20 kata dan kemudian menggeneralisasikannya menjadi kalimat 25 kata dengan menambahkan lebih banyak langkah atau dengan menggunakan RNN dinamis

Arsitektur jaringan

Anda bertanya tentang aktivasi tanh dan sigmoid. Untuk menjawab ini kita harus berbicara tentang arsitektur RNN tertentu. RNN sederhana yang dibahas di atas memiliki satu aktivasi. RNN sederhana cenderung menciptakan masalah menghilangnya gradien (atau meledak!) Karena aplikasi berulang dari bobot yang sama dan fungsi aktivasi.

Blok RNN ​​yang terjaga keamanannya (seperti GRU dan LSTM) menggunakan mekanisme gerbang untuk melewati aktivasi ke dalam dan ke luar dari status memori dan untuk menggabungkan status memori dengan input untuk menghasilkan output dari setiap blok. Karena itu, gerbang dapat menghentikan gradien merambat mundur. Sigmoid adalah fungsi aktivasi umum untuk gerbang karena menekan aktivasi ke (0,1) --- 0 benar-benar menghentikan aktivasi dan 1 membiarkannya lewat. Namun, setiap fungsi aktivasi yang layak dengan profil squashing yang sama berfungsi. Secara anekdot, sigmoid keras cukup umum akhir-akhir ini.

Selain gerbang, blok RNN ​​yang terjaga keamanannya memiliki keadaan internal yang aktivasi sedikit berbeda. Karena gating membatasi gradien backprop, kami memiliki banyak fleksibilitas pada aktivasi ini. Tidak perlu terjepit misalnya, dan ini adalah tempat aktivasi perbaikan (relu, elu, islu, dll) sering terlihat. Tanh adalah pilihan yang sangat masuk akal juga.

Mengenai bias dan bobot, setiap aktivasi dalam sel RNN biasanya memiliki bobot dan biasnya sendiri. Jadi GRU memiliki 3 aktivasi (tersembunyi, perbarui, dan atur ulang) dan masing-masing memiliki bobot dan biasnya sendiri. Padahal, ingat bahwa sebagai RNN, masing-masing digunakan kembali untuk setiap catatan waktu.

Backward Pass

Itu mencakup forward pass dengan cukup baik tetapi Anda juga mengajukan pertanyaan penting tentang bagaimana kesalahan menyebar ke belakang. Ada dua metode untuk mendekati ini.

Paksa Guru

Untuk RNN ​​yang menghasilkan prediksi pada setiap langkah waktu (seperti memprediksi hasil langkah-langkah berikut, terjemahan, atau pengenalan fonem), pemaksaan guru adalah metode untuk mengisolasi setiap langkah RNN. Dengan menghapus dependensi ini, Teacher Forcing memungkinkan RNN untuk menggunakan backprop konvensional dengan aturan rantai.

Tetapi bagaimana cara kerjanya? Jaringan yang dipaksakan oleh guru memiliki arsitektur kereta dan tes yang terpisah. Untuk pelatihan, di setiap catatan waktut, input xt digabungkan dengan target sebelumnya, yt-1. Bayangkan ini untuk jaringan yang bertugas memprediksi karakter berikut. Jaringan baru saja mencoba untuk memprediksi karakter untuk catatan waktu sebelumnya. Tapi kami malah menggunakan karakter yang diamati di timestep itu (kami tahu ini karena kami sedang dalam tahap pelatihan). Demikianlah kesalahan pada timestept hanya bergantung pada nilai yang diamati di t-1 dan input di t. Kami telah menghapus koneksi apa pun melalui waktu dari jaringan.

Saat pengujian, kami tidak tahu nilai sebenarnya di setiap catatan waktu jadi kami ganti yt-1 dengan output dari layer sebelumnya Hait-1. Dalam hal ini, koneksi temporal telah kembali tetapi hanya untuk fase uji.

Propagasi Kembali Melalui Waktu

Tetapi kita tidak harus menggunakan Gaya Guru. Propogasi balik melalui waktu memungkinkan kita untuk menerapkan algoritma backprop ke RNNs. Pertimbangkan jaringan dengann tanda waktu dan input x, kondisi tersembunyi h, keluaran Hai, dan nilai yang diamati y untuk setiap catatan waktu.

BPTT bekerja pada langkah-langkah berikut.

  1. Hitung gradien Hait untuk setiap Hait,ytpasangan. (Ini dapat dilakukan sekaligus.)
  2. Hitung gradien htuntuk setiap catatan waktu, dimulai dengan catatan waktu terakhir dan berulang bekerja mundur. (Ini harus dilakukan satu per satu.)
  3. Ini memberi kita n tepi untuk setiap parameter internal RNN kami. Trik untuk memperbarui parameter adalah menemukan kontribusi gradien untuk setiap catatan waktu (misWt Padahal kita hanya punya satu W) dan kemudian menjumlahkan gradien tersebut untuk memperbarui parameter internal.

Bacaan lebih lanjut

Saya sangat merekomendasikan Bab 10 dari Goodfellow, Bengio, dan Courville's Deep Learning untuk informasi lebih lanjut tentang RNNs. Selain itu buku RNN Graves ' fantstic untuk detail tingkat yang lebih tinggi

Sophie Searcy - Metis
sumber