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.
- Hitung gradien ∇Hait untuk setiap Hait,ytpasangan. (Ini dapat dilakukan sekaligus.)
- Hitung gradien ∇htuntuk setiap catatan waktu, dimulai dengan catatan waktu terakhir dan berulang bekerja mundur. (Ini harus dilakukan satu per satu.)
- Ini memberi kita n tepi untuk setiap parameter internal RNN kami. Trik untuk memperbarui parameter adalah menemukan kontribusi gradien untuk setiap catatan waktu (mis∇Wt 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