李宏毅-机器学习-RNN-笔记
文章目錄
- 前言
 - 1 RNN
 - 1.1 引例導入
 - 1.2 RNN
 - 1.3 舉例
 
- 2 Long Short-term Memeory (LSTM)
 - 2.1 LSTM 基本組成
 - 2.2 LSTM實例
 - 2.3LSTM 結構
 
- 3 RNN應用
 - 3.1 RNN局限
 - 3.2 應用
 
前言
李宏毅-機器學習課程-筆記
1 RNN
1.1 引例導入
引例:利用前饋神經網絡(FFN)解決在空缺位置填充單詞問題
 \qquad FFN:Input:一個單詞(一個向量表示一個單詞)
 \qquad ??? Output:輸入單詞屬于空缺位置的概率分布
 
\qquad FNN缺點:神經網絡沒有記憶力,不考慮上下文,對于不同性質的空缺位置,輸入單詞的概率分布是相同的。
 \qquad比如:第一句中TaipeiTaipeiTaipei是目的地,而在第二句中是出發地,那么在這兩個空缺的地方,TaipeiTaipeiTaipei出現的概率不一定是相同的,而利用FNN計算之后TaipeiTaipeiTaipei的概率分布始終是不變的,不符合語義.
 
1.2 RNN
RNN:擁有記憶力,考慮上下文內容,相同輸入不同概率分布輸出的神經網絡;
 \qquad?隱藏層的輸出存儲在內存中,網絡的輸入不光考慮原始的輸入也要考慮隱藏層的輸出;
 \qquad?換句話說就是將隱藏層的輸出同時作為輸入,影響輸出.
 
1.3 舉例
輸入序列:
 \qquad\qquad[11][11][22]......\left[\begin{array}{c} 1 \\ 1\\ \end{array}\right]\left[\begin{array}{c} 1 \\ 1\\ \end{array}\right]\left[\begin{array}{c} 2 \\ 2\\ \end{array}\right]... ...[11?][11?][22?]......
 條件:所有權重www均為1;沒有偏差biasbiasbias;所有激活函數均為線性函數.
 
(1) input:[11]input:\left[\begin{array}{c} 1 \\1 \end{array}\right]input:[11?],[a1a2]=[00]\left[\begin{array}{c} a_1 \\a_2 \end{array}\right]=\left[\begin{array}{c} 0 \\0 \end{array}\right][a1?a2??]=[00?],
\qquad??經過網絡后[h1h2]=[22]\left[\begin{array}{c} h_1 \\h_2 \end{array}\right]=\left[\begin{array}{c} 2 \\2 \end{array}\right][h1?h2??]=[22?],
\qquad??ouput=[44]ouput=\left[\begin{array}{c} 4 \\4 \end{array}\right]ouput=[44?],并且將[h1h2]\left[\begin{array}{c} h_1 \\h_2 \end{array}\right][h1?h2??]賦值給[a1a2]\left[\begin{array}{c} a_1 \\a_2 \end{array}\right][a1?a2??],則[a1a2]=[22]\left[\begin{array}{c} a_1 \\a_2 \end{array}\right]=\left[\begin{array}{c} 2 \\2 \end{array}\right][a1?a2??]=[22?],并且也作為下一次的輸入.
 
 \qquad(2) input:[11]input:\left[\begin{array}{c} 1 \\1 \end{array}\right]input:[11?],[a1a2]=[22]\left[\begin{array}{c} a_1 \\a_2 \end{array}\right]=\left[\begin{array}{c} 2 \\2 \end{array}\right][a1?a2??]=[22?],
\qquad??經過網絡后[h1h2]=[66]\left[\begin{array}{c} h_1 \\h_2 \end{array}\right]=\left[\begin{array}{c} 6 \\6 \end{array}\right][h1?h2??]=[66?],
\qquad??ouput=[1212]ouput=\left[\begin{array}{c} 12 \\12 \end{array}\right]ouput=[1212?],并且將[h1h2]\left[\begin{array}{c} h_1 \\h_2 \end{array}\right][h1?h2??]賦值給[a1a2]\left[\begin{array}{c} a_1 \\a_2 \end{array}\right][a1?a2??],則[a1a2]=[66]\left[\begin{array}{c} a_1 \\a_2 \end{array}\right]=\left[\begin{array}{c} 6\\6 \end{array}\right][a1?a2??]=[66?],并且也作為下一次的輸入.
 
 \qquad(3) input:[22]input:\left[\begin{array}{c} 2 \\2 \end{array}\right]input:[22?],[a1a2]=[1616]\left[\begin{array}{c} a_1 \\a_2 \end{array}\right]=\left[\begin{array}{c} 16 \\16 \end{array}\right][a1?a2??]=[1616?],
\qquad??經過網絡后[h1h2]=[66]\left[\begin{array}{c} h_1 \\h_2 \end{array}\right]=\left[\begin{array}{c} 6 \\6 \end{array}\right][h1?h2??]=[66?],
\qquad??ouput=[3232]ouput=\left[\begin{array}{c} 32 \\32 \end{array}\right]ouput=[3232?],并且將[h1h2]\left[\begin{array}{c} h_1 \\h_2 \end{array}\right][h1?h2??]賦值給[a1a2]\left[\begin{array}{c} a_1 \\a_2 \end{array}\right][a1?a2??],則[a1a2]=[1616]\left[\begin{array}{c} a_1 \\a_2 \end{array}\right]=\left[\begin{array}{c} 16\\16 \end{array}\right][a1?a2??]=[1616?],并且也作為下一次的輸入.
 
\qquad如果改變輸入序列的順序就會改變輸出結果,說明RNN會考慮輸入數據的順序問題,在預測當前結果時,也包括了之前的信息。
 RNN 解決引例問題過程:
 \qquad首先將句子當中的每一個單詞轉換為向量,例如arrive=x1arrive=x^1arrive=x1,將x1x^1x1放入RNN中得到a1a^1a1,根據a1a^1a1得到y1y^1y1,y1y^1y1是arrivearrivearrive在每一個空缺處的概率分布,a1a^1a1存儲起來,同時與x2x^2x2作為預測TaipeiTaipeiTaipei概率分布的輸入,說明預測TaipeiTaipeiTaipei,考慮到了前面是arrivearrivearrive的信息,以此類推。
 \qquad圖中的網絡中并不是3個RNN,而是同一個RNN在不同的時間點,使用3次.
 
 \qquad 所以當TaipeiTaipeiTaipei前面的單詞不同時,那么通過x1x^1x1計算出來的a1a^1a1的值也是不同的,作為預測TaipeiTaipeiTaipei概率的輸入也就不同,那么計算出來的概率就是不同的,不同上下文TaipeiTaipeiTaipei的概率就是不同的。
 
\qquad 可以將RNN結構設計為深度網絡
 
 RNN分類:
 Elman Network :將隱藏單元的輸出作為下一次預測的輸入
 Jordan Network:將上一次的預測輸出作為下一次預測的輸入
 ????由于中間隱藏層輸出結果相對來是不可控,最后的輸出結果更有意義,相對來說我們知道memory存的是什么信息,所以 Jordan Network比Elman Network性能更好.
 
 ????雙向RNN(Bidirectional RNN):
 ????RNN可以從正向和反向讀取信息,可以先處理xtx^txt,也可以先處理xt+2x^{t+2}xt+2,BiRNN輸出中間結果yt+1y^{t+1}yt+1時,已經考慮前后兩個范圍,考慮的信息更多.
 
2 Long Short-term Memeory (LSTM)
比較長的短期記憶
 3個門 4輸入 1輸出
2.1 LSTM 基本組成
LSTM:一個單元中,有4個輸入和1個輸出,4個輸出=3個控制信號和1個輸入
組成成分:
- Input Gate:控制input數據輸入
 - Forget Gate:控制是否保存中間結果
 - Output Gate:控制output數據輸出
輸入:
\qquadzoz_ozo?:輸出門控制信號
\qquadziz_izi?:輸入門控制信號
\qquadzfz_fzf?:遺忘門控制信號
\qquadzzz:輸入
輸出:
\qquadaaa:輸出
\qquadfff:激活函數基本都是sigmoidsigmoidsigmoid函數,
\qquad???值域在000和111之間,函數值決定所控制門的開關程度。值越大,門打開程度越大。
\qquadccc:當前隱藏層輸出值
\qquadc′c^{\prime}c′:下一次隱藏層輸出值
c′=g(z)f(zi)+cf(zf)c^{\prime}=g(z)f(z_i)+cf(z_f)c′=g(z)f(zi?)+cf(zf?)
\qquad\qquad當f(zi)=0f(z_i)=0f(zi?)=0時,不考慮輸入g(z)g(z)g(z)
\qquad\qquad當f(zi)=1f(z_i)=1f(zi?)=1時,g(z)g(z)g(z)全部考慮
\qquad\qquad當f(zf)=0f(z_f)=0f(zf?)=0時,不考慮上一次的隱藏值ccc
\qquad\qquad當f(zf)=1f(z_f)=1f(zf?)=1時,ccc全部考慮
綜合所有的成分計算輸出:
a=h(c′)f(zo)a=h(c^{\prime})f(z_o)a=h(c′)f(zo?)
\qquad\qquad當f(zo)=0f(z_o)=0f(zo?)=0時,無法輸出,輸出的是000
\qquad\qquad當f(zo)=1f(z_o)=1f(zo?)=1時,h(c′)h(c^{\prime})h(c′)全部輸出
 
2.2 LSTM實例
\qquad輸入:2維
 \qquad輸出:1維
 \qquad控制門信號:
 {x2=1x2的值存入memoryx2=?1重置memoryx3=1輸出memory的值\begin{cases} x_2=1& x_2的值存入memory \\ x_2=-1&重置memory \\ x_3=1 & 輸出memory的值 \end{cases}????x2?=1x2?=?1x3?=1?x2?的值存入memory重置memory輸出memory的值?
 \qquad以第一個輸入為例[310]\left[\begin{array}{c} 3 \\1\\0 \end{array}\right]???310????,LSTM中一共4個輸入,[310]\left[\begin{array}{c} 3 \\1\\0 \end{array}\right]???310????分別乘以4個不同的權重和加上不同的偏差.
 \qquad得到最后的輸出y=0y=0y=0,這些參數是訓練得到的.
 
2.3LSTM 結構
\qquad原始神經網絡和LSTM網絡聯系
 \qquad原始神經網絡結構如圖:
 
 \qquadLSTM結構:用LSTM代替神經網絡的神經元;
 \qquad\qquad\qquad?輸入乘以4組參數,作為輸入進行計算.
 
\qquadLSTM 詳細結構
 \qquad\qquad輸入:xtx_txt?
 \qquad\qquad\qquadxtx_txt?分別乘以4個矩陣得到zfz^fzf,zzz,ziz^izi,zoz^ozo 4個輸入向量
 \qquad\qquad\qquadzfz^fzf:遺忘門控制信號向量
 \qquad\qquad\qquadzzz:輸入向量
 \qquad\qquad\qquadziz^izi:輸入門控制信號向量
 \qquad\qquad\qquadzoz^ozo:輸出們控制信號向量
 \qquad\qquad 4個向量進入相應的輸入口,進行計算,將向量的每一個維度的值放入LSTM的每一個單元。
 
 取一個維度作為例,計算過程如下:
 ct=ct?1f(zf)+g(z)f(zi)c^{t}=c^{t-1}f(z^f)+g(z)f(z^i)ct=ct?1f(zf)+g(z)f(zi)yt=f(zo)h(ct)y^t=f(z^o)h(c^t)yt=f(zo)h(ct)ht=yth^t=y^tht=yt
 LSTM最終形態
 將ctc^tct,hth^tht和xt+1x^{t+1}xt+1作為下一次的輸入
 
 并且設計多層LSTM
 
3 RNN應用
\qquad學習目標:令y1y^1y1與相應的向量越相似,交叉熵損失越小
 
\qquad訓練:
 \qquad\qquadRNN通過BPTT訓練,根據梯度下降更新參數
 
3.1 RNN局限
RNN訓練困難
 原因:RNN的total loss函數有的地方非常平坦 有的地方陡峭
 解決:Clipping 梯度大于某個值就等于這個值
 
 為什么損失函數會出現這種情況?
 原因:同樣www在不同的時間點反復地使用
 實例:www在很小的范圍內,www的梯度會很大或很小
 
LSTM可以解決梯度消失的問題:
 原因:Memory cell 和input是相加的關系,除非遺忘門關閉否則對memory的影響不會消失,換句話說遺忘門如果開著,則不會產生梯度消失的問題。如果遺忘門關著才會把memory存儲的數據清洗掉,消除原來數據的影響.
3.2 應用
多對一:情緒分析Sentiment Analysis
 通過閱讀一篇文章,判斷文章內容表達的情緒是正面或者負面
 
輸入向量序列 輸出一個向量
多對多:序列對序列 input長 output短 語音識別
 
CTC:解決疊字問題
 
CTC訓練問題:
 
Seq2Seq 不同長度 機器翻譯 訓練不知道何時停止
 
添加一個“斷” ,作為停止的標志.
 
 超越序列
 語法分析:得到文法的結構樹
 
Seq2Seq Auto-encoder-Text
 理解單詞序列含義不能忽略單詞之間的順序
 
Seq2Seq Auto-encoder-Speech
 
語音->向量
 
RNN encoder和decoder 聯合訓練joinly train
 訓練目標 :輸出和輸入越來越接近.
 
總結
以上是生活随笔為你收集整理的李宏毅-机器学习-RNN-笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 1、HotSpot And OpenJD
 - 下一篇: JVM,JER,JDK各自的作用和之间的