一天搞懂深度学习—学习笔记3(RNN)
Recurrent Neural Network(RNN) (Neural Network with Memory)
1.一些基本的理解
開場首先來個填詞題目,I would like to arrive at (Taipei) on (November 2nd). 我們?nèi)藖硖畹脑?#xff0c;很簡單就能想到第一個空是地點,第二個是時間。那么對于計算機,它該如何處理這樣的內(nèi)容呢。
首先第一個要解決的是表示形式。
在語言中,最基本的是字,然后由字可以組成詞語,詞語可以連成句子,那么問題就變得簡單了,只要我們能表示一個詞語,并讓計算機識別這個詞語,那么就可以表示這樣一個句子。不過在自然語言中,一個字表達的意思往往不夠清楚,因此主要選擇對詞語進行建模,然后連詞成句,當然也可以對字進行建模,不過數(shù)量上應該少很多。
怎樣對詞語建模呢
如果了解work2vec的工作原理,那這個問題就很簡單了。work2vec將句子先拆分成詞語,首先建立詞語庫,對每一個詞語初始化100、200甚至更高維度的詞向量,注意到,這里的詞向量是需要先初始化的,然后在不斷的訓練中得到最優(yōu)詞向量。
(有一種編碼方式叫做獨熱編碼one-hot encoding, 具體內(nèi)容查看下面網(wǎng)址,個人覺得這個講的比其它的好 http://www.wyblog.cn/2016/10/31/%E6%95%B0%E6%8D%AE%E9%A2%84%E5%A4%84%E7%90%86-one-hot%E7%BC%96%E7%A0%81/)
2.我們來看看RNN
The above diagram shows a RNN being unrolled (or unfolded) into a full network. By unrolling we simply mean that we write out the network for the complete sequence. For example, if the sequence we care about is a sentence of 5 words, the network would be unrolled into a 5-layer neural network, one layer for each word.
1.xt is the input at time step t. For example, x1 could be a one-hot vector corresponding to the second word of a sentence.
2.st is the hidden state at time step t. It’s the “memory” of the network. st is calculated based on the previous hidden state and the input at the current step:
3.st=f(Uxt + Wst-1). The function f usually is a nonlinearity such as tanh or ReLU. s-1, which is required to calculate the first hidden state, is typically initialized to all zeroes.
4.ot is the output at step t. For example, if we wanted to predict the next word in a sentence it would be a vector of probabilities across our vocabulary. ot = softmax(Vst).
上文簡單點翻譯過來就是說,RNN網(wǎng)絡是時序性質(zhì)的網(wǎng)絡,在文本處理中,我們需要多少個信息(以每個RNN神經(jīng)單元的輸出信息為單位信息),則RNN就會展開多少層去模擬生成。從介紹中我們也可以知道,RNN第一個隱藏層的初始狀態(tài)初始化為全0,每一層都會有輸出信息,而且輸出信息是由softmax處理得到的概率分布信息。
3.RNN作用
RNN主要作用在NLP(Neural Language Processing)領(lǐng)域,因為在語言處理過程中需要知道語義上下文信息。上圖的RNN模型是可以知道上文信息的模型,當然我們亦可以實現(xiàn)上下文都可以得知的雙向循環(huán)RNN模型,亦可以多個RNN結(jié)構(gòu)疊加。其實這個設計就看需求了。在RNN中用的最多最火熱的就是LSTM(Long Short-term Memory)了,我們接下來談一談這個。
4.LSTM
先來看一天搞懂深度學習里面的兩張圖(就是這么大張旗鼓的用別人的東西)
看到LSTM加了一個Forget Gate,事實上就是這樣簡單么? 我們來看兩張對比圖片。
LSTM的核心是頂部的那條cell線,它直接穿過各個時刻的隱藏層,并且只會進行簡單的變大變小(X號表示乘以一個倍率)以及添加新內(nèi)容(+號),因此它可以在各個時刻變換中,使信息無損地保留下去。
對于當前時刻,第一個要做的就是要去除掉哪些無用的信息,第二個添加新信息,最后輸出結(jié)果。具體反映在圖中依次為從左到右,主線上x號對應的為去除無用信息的,主線上+號對應的就是增加信息的。
同樣是用ht-1和x作為輸入,首先是一個sigmoid的門,來判斷我們需要更新哪些信息。然后再用一個tanh門函數(shù),來表示我們可能要更新信息的數(shù)值,兩者相乘,得到具體要更新哪些信息,以及他們對應的數(shù)值。最后再加入到Ct-1中,得到這些數(shù)值之后,我們就能得出當前狀態(tài)Ct了:
我們得到的Ct可以作為cell線的輸出,剩下還有隱藏層和當前時刻的輸出需要處理,方法如下:
首先把Ct的狀態(tài),用tanh函數(shù)轉(zhuǎn)化為適合隱藏層和當前時刻輸出的形式(-1到1),然后根據(jù)ht-1和x的消息,選擇把哪些輸出。比如x輸入了一個新的性別消息,比如man,那么相應的我們就需要把該身份信息傳遞給下一時刻,這樣一來,如果下一時刻的輸入信息要求推測動詞的使用形式,那么根據(jù)我們傳遞過去的man這個信息,就能確定此時應該用第三人稱單數(shù)作為輸出。
最后:話說這些圖做的都炒雞好,感謝!
參考文獻
1.http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/
2.http://www.jianshu.com/p/9dc9f41f0b29
3.http://blog.sina.com.cn/s/blog_8e5ce7190102wsna.html
總結(jié)
以上是生活随笔為你收集整理的一天搞懂深度学习—学习笔记3(RNN)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring使用注解@Transacti
- 下一篇: 计算机的存储单位