Lupakan Lapisan dalam Jaringan Syaraf Berulang (RNN) -

13

Saya mencoba mencari tahu dimensi masing-masing variabel dalam RNN di lapisan lupa, namun, saya tidak yakin apakah saya berada di jalur yang benar. Gambar dan persamaan selanjutnya adalah dari posting blog Colah "Memahami Jaringan LSTM" :

masukkan deskripsi gambar di sini

dimana:

  • m 1xt adalah input ukuran vektorm1
  • n 1ht1 adalah status tersembunyi dari ukuran vektorn1
  • x t = [ 1 , 2 , 3 ] , h t - 1 = [ 4 , 5 , 6 ] [ x t , h t - 1 ] = [ 1 , 2 , 3 , 4 , 5 , 6 ][xt,ht1] adalah gabungan (misalnya, jika , lalu )xt=[1,2,3],ht1=[4,5,6][xt,ht1]=[1,2,3,4,5,6]
  • k ( m + n ) k m = 3 n = 3 w f = 3 3wf adalah bobot ukuran matriks, di mana adalah jumlah status sel (jika , dan pada contoh di atas, dan jika kita memiliki 3 status sel, maka matriks)k(m+n)km=3n=3wf=33
  • k 1 k k = 3 b f 3 1bf adalah bias ukuran vektor , di mana adalah jumlah status sel (karena seperti contoh di atas, maka adalah vektor ).k1kk=3bf31

Jika kita atur menjadi: [ 1 2 3 4 5 6 5 6 7 8 9 10 3 4 5 6 7 8 ]wf

[1234565678910345678]

Dan menjadi: [ 1 , 2 , 3 ]bf[1,2,3]

LaluWf.[ht1,xt]=

[1234565678910345678].[123456]=[91175133]

Kemudian kita bisa menambahkan bias,Wf.[ht1,xt]+bf=

[91175133]+[123]=[92177136]

Kemudian kita memberi mereka makan ke dalam fungsi sigmoid: , di mana , maka kita melakukan elemen fungsi ini bijaksana, dan dapatkan . x=[ 92 177 136 ][ 1 1 1 ]11+exx=[92177136]

[111]

Yang berarti untuk setiap keadaan sel, , (ada keadaan sel), kami mengizinkannya untuk berpindah ke lapisan berikutnya. k = 3Ct1k=3

Apakah asumsi di atas benar?

Ini juga berarti bahwa jumlah keadaan sel dan keadaan tersembunyi adalah sama?

pengguna1157751
sumber

Jawaban:

14

Pertanyaan bagus!

tl; dr: Keadaan sel dan keadaan tersembunyi adalah dua hal yang berbeda, tetapi keadaan tersembunyi bergantung pada keadaan sel dan mereka memang memiliki ukuran yang sama.

Penjelasan yang lebih panjang

Perbedaan antara keduanya dapat dilihat dari diagram di bawah ini (bagian dari blog yang sama):

Status sel adalah garis tebal yang bergerak dari barat ke timur melintasi bagian atas.

Status sel adalah garis tebal yang bergerak dari barat ke timur melintasi bagian atas. Seluruh blok hijau disebut 'sel'.

Keadaan tersembunyi dari langkah waktu sebelumnya diperlakukan sebagai bagian dari input pada langkah waktu saat ini.

Namun, ini sedikit lebih sulit untuk melihat ketergantungan antara keduanya tanpa melakukan langkah-langkah penuh. Saya akan melakukannya di sini, untuk memberikan perspektif lain, tetapi sangat dipengaruhi oleh blog. Notasi saya akan sama, dan saya akan menggunakan gambar dari blog dalam penjelasan saya.

Saya suka memikirkan urutan operasi sedikit berbeda dari cara mereka disajikan di blog. Secara pribadi, suka mulai dari gerbang input. Saya akan menyajikan sudut pandang di bawah ini, tetapi harap diingat bahwa blog mungkin merupakan cara terbaik untuk membuat LSTM secara komputasi dan penjelasan ini murni konseptual.

Inilah yang terjadi:

Gerbang input

masukkan deskripsi gambar di sini

Input pada waktu adalah dan . Ini disatukan dan dimasukkan ke dalam fungsi nonlinier (dalam hal ini sigmoid). Fungsi sigmoid ini disebut 'gerbang input', karena berfungsi sebagai pengganti sementara untuk input. Ini menentukan secara stokastik nilai mana yang akan kami perbarui pada catatan waktu ini, berdasarkan pada input saat ini.txtht1

Yaitu, (mengikuti contoh Anda), jika kita memiliki vektor input dan status tersembunyi sebelumnya , maka gerbang input melakukan hal berikut:xt=[1,2,3]ht=[4,5,6]

a) dan untuk memberi kitaxtht1[1,2,3,4,5,6]

b) Hitung dikalikan dengan vektor gabungan dan tambahkan bias (dalam matematika: , di mana adalah matriks bobot dari vektor input ke nonlinier; adalah input bias).WiWi[xt,ht1]+biWibi

Mari kita asumsikan kita beralih dari input enam dimensi (panjang vektor input gabungan) ke keputusan tiga dimensi tentang status yang akan diperbarui. Itu berarti kita membutuhkan matriks bobot 3x6 dan vektor bias 3x1. Mari kita berikan beberapa nilai itu:

Wi=[111111222222333333]

bi=[111]

Perhitungannya adalah:

[111111222222333333][123456]+[111]=[224262]

c) perhitungan sebelumnya menjadi nonlinier:it=σ(Wi[xt,ht1]+bi)

σ(x)=11+exp(x) (kami menerapkan elemen ini ke nilai dalam vektor )x

σ([224262])=[11+exp(22),11+exp(42),11+exp(62)]=[1,1,1]

Dalam bahasa Inggris, itu artinya kita akan memperbarui semua status kita.

Gerbang input memiliki bagian kedua:

d)Ct~=tanh(WC[xt,ht1]+bC)

Maksud dari bagian ini adalah untuk menghitung bagaimana kita akan memperbarui keadaan, jika kita melakukannya. Ini adalah kontribusi dari input baru pada langkah saat ini ke keadaan sel. Perhitungan mengikuti prosedur yang sama seperti diilustrasikan di atas, tetapi dengan unit tanh bukannya unit sigmoid.

Output dikalikan dengan vektor biner , tetapi kita akan membahasnya ketika kita sampai ke pembaruan sel.Ct~it

Bersama-sama, memberi tahu kami status mana yang ingin kami perbarui, dan memberi tahu kami bagaimana kami ingin memperbaruinya. Ini memberi tahu kami informasi baru apa yang ingin kami tambahkan ke perwakilan kami sejauh ini.itCt~

Lalu datanglah gerbang lupa, yang merupakan inti dari pertanyaan Anda.

Gerbang lupa

masukkan deskripsi gambar di sini

Tujuan dari gerbang lupa adalah untuk menghapus informasi yang telah dipelajari sebelumnya yang tidak lagi relevan. Contoh yang diberikan di blog adalah berbasis bahasa, tetapi kita juga bisa memikirkan jendela geser. Jika Anda memodelkan serangkaian waktu yang secara alami diwakili oleh bilangan bulat, seperti jumlah individu yang menular di suatu daerah selama wabah penyakit, maka mungkin sekali penyakit itu telah mati di suatu daerah, Anda tidak lagi ingin repot mempertimbangkan daerah itu saat memikirkan bagaimana perjalanan penyakit selanjutnya.

Sama seperti lapisan input, lapisan lupa mengambil status tersembunyi dari langkah waktu sebelumnya dan input baru dari langkah waktu saat ini dan menggabungkannya. Intinya adalah memutuskan secara stokastik apa yang harus dilupakan dan apa yang harus diingat. Dalam perhitungan sebelumnya, saya menunjukkan output lapisan sigmoid dari semua 1, tetapi pada kenyataannya itu lebih dekat ke 0,999 dan saya ditangkap.

Perhitungannya sangat mirip dengan apa yang kami lakukan di lapisan input:

ft=σ(Wf[xt,ht1]+bf)

Ini akan memberi kita vektor ukuran 3 dengan nilai antara 0 dan 1. Mari kita berpura-pura memberi kita:

[0.5,0.8,0.9]

Kemudian kami memutuskan secara stokastik berdasarkan nilai-nilai ini yang mana dari tiga bagian informasi yang harus dilupakan. Salah satu cara untuk melakukan ini adalah dengan menghasilkan angka dari distribusi seragam (0, 1) dan jika angka itu kurang dari probabilitas unit 'menghidupkan' (0,5, 0,8, dan 0,9 untuk unit 1, 2, dan 3 masing-masing), lalu kita nyalakan unit itu. Dalam hal ini, itu berarti kita melupakan informasi itu.

Catatan cepat: lapisan input dan lapisan lupa bersifat independen. Jika saya seorang yang bertaruh, saya bertaruh itu adalah tempat yang baik untuk paralelisasi.

Memperbarui status sel

masukkan deskripsi gambar di sini

Sekarang kita memiliki semua yang kita butuhkan untuk memperbarui keadaan sel. Kami mengambil kombinasi informasi dari input dan gerbang lupa:

Ct=ftCt1+itCt~

Sekarang, ini akan menjadi sedikit aneh. Alih-alih mengalikan seperti yang telah kami lakukan sebelumnya, di sini menunjukkan produk Hadamard, yang merupakan produk yang bijak.

Selain: produk Hadamard

Misalnya, jika kami memiliki dua vektor dan dan kami ingin mengambil produk Hadamard, kami akan melakukan ini:x1=[1,2,3]x2=[3,2,1]

x1x2=[(13),(22),(31)]=[3,4,3]

End Aside.

Dengan cara ini, kita menggabungkan apa yang ingin kita tambahkan ke keadaan sel (input) dengan apa yang ingin kita ambil dari keadaan sel (lupa). Hasilnya adalah keadaan sel baru.

Gerbang keluaran

masukkan deskripsi gambar di sini

Ini akan memberi kita keadaan tersembunyi yang baru. Pada dasarnya titik gerbang keluaran adalah untuk memutuskan informasi apa yang kita inginkan bagian selanjutnya dari model untuk diperhitungkan ketika memperbarui keadaan sel berikutnya. Contoh di blog adalah lagi, bahasa: jika kata benda jamak, konjugasi kata kerja pada langkah berikutnya akan berubah. Dalam model penyakit, jika kerentanan individu di daerah tertentu berbeda dari di daerah lain, maka kemungkinan tertular infeksi dapat berubah.

Lapisan output mengambil input yang sama lagi, tetapi kemudian mempertimbangkan status sel yang diperbarui:

ot=σ(Wo[xt,ht1]+bo)

Sekali lagi, ini memberi kita vektor probabilitas. Kemudian kami menghitung:

ht=ottanh(Ct)

Jadi keadaan sel saat ini dan gerbang keluaran harus menyetujui apa yang akan dihasilkan.

Yaitu, jika hasil adalah setelah keputusan stokastik dibuat, apakah setiap unit hidup atau mati, dan hasil adalah , maka ketika kita mengambil produk Hadamard, kita akan mendapatkan , dan hanya unit yang dinyalakan oleh gerbang keluaran dan dalam keadaan sel akan menjadi bagian dari hasil akhir.[ 0 , 1 , 1 ] o t [ 0 , 0 , 1 ] [ 0 , 0 , 1 ]tanh(Ct)[0,1,1]ot[0,0,1][0,0,1]

[EDIT: Ada komentar di blog yang mengatakan ditransformasikan kembali menjadi output aktual oleh , yang berarti bahwa output aktual ke layar (dengan asumsi Anda memiliki beberapa) adalah hasil dari transformasi nonlinier lain.]y t = σ ( W h t )htyt=σ(Wht)

Diagram menunjukkan bahwa pergi ke dua tempat: sel berikutnya, dan ke 'output' - ke layar. Saya pikir bagian kedua adalah opsional.ht

Ada banyak varian pada LSTM, tetapi itu mencakup hal-hal yang penting!

StorScerceress
sumber
Terima kasih atas jawaban anda! Saya punya satu pertanyaan tambahan, apakah Anda tidak keberatan. Jaringan syaraf yang dalam bisa dalam adalah karena turunan dari ReLU adalah 1 (Jika output lebih besar dari 0). Apakah ini kasus yang sama untuk sel ini juga? Saya tidak yakin bagaimana Tanh dan Sigmoid dapat memiliki turunan konstan 1?
user1157751
Dengan senang hati! Jaringan saraf dianggap 'dalam' ketika memiliki lebih dari satu lapisan tersembunyi. Turunan dari fungsi aktivasi (tanh, sigmoid, ReLU) mempengaruhi bagaimana jaringan dilatih. Seperti yang Anda katakan, karena ReLU memiliki kemiringan konstan jika inputnya lebih besar dari 0, turunannya adalah 1 jika kita berada di wilayah fungsi tersebut. Tanh dan unit sigmoid memiliki turunan mendekati 1 jika kita berada di tengah-tengah wilayah aktivasi mereka, tetapi turunannya tidak akan konstan. Mungkin saya harus membuat posting blog terpisah tentang turunan ....
StatsSorceress
Bisakah Anda menunjukkan contoh turunannya mendekati 1 di wilayah aktivasi? Saya telah melihat banyak sumber yang berbicara tentang turunan tetapi tidak ada matematika yang dilakukan?
user1157751
Ide yang bagus, tetapi saya perlu waktu untuk menulis posting yang tepat tentang itu. Sementara itu, pikirkan bentuk fungsi tanh - ini adalah 'S' yang memanjang. Di tengah adalah tempat turunannya adalah yang tertinggi. Di mana S datar (ekor S) turunannya adalah 0. Saya melihat satu sumber yang mengatakan sigmoids memiliki turunan maksimum 0,25, tetapi saya tidak memiliki batas yang setara untuk tanh.
StatsSorceress
Bagian yang saya tidak mengerti tidak seperti ReLU dengan turunan konstan 1 di mana x> 0, tetapi sigmoid dan tanh memiliki nilai variabel untuk kedua turunannya. Bagaimana ini bisa "konstan"?
user1157751