LSTM邏輯設計詳細解讀

1:前言

之前在用LSTM做時序問題分類,如單變量預測、多變量預測、LSTM+CNN做時空卷積神經網絡算法設計時,涉及算法調參過程時,對參數量和Num_Units的概念沒有完全理解掌握,所以重新對LSTM自底向上重新梳理一遍。包括LSTM的設計原理,解決的主要問題,以及輸入輸出結果圖。
備註:本篇博客主要是邏輯概念的梳理,不涉及到複雜數學推導,如反向傳播計算,只有一些簡單的線性矩陣運算。


2:目錄

  • 2.1 RNN的介紹與應用於什麼場景
  • 2.2 SimpleRNN的缺陷
  • 2.3 LSTM的設計邏輯
  • 2.4 LSTM各個門的激活函數
  • 2.5 LSTM實現的詳細結構圖
  • 2.6 相關引申問題
  • 2.7 參考文獻及資料

2.1 RNN的介紹與應用於什麼場景

在傳統神經網絡模型中,是從輸入層到隱含層再到輸出層,層與層之間是全連接的,每層之間的節點是無連接的,這種網絡結構對很多問題解決辦法有限。循環神經網絡RNN的目的使用來處理序列數據,例如輸入一段詞彙:“I arrive BeiJing in November” ,需要預測目的地和出發地,如果利用前向神經網絡實現,我們將BeiJing這個單詞經過詞彙編碼輸入後,預測爲目的概率預測值是最大。但後面假設在這個網絡中又輸入一段詞彙:“I leave BeiJing in November”,由於輸入單詞都是BeiJing,因此目的地爲BeiJing的概率最大,由第二個輸入語句可以看到BeiJing實際上應該預測爲出發地的概率最大。

而循環神經網絡RNN具有記憶功能:當輸入“I arrive BeiJing in November”時,在看到BeiJing這個詞彙之前,已經看到並記憶arrive 這個詞彙,將BeiJing預測爲目的地的概率最大。當輸入“I leave BeiJing in November”,在看到BeiJing這個詞彙之前,已經看到並記憶leave這個詞彙,因此將BeiJing預測爲出發地的概率最大。

RNN之所以稱爲循環神經網路,即一個序列當前的輸出與前面的輸出也有關,即在每個時刻做決策的時候都考慮一下上一個時刻的決策結果。理論上,RNN可以對任何長度的序列數據進行處理。在實踐中,爲了降低複雜性往往假設當前的狀態只與前面的某幾個狀態相關。下圖是一個展開的RNN結構示意圖。
在這裏插入圖片描述
中間隱層節點,是RNN的memory (記憶)部分
圖中可以看到每個時間點的決策會受前一時間點決策的影響

計算公式如下:
Ot=f(XW+Yt1V+b)\mathrm{O}_{\mathrm{t}}=\mathrm{f}\left(\mathrm{X}^{\star} \mathrm{W}+\mathrm{Y}_{\mathrm{t}-1}^{\star} \mathrm{V}+\mathrm{b}\right),其中W、V、b是模型的參數,下標t代表當前的序列位置(時間點),t-1代表上個位置(上個時間點),X是當前的輸入,f(·)是激活函數,*是矩陣乘法,O是模型輸出。

上圖是一個無隱藏層的循環神經網絡,叫做“simple RNN”。是後續LSTM、GRU等門限循環網絡的基礎模型。


2.2 Simple RNN存在的問題

simple RNN雖然可以解決時序數據的依賴關係,但也存在問題:
比如在一個比較長的時序中(假設1000個),權重矩陣爲W,在進行前向傳播過程中,由於該權重矩陣W是共享的,當我們要輸出t=1000時的數據,那麼就是w1000w^{1000},如果W大於1,則連乘1000此可能大的驚人,如果W小於1,則連乘1000此可能小的可以忽略。也許有人會說當W大於1時,我們將學習率調小一點,當W大於1時,將學習率調大一點?事實上,由於時序過長,無論調小或者調大,其最後計算結果都是一個極端值,下圖是個例子:
在這裏插入圖片描述

如當W=1.01時,最後時序輸出結果約爲20000
在這裏插入圖片描述
如當W=0.99時,最後時序輸出結果約爲0
在這裏插入圖片描述
很容易看到,這是一個指數爆炸或指數衰減的過程。同樣在計算反向傳播的時候也是如此。誤差反向傳播過程可以近似看做輸出層誤差乘上倒數第t個時刻的梯度,此時跟前向傳播結果類似,當更新靠前時刻的參數時,計算的梯度要麼非常大,要麼非常小,前面時刻的參數將停止更新。這就是梯度消失或者梯度爆炸。


針對Simple RNN存在的問題,我們可以想到那些解決辦法?

Simple RNN在訓練時,error loss 可能某段時間非常大,某段時間又非常小,是因爲同樣的權重矩陣W,在時間(序列)轉換計算過程中,反覆使用,如果一點權重矩陣W有影響,導致要麼梯度非常大,要麼梯度非常小,非常極端。

既然Simple RNN梯度變化非常大,那麼是否可以設置一個閾值,當達到這個閾值時,梯度停止更新,以此避免發生影響模型之前積累的結果。但是,這樣的閾值設定也有缺陷:當梯度達到閾值後,模型難以再學習很靠前的時序數據信息了,因爲梯度停止更新。

因此Simple RNN在理論設計上可以保存任意長的時序數據來輔助當前時間點的決策,然而由於在訓練模型時,梯度無法準確合理的傳到很靠前的時間點(要麼太大,要麼太小),因此Simple RNN實際上只能記住並不是很長的時間序列信息數據。只是說傳統前饋網絡網絡,可以記住的歷史信息要長一些,但是Simple RNN無法記住長距離的信息。

針對Simple RNN的缺陷和設定閾值的啓發思想,先引出接下來的Standard RNN,最後看LSTM是如何解決Simple RNN的缺陷問題


2.3:LSTM的設計邏輯

在Simple RNN模型中,每個時間點的決策受當前時刻和前一時間點的決策的綜合影響,而我們很難看到Simple RNN與記憶具有某種交互聯繫。

我們回到神經網絡模型剛開始設計出來的參照模板:神經網絡模型本身就是模擬人腦結構的信息輸入、記憶、輸出,是生物腦神經結構各種功能在數學世界的投影。

假設我們現在正玩德州撲克,每一次我們出牌選擇肯定會經過以下步驟:

  1. 查看現在手裏現在準備要出的牌
  2. 回憶過去已經出牌的場景
  3. 綜合1,2的信息,做出最合理的出牌決策

上面玩撲克過程中,第1步準備要出的牌就是當前時刻的外部輸入X(t),第2步就是調用過去歷史出牌時刻的信息(記憶),第3步就是結合1,2的綜合信息來推理出當前的出牌結果,也就是當前時刻的輸出Y(t)。

在上面的第2步過程中,回憶歷史時刻出牌的信息時,並不是回憶過去具體出了那張牌,而是回憶一個大致模糊而包含大多數時刻出牌選擇的場景。也就是說,在做時序任務模型的時候,並不是直接將上一時刻的輸出結果Y(t-1)直接連接起來,而是連接一個模糊抽象的東西(記憶模塊)。

這個記憶模塊不就是神經網絡中的隱層層節點信息嘛,也就是說,每一次出牌選擇時,參考的是各個時刻的記憶模塊。我們可以將這個出牌意識選擇模型抽象爲下面這樣的:

在這裏插入圖片描述
上面加入隱藏層的循環神經網絡模型就是經典的 RNN 神經網絡模型,即“Standard RNN” (由此逐漸引出LSTM)。

根據以上德州撲克的案例,結合Simple RNN的缺陷,我們逐步開始設計一種可以解決梯度消失問題從而可以記住長距離依賴關係的神經網絡結構。

(1) 信息傳輸的問題
首先需要解決問題是如何防止讓梯度隨着時間增加發生梯度消失或者梯度爆炸的現象?---- 最簡單的思路,即讓梯度恆等於1,也就是說無論時間怎麼變化,前後記憶中的內容是一樣的,記憶信息因此可以沒有任何損耗一直可以傳輸下去,網絡前端與網絡末端的遠距離依賴關係也可以學到。我們把需要設計的記憶單元記爲c,根據這個思路,記憶單元的數學表達即爲:c(t)=c(t1)c(t)=c(t-1)。OK,梯度消失的問題,通過這個思路可以解決了。

(2) 信息裝載問題----如何將新的信息輸入記憶單元C中
根據simple RNN中對新信息的定義:當前時刻的外部輸入x(t)與前一時刻的網絡輸出(即反饋單元)y(t-1)聯合得到網絡在當前這一時的新信息,記爲C^(t)\hat{C}(t),表達如下:

c^(t)=f(Wx(t1)+Vy(t1))\hat{c}(t)=f(W \cdot x(t-1)+V * \cdot y(t-1))

那如何將當前時刻的新信息加入到記憶單元c中呢?就好比在德州撲克例子中,假設當前時刻 t 已經出牌了,那麼如何將這個出牌信息加入到我們的記憶模塊,以便後續出牌再次進行參考呢?
可能想到的方法有以下兩種:

  1. 乘進去:將當前時刻得到的新信息C^(t)\hat{C}(t)與前一時刻記憶單元中的結果c(t)c(t)相乘,即:c(t)=c(t1)c^(t)c(t)=c(t-1) * \hat{c}(t)
  2. 加進去:將當前時刻得到的新信息C^(t)\hat{C}(t)與前一時刻記憶單元中的結果c(t)c(t)相加,即:c(t)=c(t1)+c^(t)c(t)=c(t-1) + \hat{c}(t)

實際上,循環神經網絡採用的是加法運算邏輯。如果是做乘法,那麼梯度爆炸和梯度消失的問題將會更加明顯(可以參考相關資料裏的數學證明)。加法更適合做信息疊加,乘法更適合做控制和scaling。可以再聯想到腦結構記憶容量,本身就是各個時刻的記憶累加。如果是乘法的話,那麼我們大腦要麼變成過目不忘,要麼就變成失憶了。但有人會繼續追問,按照這樣理解,如果換成加法的話,每個時刻大腦都在裝載新的信息,隨着時間推移,我們記憶容量也會越來越多,不也變成過目不忘嗎?先記住這個待解決的問題,下面介紹的門控制邏輯會針對此問題作出設計

(3) 輸入門控制邏輯----降低梯度消失的可能性
在信息傳輸和信息裝載同時存在的情況下,我們如何進一步讓梯度消失的可能性降低呢?
仔細想想,大腦記憶結構並不是每時每刻都在添加新的信息,因爲現實生活中只有很少的時刻,我們是可以長期記憶的,大部分記憶,可能沒幾天我們都忘記了。因此在(2)信息裝載問題中,c(t)=c(t1)+c^(t)c(t)=c(t-1) + \hat{c}(t),這個數學模型視圖要記住每個時刻的信息顯然是不合理的,我們只需要記住該記住的信息。
上面說到,乘法更適合做控制和scaling,對新信息選擇要不要記憶是一個控制邏輯 ,所以應該用乘法規則。即在前面加一個乘法控制閥門:c(t)=c(t1)+ginc^(t)c(t)=c(t-1)+g_{i n} * \hat{c}(t)ging_{i n}就是輸入門,取值範圍爲0~1,表示需要是否需要增加新信息,很容易想到用sigmoid函數作爲輸入門的激活函數,因爲sigmoid的輸出範圍是0到1之間。

上面是對一個長時記憶單元的控制。而大腦有很多歌記憶神經元,我們需要設置更多的記憶單元的,每個長時記憶單元都有它專屬的輸入門,在數學上我們不妨使用來表示這個按位相乘的操作,用大寫字母\otimes來表示長時記憶單元集合。即:C(t)=C(t1)+ginC^(t)C(t)=C(t-1)+g_{i n} \otimes \hat{C}(t),正如我們只需要記住該記住的時刻新信息,因此大部分輸入門只會在必要的時刻爲開啓狀態,也就是說大部分時刻下,C(t)=C(t1)C(t)=C(t-1),這樣加法操作帶來的梯度爆炸或梯度消失的可能性更低了。

(4)遺忘門控制邏----降低記憶單元c的飽和度
前面我們說到,我們只需要記住該記住的時刻信息就好了,但這裏有一個問題:如果在某個時刻,該網絡結構在輸入一些信息量很大的數據時,導致輸入門始終處於開啓狀態,視圖記住所有的這些信息,會導致什麼結果?(也就是(2)中我們保留的一個問題

肯定會導致腦容量達到峯值,也就是記憶單元c的值會非常大。而在網絡輸出的時候,我們是需要把c激活的,當c變得非常大時,sigmoid、tanh這些常見的激活函數的輸出就趨於完全飽和。也就是說,我們的腦容量達到峯值,快記不住這麼多的信息了。

想象我們的腦結構,我們之所以記不住太多的信息,覺得大腦容量有限,原因就是因爲容易忘記一些其他的事,因此可以設計以個遺忘門,當新信息要輸入的時候,先通過遺忘門來忘記一些記憶,從而再考慮要不要接受該時刻的新信息。

顯然, 遺忘門來控制好記憶消失程度的,也需要用乘法運算,到目前,我們設計的網絡變成:c(t)=gforget c(t1)+gin c^(t)c(t)=g_{\text {forget }} c(t-1)+g_{\text {in }} * \hat{c}(t),或者向量形式:C(t)=gforget C(t1)+ginC^(t)C(t)=g_{\text {forget }} C(t-1)+g_{\text {in}} \otimes \hat{C}(t)

至此,我們已經解決了如何避免梯度消失的問題,也考慮到如何將新信息加入到記憶單元,並且還考慮到新信息輸入太過豐富而可能導致輸入門始終開啓的狀況。只剩最後一步:考慮記憶單元的輸出問題了

(5)輸出門控制邏輯----輸出跟當前任務有關時刻相關記憶單元
前面的Simple RNN 提到,輸出步驟就是激活當前記憶單元的內容:y(t)=f(c(t))y(t)=f(c(t))

想一想,現實生活中,我們在處理目前的事情時,需要將我們腦容量中的所有記憶單元中的內容都要輸出一遍嗎?肯定不是,我們只需要跟目前處理的事情任務相關的記憶單元輸出結果就行。類似於遺忘門設計的思想,我們也應該給記憶單元添加一個閥門:y(t)=goutf(c(t))y(t)=g_{o u t} * f(c(t))

(6)輸入門、遺忘門、輸出門的控制
在最後,我們只需要定義輸入門、遺忘門、輸出門受誰的控制。
按照Simple RNN的思想:是否可以讓各個門受當前時刻的外部輸入x(t)和上一時刻的輸出y(t-1)的綜合影響影響就行了?

想一想,爲了解決Simple RNN存在的問題,在設計這個新的網絡時,引入了3個門控制邏輯,特別是輸出門,如果按照Simple RNN的控制邏輯,當輸出門一旦關閉,就好導致後面時序中的記憶全部被截斷,下一時刻的各個門的輸入僅僅受當前外部輸入x(t)x(t)了。

我們可以將長時記憶單元接入各個門:把上一時刻的長時記憶c(t1)c(t-1)接入遺忘門和輸入門,把當前時刻的長時記憶x(t)x(t)接入輸出門(當信息流動到輸出門的時候,當前時刻的長時記憶已經被計算完成了)

計算公式如下:
gin(t)=sigm(Wx(t)+Vy(t1)+Uc(t1))g_{i n}(t)=\operatorname{sigm}(W \cdot x(t)+V \cdot y(t-1)+U \cdot c(t-1))
gforget (t)=sigm(Wx(t)+Vy(t1)+Uc(t1))g_{\text {forget }}(t)=\operatorname{sigm}(W \cdot x(t)+V \cdot y(t-1)+U \cdot c(t-1))
gout(t)=sigm(Wx(t)+Vy(t1)+Uc(t))g_{\text {out}}(t)=\operatorname{sigm}(W \cdot x(t)+V \cdot y(t-1)+U \cdot c(t))

到目前,我們的網絡結構計算總結如下:
C(t)=gforget C(t1)+ginC^(t)C(t)=g_{\text {forget }} C(t-1)+g_{\text {in}} \otimes \hat{C}(t)
C^(t)=f(Wx(t)+Vy(t1))\hat{C}(t)=f(W \cdot x(t)+V \cdot y(t-1))
y(t)=goutf(C(t))y(t)=g_{\text {out}} \otimes f(C(t))
gin(t)=sigm(Wx(t)+Vy(t1)+UC(t1))g_{i n}(t)=\operatorname{sigm}(W \cdot x(t)+V \cdot y(t-1)+U \cdot C(t-1))
gforget(t)=sigm(Wx(t)+Vy(t1)+UC(t1))g_{\text {forget}}(t)=\operatorname{sigm}(W \cdot x(t)+V \cdot y(t-1)+U \cdot C(t-1))
gout(t)=sigm(Wx(t)+Vy(t1)+UC(t))g_{o u t}(t)=\operatorname{sigm}(W \cdot x(t)+V \cdot y(t-1)+U \cdot C(t))

其中W、V、U 分別表示輸入門輸出門遺忘門的權重矩陣,上面公式看着一大堆,其實就是三個門的控制邏輯運算和輸入、輸出計算。


在simple RNN 的基礎上,我們加入了隱藏層,由此過渡到standard RNN,模仿standard RNN的做法,用隱層單元h來替換結果輸出y。

C(t)=gforgetC(t1)+ginC^(t)C(t)=g_{\text {forget}} C(t-1)+g_{\text {in}} \otimes \hat{C}(t)
C^(t)=f(Wx(t)+Vh(t1))\hat{C}(t)=f(W \cdot x(t)+V \cdot h(t-1))
y(t)=goutf(C(t))y(t)=g_{o u t} \otimes f(C(t))
gin(t)=sigm(Wx(t)+Vh(t1)+UC(t1))g_{i n}(t)=\operatorname{sigm}(W \cdot x(t)+V \cdot h(t-1)+U \cdot C(t-1))
gforget(t)=sigm(Wx(t)+Vh(t1)+UC(t1))g_{f o r g e t}(t)=\operatorname{sigm}(W \cdot x(t)+V \cdot h(t-1)+U \cdot C(t-1))
gout(t)=sigm(Wx(t)+Vh(t1)+UC(t))g_{o u t}(t)=\operatorname{sigm}(W \cdot x(t)+V \cdot h(t-1)+U \cdot C(t))


2.4 各個門的激活函數

關於激活函數的選取,LSTM中,遺忘門、輸入門和輸出門使用Sigmoid函數作爲激活函數,在生成候選記憶時,使用Tanh雙曲正切函數作爲激活函數。這兩個激活函數都是飽和的,即在輸入達到一定值得情況下,輸出不會發生變化。因爲如果使用非飽和激活函數,,比如ReLu函數,那麼將難以實現門控的效果。

Sigmoid函數輸出值在0 ~ 1之間,符合門控的物理意義,且當輸入較大或者較小時,其輸出會非常接近1或0,從而保證開和關的邏輯設計。在產生候選記憶時,使用Tanh函數,是因爲輸出在-1 ~ 1之間,這與大多數場精下特質分佈式0中心的吻合。此外Tanh函數在輸入爲0附近比Sigmoid函數具有更大的梯度,通常使模型收斂更快。


2.5 下圖就是LSTM詳細網絡結構圖

在這裏插入圖片描述
短時記憶單元:
由於h隨時都可以被輸出門截斷,所以我們可以很感性的把h理解爲短時記憶單元。

長時記憶單元:
由於梯度只從c走的時候,存在一條沒有連續相乘的路徑,可以避免梯度消失。又有遺忘門避免激活函數和梯度飽和,因此c爲長時記憶單元

全文總結:

  1. 爲了解決RNN中的梯度消失的問題,爲了讓梯度無損傳播,想到了c(t)=c(t-1)這個樸素梯度傳播模型,所以將c稱爲“長時記憶單元”。
  2. 然後爲了把新信息平穩安全可靠的裝入長時記憶單元,我們引入了“輸入門”。
  3. 然後爲了解決新信息裝載次數過多帶來的激活函數飽和的問題,引入了“遺忘門”。
  4. 然後爲了讓網絡能夠選擇合適的記憶進行輸出,我們引入了“輸出門”。
  5. 然後爲了解決記憶被輸出門截斷後使得各個門單元受控性降低的問題,引入了“peephole”連接。
  6. 然後爲了將神經網絡的簡單反饋結構升級成模糊歷史記憶的結構,引入了隱單元h,並且發現h中存儲的模糊歷史記憶是短時的,於是記h爲短時記憶單元。
  7. 於是該網絡既具備長時記憶,又具備短時記憶,起名叫“長短時記憶神經網絡(Long Short Term Memory Neural Networks,簡稱LSTM)“。

2.6 相關引申問題

LSTM爲什麼在梯度消失上處理的更好?

繼續以李宏毅老師的課件爲例:
在這裏插入圖片描述
每個時間段t,RNN讀入一個變量xt,xtx_{t}, x_{t}和上一個階段產生的隱含層的信息ht1h_{t-1}一起被寫入計算模塊f()f(\cdot)裏面,產生新的隱含層信息hth_{t},新的隱含層信息一方面繼續傳播更新,另一方面產生該時刻的輸出yty_{t}。隱含層信息hth_{t}和所有戒指時間t的歷史輸入都有關係,並依賴RNN的信息路徑一直傳播下去。

RNN的細節表示,用公式表示x,h,y的關係有:
在這裏插入圖片描述
不考慮偏置的情況下,WhW^{h}是舊的隱含層信息對新的隱含層信息的影響,WiW^{i}是輸入信息新的隱含層信息的影響,WhW^{h}WiW^{i},WoW^{o}都是要學習的參數。

定義損失函數,採用梯度下降求解參數:
L=t=0TLtL=\sum_{t=0}^{T} L_{t}

損失函數考慮了所有時間t的誤差,利用BPTT反向傳播求解參數模型,對上述兩公式求梯度:

LW=t=0TLtW\frac{\partial L}{\partial W}=\sum_{t=0}^{T} \frac{\partial L_{t}}{\partial W}

LtL_{t}分別對Wh,Wi,WoW^{h}, W^{i}, W^{o}進行求導:

LtWo=t=0TLtytytWo\frac{\partial L_{t}}{\partial W^{o}}=\sum_{t=0}^{T} \frac{\partial L_{t}}{\partial y_{t}} \frac{\partial y_{t}}{\partial W^{o}} (1)
LtWi=t=0Tk=0tLtytytht(j=k+1thjhj1)hkWi\frac{\partial L_{t}}{\partial W^{i}}=\sum_{t=0}^{T} \sum_{k=0}^{t} \frac{\partial L_{t}}{\partial y_{t}} \frac{\partial y_{t}}{\partial h_{t}}\left(\prod_{j=k+1}^{t} \frac{\partial h_{j}}{\partial h_{j-1}}\right) \frac{\partial h_{k}}{\partial W^{i}} (2)
LtWh=t=0Tk=0tLtytytht(j=k+1thjhj1)hkWh\frac{\partial L_{t}}{\partial W^{h}}=\sum_{t=0}^{T} \sum_{k=0}^{t} \frac{\partial L_{t}}{\partial y_{t}} \frac{\partial y_{t}}{\partial h_{t}}\left(\prod_{j=k+1}^{t} \frac{\partial h_{j}}{\partial h_{j-1}}\right) \frac{\partial h_{k}}{\partial W^{h}} (3)

梯度消失主要就是針對上面(2)和(3)兩個式子,可以看到,上面公式裏面有依賴於時間 t 的連乘符號,在修正某個位置 t 的誤差時,計算出的梯度需要考慮 t 之前的所有時間 k 的隱含層信息對時間 t 的隱含層信息的影響。當 k 和 t 越遠時,這個影響被迭代的次數就越多,對應着隱含層之間的連乘次數就越多。於是產生梯度消失,實際上梯度爆炸也是這個原因導致的!

進一步,上述連乘步驟是如何發生作用的?

首先,根據RNN的定義,把隱含層之間的函數關係表示出來,具體有:
ht=σ(Wixt+Whht1)h_{t}=\sigma\left(W^{i} x_{t}+W^{h} h_{t-1}\right)

其中, σ\sigma 表示Sigmoid激活函數,於是有:

hjhj1=σWh\frac{\partial h_{j}}{\partial h_{j-1}}=\sigma^{\prime} W^{h}

根據Sigmoid的特性,存在關係:σ=σ(1σ)σ(0,1)\sigma^{\prime}=\sigma(1-\sigma) \quad \sigma \in(0,1)

顯而易見, σ\sigma^{\prime}存在上界,爲14\frac{1}{4} ,那麼:
(1)WhW^{h} > 4時,σWh\sigma^{\prime} W^{h} 一直大於1,因此無論參數如何取值,當 j,k 距離很大時,連乘項都會趨向於無窮,在這種情況下就會導致梯度爆炸;
(2)WhW^{h} < 1時,σWh\sigma^{\prime} W^{h}一直小於1,因此無論參數如何取值,當 [公式] 距離很大時,連乘項都會趨於0,在這種情況下就會導致梯度消失。

LSTM神經網絡輸入輸出究竟是怎樣的?

在這裏插入圖片描述

2.7參考資料

  1. 書籍:《深度學習》、《白麪機器學習》
  2. 公衆號文章:《深度解析LSTM神經網絡的設計原理》
  3. 知乎《LSTM神經網絡輸入輸出》、《爲什麼相比於RNN,LSTM在梯度消失上表現更好》
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章