前言:為什么有BP神經(jīng)網(wǎng)絡(luò)、CNN,還需要RNN? BP神經(jīng)網(wǎng)絡(luò)和CNN的輸入輸出都是互相獨(dú)立的,也就是說它模擬了神經(jīng)元之間的信息傳遞過程,但是作為人,我們依舊會(huì)記得小時(shí)候的很多事情,這就需要RNN了
RNN基礎(chǔ)
實(shí)際應(yīng)用中有些場景輸出內(nèi)容和之前的內(nèi)容是有關(guān)聯(lián)的。 RNN引入“記憶”的概念;遞歸指其每一個(gè)元素都執(zhí)行相同的任務(wù),但是輸出依賴于輸入 和“記憶”。所以說RNN一般應(yīng)用到NLP當(dāng)中。
-
循環(huán)神經(jīng)網(wǎng)絡(luò)中的“循環(huán)”體現(xiàn)在哪?
可以前bp神經(jīng)網(wǎng)絡(luò)不同的是,輸入一個(gè)x,產(chǎn)生一個(gè)狀態(tài),保存,把這個(gè)狀態(tài)作為輸入,輸入到下一次循環(huán)中,也就是說,把當(dāng)前的信息進(jìn)行記憶。用圖可以直觀理解。
- 加入了哪些參數(shù)?
1.輸入層到隱藏層直接的權(quán)重由U表示
2.隱藏層到隱藏層的權(quán)重W,它是網(wǎng)絡(luò)的記憶控制者,負(fù)責(zé)調(diào)度記憶。
3.隱藏層到輸出層的權(quán)重V

-
正向傳播
在t=1的時(shí)刻,U,V,W都被隨機(jī)初始化好,s0通常初始化為0,然后進(jìn)行如下計(jì)算:
時(shí)間就向前推進(jìn),此時(shí)的狀態(tài)s1作為時(shí)刻1的記憶狀態(tài)將參與下一個(gè)時(shí)刻的預(yù)測 活動(dòng),也就是:

以此類推,可得:

其中f可以是tanh,relu,sigmoid等激活函數(shù),g通常是softmax也可以是其他。 值得注意的是,我們說遞歸神經(jīng)網(wǎng)絡(luò)擁有記憶能力,而這種能力就是通過W將以 往的輸入狀態(tài)進(jìn)行總結(jié),而作為下次輸入的輔助。可以這樣理解隱藏狀態(tài): h=f(現(xiàn)有的輸入+過去記憶總結(jié))
-
反向傳播
bp神經(jīng)網(wǎng)絡(luò)用到的誤差反向傳播方法將輸出層的誤差總和,對(duì)各個(gè)權(quán)重的梯度 ?U,?V,?W,求偏導(dǎo)數(shù),然后利用梯度下降法更新各個(gè)權(quán)重。 對(duì)于每一時(shí)刻t的RNN網(wǎng)絡(luò),網(wǎng)絡(luò)的輸出ot都會(huì)產(chǎn)生一定誤差et,誤差的損失函 數(shù),可以是交叉熵也可以是平方誤差等等。那么總的誤差為E=∑tet,我們的目標(biāo) 就是要求取:
用到鏈?zhǔn)角髮?dǎo)法則,w的偏導(dǎo)如下:
u,V同理可以得到
問題,由于反向傳播過程中,出現(xiàn)多個(gè)小于一想乘的情況,容易出現(xiàn)梯度消失,這時(shí)候LSTM和GRU模型便后續(xù)被推出了?由于它們都有特殊的方式存儲(chǔ)”記憶”,那么以前梯度比較大的”記憶”不會(huì)像簡單的RNN一樣馬上被抹除,因此可以一定程度 上克服梯度消失問題。
LSTM
LSTM是RNN的一種,大體結(jié)構(gòu)一致,區(qū)別在于: LSTM的“記憶細(xì)胞”是改造過的 該記錄的信息會(huì)一直傳遞,不該記錄的信息會(huì)被截?cái)嗟?
RNN 在語音識(shí)別,語言建模,翻譯,圖片描述等問題的應(yīng)用的成功,都是通過 LSTM 達(dá)到的。
-
LSTM結(jié)構(gòu)
所有 RNN 都具有一種重復(fù)神經(jīng)網(wǎng)絡(luò)模塊的鏈?zhǔn)降男问健T跇?biāo)準(zhǔn)的 RNN 中,這個(gè)重復(fù)的模塊只有一個(gè)非常簡單的結(jié)構(gòu),例如一個(gè) tanh 層。
傳統(tǒng)的RNN“細(xì)胞”結(jié)構(gòu):
LSTM結(jié)構(gòu):
單一神經(jīng)網(wǎng)絡(luò)層,這里是有四個(gè),以一種非常特殊的方式進(jìn)行交互。
圖中使用的各種元素的圖標(biāo):
每一條黑線傳輸著一整個(gè)向量,從一個(gè)節(jié)點(diǎn)的輸出到其他節(jié)點(diǎn)的輸入。粉色的圈代表 pointwise 的操作,諸如向量的和,而黃色的矩陣就是學(xué)習(xí)到的神經(jīng)網(wǎng)絡(luò)層。合在一起的線表示向量的連接,分開的線表示內(nèi)容被復(fù)制,然后分發(fā)到不同的位置。 -
LSTM關(guān)鍵:“細(xì)胞狀態(tài)” 細(xì)胞狀態(tài)類似于傳送帶。
直接在整個(gè)鏈上運(yùn)行,只有一些少量的線性交互。信息在上面流 傳保持不變很容易。
-
LSTM怎么控制“細(xì)胞狀態(tài)”?
LSTM可以通過gates(“門”)結(jié)構(gòu)來去除或者增加“細(xì)胞狀態(tài)”的信息
包含一個(gè)sigmoid神經(jīng)網(wǎng)絡(luò)層次和一個(gè)pointwist乘法操作
Sigmoid層輸出一個(gè)0到1之間的概率值,描述每個(gè)部分有多少量可以通過,0表示“不允 許任務(wù)變量通過”,1表示“運(yùn)行所有變量通過”
LSTM中主要有三個(gè)“門”結(jié)構(gòu)來控制“細(xì)胞狀態(tài)”
-
第一個(gè)“門”==>“忘記門”:
決定從“細(xì)胞狀態(tài)”中丟棄什么信息;比如在語 言模型中,細(xì)胞狀態(tài)可能包含了性別信息(“他”或者“她”),當(dāng)我們看到新的代名詞的時(shí)候,可以考慮忘記舊的數(shù)據(jù)
-
第二個(gè)“門”==>“信息增加門”:
決定放什么新信息到“細(xì)胞狀態(tài)”中;
Sigmoid層決定什么值需要更新; T
anh層創(chuàng)建一個(gè)新的候選向量Ct; 主要是為了狀態(tài)更新做準(zhǔn)備
-
經(jīng)過第一個(gè)和第二個(gè)“門”后,可以確定傳遞信息的刪除和增加,即可以進(jìn)行 “細(xì)胞狀態(tài)”的更新
更新Ct-1為Ct; 將舊狀態(tài)與ft相乘,
丟失掉確定不要的信息;
加上新的候選值it*Ct得到最終更新后的“細(xì)胞狀態(tài)”
- 第三個(gè)“門”==>基于“細(xì)胞狀態(tài)”得到輸出;
首先運(yùn)行一個(gè)sigmoid層來確定細(xì)胞狀態(tài)的那個(gè)部分將輸出
使用tanh處理細(xì)胞狀態(tài)得到一個(gè)-1到1之間的值,再將它和sigmoid門的輸出相乘,輸出 程序確定輸出的部分。
前向傳播和反向傳播可以參看前面的傳播過程寫下來,更新LSTM中的參數(shù)。具體的公式可以參看:https://blog.csdn.net/Dark_Scope/article/details/47056361
作者的論文:https://arxiv.org/pdf/1402.1128v1.pdf












