日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RNN学习笔记3-LSTM

發布時間:2023/12/8 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RNN学习笔记3-LSTM 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

引入LSTM

盡管RNN被設計成可以利用歷史的信息來輔助當前的決策,但是由于在上節提到的梯度消失或者梯度爆炸問題,RNN主要還是學習短期的依賴關系。所以RNN新的技術挑戰就是-長期依賴。
長短時記憶網絡(Long Short Term Memory Network, LSTM),是一種改進之后的循環神經網絡,可以解決RNN無法處理長距離的依賴的問題.
LSTM在一個整體的循環網絡結構中除了外部的RNN大循環,還要考慮自身單元“細胞”的自循環。

傳統RNN每個模塊內只是一個簡單的tanh層,LSTM每個循環的模塊內又有4層結構:3個sigmoid層,1個tanh層
其中圖標

粉色的圓圈表示一個二目運算。兩個箭頭匯合成一個箭頭表示2個向量首尾相連拼接在一起。一個箭頭分叉成2個箭頭表示一個數據被復制成2份,分發到不同的地方去。

LSTM內部結構

LSTM的關鍵是細胞狀態CCC,一條水平線貫穿于圖形的上方,這條線上只有些少量的線性操作,信息在上面流傳很容易保持。如下圖

CCC控制參數,決定什么樣的信息要保留,什么樣的信息需要遺忘。–需要一直維護更新
怎么樣進行決策呢,就需要用到門:Gate
門:Gate:是一個使用sigmoid激活函數對輸入信息進行控制的結構。使用門可以對通過這個結構的輸入信息進行控制,使用激活函數后,全連神經網絡輸出一個0-1之間的數值。當sigmoid激活函數輸出為1時,門完全打開,全部信息可以通過;sigmoid激活函數輸出為0時,門完全閉合,任何信息無法通過。
第一層:遺忘門
根據當前的輸入、上一時刻的輸出和門的偏置項共同決定哪一部分記憶需要被遺忘。

ft=σ(Wf?[ht?1,xt]+bf)f_t=\sigma(W_f\cdot[h_{t-1},x_t]+b_f)ft?=σ(Wf??[ht?1?,xt?]+bf?)
Ct?1?ftC_{t-1}\bigodot f_t \quad \quadCt?1??ft? 決定需要遺忘哪些信息

第二層:記憶門
為了使循環神經網絡更有效的保存長期記憶,除了遺忘門,輸入門也發揮至關重要的作用。不僅需要忘記部分之前的記憶,還需要補充新的記憶,就需要輸入門來控制。

一個tanh層用來產生更新值的候選項CtC_tCt?,tanh的輸出在[-1,1]上,說明細胞狀態在某些維度上需要加強,在某些維度上需要減弱;還有一個sigmoid層(輸入門層),它的輸出值要乘到tanh層的輸出上,起到一個縮放的作用,極端情況下sigmoid輸出0說明相應維度上的細胞狀態不需要更新。
it=σ(Wi?[ht?1,xt]+bi)i_t=\sigma(W_i\cdot[h_{t-1},x_t]+b_i)it?=σ(Wi??[ht?1?,xt?]+bi?)
Ct~=tanh(WC?[[ht?1,xt]+bC)\tilde{C_t}=tanh(W_C\cdot[[h_{t-1},x_t]+b_C)Ct?~?=tanh(WC??[[ht?1?,xt?]+bC?)

生成新的細胞狀態
讓舊的細胞狀態Ct?1與ftC_{t-1}與f_tCt?1?ft?(f是forget忘記門的意思)相乘來丟棄一部分信息,然后再加個需要更新的部分it?Ct~i_t * \tilde{C_t}it??Ct?~?(i是input輸入門的意思),這就生成了新的細胞狀態CtC_tCt?

Ct=ft?Ct?1+it?Ct~C_t=f_t*C_{t-1}+i_t*\tilde{C_t}Ct?=ft??Ct?1?+it??Ct?~?

輸出層
輸出值跟細胞狀態有關,把CtC_tCt?輸給一個tanh函數得到輸出值的候選項。候選項中的哪些部分最終會被輸出由一個sigmoid層來決定

ot=σ(Wo[ht?1,xt],+bo)o_t=\sigma(W_o[h_{t-1},x_t],+b_o)ot?=σ(Wo?[ht?1?,xt?],+bo?)
ht=ot?tanh(Ct)h_t=o_t*tanh(C_t)ht?=ot??tanh(Ct?)

總結
\qquad\;\;輸入門:it=σ(Wi?[ht?1,xt]+bi)i_t=\sigma(W_i\cdot[h_{t-1},x_t]+b_i)it?=σ(Wi??[ht?1?,xt?]+bi?)
\quad\quad\;\;遺忘門:ft=σ(Wf?[ht?1,xt]+bf)f_t=\sigma(W_f\cdot[h_{t-1},x_t]+b_f)ft?=σ(Wf??[ht?1?,xt?]+bf?)
\quad\quad\;\;輸出門:ot=σ(Wo[ht?1,xt],+bo)o_t=\sigma(W_o[h_{t-1},x_t],+b_o)ot?=σ(Wo?[ht?1?,xt?],+bo?)

\;\;\;新記憶參數:Ct~=tanh(WC?[[ht?1,xt]+bC)\tilde{C_t}=tanh(W_C\cdot[[h_{t-1},x_t]+b_C)Ct?~?=tanh(WC??[[ht?1?,xt?]+bC?)

最后記憶參數:Ct=ft?Ct?1+it?Ct~C_t=f_t*C_{t-1}+i_t*\tilde{C_t}Ct?=ft??Ct?1?+it??Ct?~?

最終輸出狀態:ht=ot?tanh(Ct)h_t=o_t*tanh(C_t)ht?=ot??tanh(Ct?)

梯度消失問題

RNN 通過hth_tht?來保存和傳遞信息,之前分析了如果時間間隔較大容易產生梯度消失的問題。
LSTM 則通過記憶單元CtC_tCt? 來傳遞信息,通過iti_tit?ftf_tft? 的調控,CtC_tCt? 可以在 t 時刻捕捉到某個關鍵信息,并有能力將此關鍵信息保存一定的時間間隔。
如果沒有遺忘門,Ct=Ct?1+it?Ct~C_t=C_{t-1}+i_t\bigodot\tilde{C_t}Ct?=Ct?1?+it??Ct?~?,這樣的話?Ct?Ct?1\frac{\partial C_t}{\partial C_{t-1}}?Ct?1??Ct??恒為1,這樣CtC_tCt?會不斷增大,容易飽和,從而降低模型的性能。引入遺忘門后,?Ct?Ct?1=ft\frac{\partial C_t}{\partial C_{t-1}}=f_t?Ct?1??Ct??=ft?,當然如果多個ftf_tft?連乘同樣會導致梯度消失(ft∈[0,1]f_t\in[0,1]ft?[0,1])。但是LSTM的技巧就是將遺忘門的bias設置為正數,(例如 1 或者 5,如 tensorflow 中的默認值就是 1.0),這樣一來模型剛開始訓練時 forget gate 的值都接近 1,不會發生梯度消失 (反之若 forget gate 的初始值過小則意味著前一時刻的大部分信息都丟失了,這樣很難捕捉到長距離依賴關系)。 隨著訓練過程的進行,forget gate 就不再恒為 1 了。不過,一個訓好的模型里各個 gate 值往往不是在 [0, 1] 這個區間里,而是要么 0 要么 1,很少有類似 0.5 這樣的中間值,其實相當于一個二元的開關。

假如在某個序列里,forget gate 全是 1,那么梯度不會消失;某一個 forget gate 是 0,模型選擇遺忘上一時刻的信息。

參考:
https://www.cnblogs.com/zhangchaoyang/articles/6684906.html
https://zhuanlan.zhihu.com/p/60915302

總結

以上是生活随笔為你收集整理的RNN学习笔记3-LSTM的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。