rnn,中文』迴圈神經網路『,解決的是時間序列問題。什麼是時間序列問題呢,就是我們的樣本資料之間在時間維度上存在關聯的,跟一般的神經網路不一樣,也就是說我們前乙個輸入和後乙個輸入有某種說不清道不明的關係,需要rnn這種特定結構的神經網路去尋找內部聯絡。
下面是rnn的乙個基本結構和乙個官網結構,第乙個圖里左邊是未展開的形式,右邊是展開的形式 ,將每乙個時刻t=t的過程統統列舉出來,它們共享引數w、u、v,最終的損失是每乙個時刻的損失累加
對於時刻t,存在:
,其中ϕ為啟用函式,一般來說會選擇tanh函式,b為偏置,而t時刻的輸出o為:
輸出的**值y_hat為:
σ為啟用函式,通常rnn用於分類,一般用softmax函式。
針對每個時刻經過這樣的計算,我們就能得到每個時刻的y_hat和h_t,以及各自的損失,再通過累加每個時刻的損失值得到最終的損失,這樣就算是一次前向傳播結束了。
我們說模型的訓練其實就是:將資料喂到模型裡,找到一批引數使得損失函式最小的過程。那麼最重要的就是這批引數的更新過程了,我們用的是梯度下降的過程來更新引數,本質就這乙個公式,敲黑板啦!!w_new = w_old - a(dl/dw),其中w是我們的引數,a是學習率,l是損失函式。然而w和l是沒有直接的關係的,但它們之間有間接的關係,l--->y_hat--->o_t--->h_t--->w,這樣就有關係了,所以我們需要用到鏈式法則來求導。
一共有這個幾個引數,w、u、v、b、c,那我們就以w為例手推一下反向傳播的過程,假設我們一共有4個時刻,t=1、2、3、4。詳細的看下面的
從上面的推導過程看,梯度消失和梯度**主要是由長距離的累乘導致的,那麼擺在我們面前的有兩種解決方案:
尋找更好的啟用函式
修正網路結構(這也是為什麼lstm和gru出現的原因)
理論上rnn是可以處理長期依賴問題的,但實際中並不是這樣的。標準的rnn結構中只有乙個神經元,乙個tanh層進行重複的學習,這樣會存在一些弊端。例如,我是陝西人,我在哪哪哪上的大學,那兒的天氣很舒服,但我更喜歡***的肉夾饃,這個***明顯是陝西,但它兩距離太遠了,可能學不到這些資訊。
lstm是一種特殊的rnn,也可以說是一種優化後的rnn,一般在實際中,沒有人會選擇最原始的rnn,而是選擇一些他的變種比如lstm和gru。lstm在每乙個重複的模組中有四個特殊的結構,以一種特殊的方式進行互動。接下來我們逐一說明:
忘記門用來決定我們需要丟棄什麼資訊,需要使用到當前的輸入x_t以及上一時刻的隱狀態h_t-1,使用啟用函式sigmoid來決定資訊的輸入,0代表完全丟棄,1代表完全通過。
輸入門就是簡單的將當前時刻x_t和上一時刻的隱狀態h_t-1拼接後,經過乙個sigmoid啟用函式;候選值是當前時刻x_t和上一時刻的隱狀態h_t-1拼接後,經過乙個tanh啟用函式
更新c_t的值,由c_t-1變為c_t
我們執行乙個 sigmoid 層來確定細胞狀態的哪個部分將輸出出去。接著,我們把細胞狀態通過 tanh 進行處理(得到乙個在 -1 到 1 之間的值)並將它和 sigmoid 門的輸出相乘,經過乙個tanh輸出我們的h_t,最終的h_t和c_t會輸入下乙個神經元中。
lstm反向傳播過程中,上式這個是主要的連乘部分,和 rnn 最大的區別在於,每一步的結果是由加法得來的,那麼就避免的深度的累乘了,也就不再有梯度**和梯度消失了。
gru在lstm的基礎上做了簡化,將忘記門和輸入門合成了乙個單一的更新門,所以gru就只剩兩個門更新門和充值門,同時gru還混合了細胞狀態和隱藏狀態。
rnn主要是為了解決時序問題的,但可以聯絡上的距離是有限的,同時會有梯度消失和梯度**的現象存在。
lstm和gru是特殊的rnn變體,它兩相差不大,都能通過各種門將重要特徵保留,保證其在long-term 傳播的時候也不會被丟失,同時gru比lstm更簡潔一些,訓練也會更省時間,但是都比tanh要明顯好很多。在選擇標準lstm或者gru的時候還要看具體的任務是什麼。
RNN,LSTM,GRU網路的架構對比
前言 接下來要用到時間序列網路做實驗,lstm應該是個不錯的選擇,今年6月份時候快速的過了一遍lstm網路各個門控結構的定義,並跟著網路教程做了小demo實驗。轉眼又過去半年了,在這半年裡接觸 學習了很多的東西,深感自己之前學習東西都是一知半解,等於在一直快速搭框架,具體內容和細節把握的極差。有句俗...
mysql的簡單介紹 mysql的簡單介紹
mysql的簡單介紹 資料庫的內部鏈結 1 連線管理器 使用者或應用程式連線 2 分析器 3 快取區4 優化器 優化器執行的結果交由儲存引擎,再轉向物理層 表空間 myisam每個表有三個檔案 frm 表結構 myd 表資料 myi 表索引 innodb 所有表空間再乙個檔案 資料庫失敗的原因 1 ...
簡單的 介紹 樹形DP介紹
給定一棵有n個節點的樹 通常是無根樹,也就是有n 1條無向邊 我們可以任選乙個節點為根節點,從而定義出每個節點的深度和每棵子樹的根。在樹上設計動態規劃演算法時,一般就以節點從深到淺 子樹從小到大 的順序作為dp的 階段 dp的狀態表示中,第一維通常是節點編號 代表以該節點為根的子樹 大多數時候,我們...