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:
- Bagaimana cara back-propagation bekerja di jaringan saraf berulang?
- Apakah bobot yang mengarah dari input ke node tersembunyi sama untuk setiap langkah lainnya? Bagaimana dengan bobot dari node tersembunyi ke output?
- Bagaimana cara bias bekerja secara tepat dalam jaringan saraf berulang?
- 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.
Jawaban:
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:
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 gantiyt - 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.
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
sumber