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. 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
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.txtht−1
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 kitaxtht−1[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,ht−1]+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=⎡⎣⎢123123123123123123⎤⎦⎥
bi=⎡⎣⎢111⎤⎦⎥
Perhitungannya adalah:
⎡⎣⎢123123123123123123⎤⎦⎥⋅⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢123456⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥+⎡⎣⎢111⎤⎦⎥=⎡⎣⎢224262⎤⎦⎥
c) perhitungan sebelumnya menjadi nonlinier:it=σ(Wi⋅[xt,ht−1]+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,ht−1]+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
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,ht−1]+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
Sekarang kita memiliki semua yang kita butuhkan untuk memperbarui keadaan sel. Kami mengambil kombinasi informasi dari input dan gerbang lupa:
Ct=ft∘Ct−1+it∘Ct~
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]
x1∘x2=[(1⋅3),(2⋅2),(3⋅1)]=[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
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,ht−1]+bo)
Sekali lagi, ini memberi kita vektor probabilitas. Kemudian kami menghitung:
ht=ot∘tanh(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=σ(W⋅ht)
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!