這一段在學習RNN和LSTM,做一個學習筆記,免得遺忘了。
RNN會沒有限制的進行更新,因此知識的更新會變得很混亂。比如在一個時刻,模型知道一個人在美國,下一個時刻看到這個人在吃壽司,會認為他在日本,再下一個時刻看到北極熊,會把這個人的地點更新為北極。
混亂意味著信息會快速的改變、消失,模型很難保持長時的記憶。所以我們需要這個神經網絡去學習如何更新它的信息,讓這些知識的更新變得平和一點。
下面是解決的方法。
一、添加遺忘機制。例如,如果一個場景結束的時候,模型應該忘記當前場景的位置,時間,任何關于當前場景的信息。然而,如果一個角色在場景中死掉了,那么模型應該繼續記住這個人已經死了。因此,我們需要模型去學習遺忘、記住的機制:當有新的輸入時,模型應該知道哪些知識應該保留,哪些應該丟棄。
二、添加保留機制。當模型看到一個新的圖片時,它應該去學習是否圖片的所有信息都值得使用和保存。
三、根據一和二,當有新輸入時,模型會忘記它不再需要的長期記憶,然后學習輸入信息的哪些部分值得使用,把這些信息保存到它的長期記憶中。
四、最后,模型需要學習長期記憶的哪一方面需要立即使用。例如,一個人的年齡是一個有用的信息,需要被長期保存(小孩子更可能正在地上爬,成年人可能正在工作),但是年齡信息跟當前的場景可能不相關。因此,模型只是學習它需要關注的部分,而不是一次使用所有的記憶。
RNN會在每一時序步驟中以一個相當不受控制的方式過度改寫它的記憶,而LSTM以一個相當精確的方式轉換它的記憶:通過應用特殊的學習機制來確定哪些信息應該記住,哪些信息應該更新,應該注重哪些信息。這使得模型可以記錄更長時間的信息。
一個前向過程中更新的參數Ct和ht,Ct表示長期記憶,從剛開始到t時刻全部的記憶,ht表示工作記憶,當前t狀態需要用到的記憶。
數學表達
1)學習哪些信息需要保留,哪些需要遺忘。
Sigmoid函數是用來篩選信息的,范圍(0,1),0表示信息完全丟棄,1表示信息完全繼承。
2)接下來我們需要計算可以從當前輸入Xt中學習到的信息。Φ是激活函數,通常是tanh。
3)當我們要把從Xt中學習到的信息ltmt’加入到記憶中之前,我們需要學習ltmt’中的哪些信息是有用的,因為不一定輸入的Xt中的所有信息都是有用的。使用Sigmoid函數產生的向量進行篩選。
4)接下來更新一下長期記憶。
遺忘后的前一個狀態的長期記憶+當前輸入信息篩選后的信息。°表示元素相乘。
5)更新在本狀態工作的工作記憶。在這一步驟中,我們學習如何從含有所有記憶信息的長期記憶中,獲取對本狀態有用的工作記憶。
首先需要學習到一個關注向量。
那么工作向量更新為:
長期記憶,ltmt,通常被稱為細胞狀態,符號是Ct.
工作記憶,wmt,通常被稱為隱狀態,符號ht.
記憶向量,remembert,通常被稱為忘記門,符號ft.
保留向量,savet,通常被稱為輸入門(因為它決定了多少的輸入可以進入細胞狀態),符號it.
關注向量,focust,通常被稱為輸出門,符號Ot.
一個關于NN的形象例子:
一個關于RNN的形象例子:
一個關于LSTM的形象例子: