《神經(jīng)網(wǎng)絡(luò)與機(jī)器學(xué)習(xí)》筆記(四)

第六章 循環(huán)神經(jīng)網(wǎng)絡(luò)

循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network欺抗,RNN)是一類具有短期記憶能力的神經(jīng)網(wǎng)絡(luò)如绸。循環(huán)神經(jīng)網(wǎng)絡(luò)的參數(shù)學(xué)習(xí)可以通過隨時間反向傳播算法來學(xué)習(xí)。隨時間反向傳播算法即按照時間的逆序?qū)㈠e誤信息一步步地往前傳遞余佃。當(dāng)輸入序列比較長時扇单,會存在梯度爆炸和消失問題,也稱為長程依賴問題誉碴。為了解決這個問題,人們對循環(huán)神經(jīng)網(wǎng)絡(luò)進(jìn)行了很多的改進(jìn)漱挚,其中最有效的改進(jìn)方式引入門控機(jī)制翔烁。

循環(huán)神經(jīng)網(wǎng)絡(luò)可以很容易地擴(kuò)展到兩種更廣義的記憶網(wǎng)絡(luò)模型:遞歸神經(jīng)網(wǎng)絡(luò)和圖網(wǎng)絡(luò)渺氧。

給網(wǎng)絡(luò)增加記憶能力

延時神經(jīng)網(wǎng)絡(luò)

一種簡單的利用歷史信息的方法是建立一個額外的延時單元旨涝,用來存儲網(wǎng)絡(luò)的歷史信息(可以包括輸入侣背、輸出、隱狀態(tài)等)弧腥。比較有代表性的模型是延時神經(jīng)網(wǎng)絡(luò)

延時神經(jīng)網(wǎng)絡(luò)在時間維度上共享權(quán)值,以降低參數(shù)數(shù)量管搪。因此對于序列輸入來講铡买,延時神經(jīng)網(wǎng)絡(luò)就相當(dāng)于卷積神經(jīng)網(wǎng)絡(luò)更鲁。

實(shí)現(xiàn)方式:延時神經(jīng)網(wǎng)絡(luò)是在前饋網(wǎng)絡(luò)中的非輸出層都添加一個延時器奇钞,記錄最近幾次神經(jīng)元的輸出。在第t 個時刻媒至,第l + 1 層神經(jīng)元和第l 層神經(jīng)元的最近p 次輸出相關(guān)拒啰,即:\boldsymbol{h}_{t}^{(l+1)}=f\left(\boldsymbol{h}_{t}^{(l)}, \boldsymbol{h}_{t-1}^{(l)}, \cdots, \boldsymbol{h}_{t-p}^{(l)}\right)谋旦,通過延時器蛤织,前饋網(wǎng)絡(luò)就具有了短期記憶的能力指蚜。

有外部輸入的非線性自回歸模型

自回歸模型(AutoRegressive Model摊鸡,AR)是統(tǒng)計學(xué)上常用的一類時間序列模型免猾,用一個變量y_t的歷史信息來預(yù)測自己猎提。

\begin{align*}&\boldsymbol{y}_{t}=w_{0}+\sum_{i=1}^{p} w_{i} \boldsymbol{y}_{t-i}+\epsilon_{t}\end{align*}
其中p 為超參數(shù)锨苏,w_0,\cdots ,w_p為可學(xué)習(xí)參數(shù)伞租,\epsilon_{t} \sim \mathcal{N}\left(0, \sigma^{2}\right)為第t 個時刻的噪聲葵诈,方差\sigma^{2}和時間無關(guān)理疙。

有外部輸入的非線性自回歸模型(NARX)是自回歸模型的擴(kuò)展沪斟,在每個時刻t 都有一個外部輸入xt主之,產(chǎn)生一個輸出yt槽奕。NARX通過一個延時器記錄最近幾次的外部輸入和輸出粤攒,第t 個時刻的輸出yt 為:

\begin{align*} \boldsymbol{y}_{t}=f\left(\boldsymbol{x}_{t}, \boldsymbol{x}_{t-1}, \cdots, \boldsymbol{x}_{t-p}, \boldsymbol{y}_{t-1}, \boldsymbol{y}_{t-2}, \cdots, \boldsymbol{y}_{t-q}\right) \end{align*}
其中f(·) 表示非線性函數(shù)夯接,可以是一個前饋網(wǎng)絡(luò)晴弃,p 和q 為超參數(shù)逊拍。

循環(huán)神經(jīng)網(wǎng)絡(luò)

循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network芯丧,RNN)通過使用帶自反饋的神經(jīng)元缨恒,能夠處理任意長度的時序數(shù)據(jù)肿轨。

給定一個輸入序列x_{1:T}=(x_1,x_2,\dots,x_t,\dots,x_T)椒袍,循環(huán)神經(jīng)網(wǎng)絡(luò)通過公式h_t=f(h_{t-1},x_t)更新帶反饋邊的隱藏層的活性值ht驹暑。其中h0 = 0,f(·) 為一個非線性函數(shù)帆焕,也可以是一個前饋網(wǎng)絡(luò)叶雹。

理論上折晦,循環(huán)神經(jīng)網(wǎng)絡(luò)可以近似任意的非線性動力系統(tǒng)满着。

簡單循環(huán)網(wǎng)絡(luò)

簡單循環(huán)網(wǎng)絡(luò)(Simple Recurrent Network风喇,SRN) 是一個非常簡單的循環(huán)神經(jīng)網(wǎng)絡(luò)透且,只有一個隱藏層的神經(jīng)網(wǎng)絡(luò)秽誊。

按時間展開的循環(huán)神經(jīng)網(wǎng)絡(luò)

? h_t=f(Uh_{t-1}+Wx_t+b)

循環(huán)神經(jīng)網(wǎng)絡(luò)的計算能力

由于循環(huán)神經(jīng)網(wǎng)絡(luò)具有短期記憶能力锅论,相當(dāng)于存儲裝置,因此其計算能力十分強(qiáng)大藻懒。前饋神經(jīng)網(wǎng)絡(luò)可以模擬任何連續(xù)函數(shù)嬉荆,而循環(huán)神經(jīng)網(wǎng)絡(luò)可以模擬任何程序鄙早。

我們先定義一個完全連接的循環(huán)神經(jīng)網(wǎng)絡(luò)限番,其輸入為xt,輸出為yt霜瘪,

? h_t=f(Uh_{t-1}+Wx_t+b)粥庄,y_t=Vh_t

循環(huán)神經(jīng)網(wǎng)絡(luò)的通用近似定理

一個完全連接的循環(huán)網(wǎng)絡(luò)是任何非線性動力系統(tǒng)的近似器惜互。

圖靈完備

是指一種數(shù)據(jù)操作規(guī)則训堆,比如一種計算機(jī)編程語言膘流,可以實(shí)現(xiàn)圖靈機(jī)(Turing Machine)的所有功能呼股,解決所有的可計算問題彭谁,目前主流的編程語言(比如C++缠局、Java、Python 等)都是圖靈完備的唱矛。

一個完全連接的循環(huán)神經(jīng)網(wǎng)絡(luò)可以近似解決所有的可計算問題揖赴。

應(yīng)用到機(jī)器學(xué)習(xí)

序列到類別模式

序列到類別模式主要用于序列數(shù)據(jù)的分類問題:輸入為序列,輸出為類別阿逃。比如在文本分類中,輸入數(shù)據(jù)為單詞的序列破托,輸出為該文本的類別土砂。

同步的序列到序列模式

主要用于序列標(biāo)注(Sequence Labeling)任務(wù)萝映,即每一時刻都有輸入和輸出蚌卤,輸入序列和輸出序列的長度相同逊彭。比如詞性標(biāo)注(Partof-Speech Tagging)中诫龙,每一個單詞都需要標(biāo)注其對應(yīng)的詞性標(biāo)簽。

異步的序列到序列模式

也稱為編碼器-解碼器(Encoder-Decoder)模型锦聊,即輸入序列和輸出序列不需要有嚴(yán)格的對應(yīng)關(guān)系孔庭,也不需要保持相同的長度。比如在機(jī)器翻譯中芽淡,輸入為源語言的單詞序列挣菲,輸出為目標(biāo)語言的單詞序列。

參數(shù)學(xué)習(xí)

可以通過梯度下降方法來進(jìn)行學(xué)習(xí)或杠。

以隨機(jī)梯度下降為例向抢,給定一個訓(xùn)練樣本(x, y)笋额,其中x_{1:T}=(x_1,x_2,\dots,x_t,\dots,x_T)為長度是T 的輸入序列茉盏,y_{1:T}=(y_1,y_2,\dots,y_t,\dots,y_T)是長度為T 的標(biāo)簽序列鸠姨。即在每個時刻t,都有一個監(jiān)督信息yt巍糯,我們定義時刻t 的損失函數(shù)為:\mathcal{L}_{t}=\mathcal{L}\left(y_{t}, g\left(h_{t}\right)\right),其中g(shù)(ht) 為第t 時刻的輸出宅楞,\mathcal{L}為可微分的損失函數(shù)厌衙,比如交叉熵。那么整個序
列的損失函數(shù)為:\mathcal{L}=\sum_{t=1}^{T} \mathcal{L}_{t}饲趋,整個序列的損失函數(shù)\mathcal{L}關(guān)于參數(shù)U 的梯度為:\frac{\partial \mathcal{L}}{\partial U}=\sum_{t=1}^{T} \frac{\partial \mathcal{L}_{t}}{\partial U}堂污,即每個時刻損失\mathcal{L}_{t}對參數(shù)U 的偏導(dǎo)數(shù)之和盟猖。

在循環(huán)神經(jīng)網(wǎng)絡(luò)中主要有兩種計算梯度的方式:隨時間反向傳播(BPTT)算法和實(shí)時循環(huán)學(xué)習(xí)(RTRL)算法反镇。

隨時間反向傳播算法

BPTT算法的主要思想是通過類似前饋神經(jīng)網(wǎng)絡(luò)的錯誤反向傳播算法來計算梯度夕玩。

BPTT 算法將循環(huán)神經(jīng)網(wǎng)絡(luò)看作是一個展開的多層前饋網(wǎng)絡(luò)燎孟,其中“每一層”對應(yīng)循環(huán)網(wǎng)絡(luò)中的“每個時刻”揩页。這樣,循環(huán)神經(jīng)網(wǎng)絡(luò)就可以按照前饋網(wǎng)絡(luò)中的反向傳播算法計算參數(shù)梯度兔仰。在“展開”的前饋網(wǎng)絡(luò)中,所有層的參數(shù)是共享的无虚,因此參數(shù)的真實(shí)梯度是所有“展開層”的參數(shù)梯度之和友题。

計算第t 時刻損失對參數(shù)U 的偏導(dǎo)數(shù)\frac{\partial \mathcal{L}_t}{\partial U}

誤差項(xiàng)隨時間反向傳播算法示例


所以整個序列的損失函數(shù)關(guān)于參數(shù)U的梯度是:

同理可得告匠,整個序列的損失函數(shù)關(guān)于權(quán)重W 和偏置b 的梯度為:\frac{\partial \mathcal{L}}{\partial W}=\sum^T_{t=1}\sum_{k=1}^{t} \delta_{t, k} x_{k}^T\frac{\partial \mathcal{L}}{\partial U}=\sum^T_{t=1}\sum_{k=1}^{t} \delta_{t, k}

實(shí)時循環(huán)學(xué)習(xí)算法

與反向傳播的BPTT算法不同的是划鸽,實(shí)時循環(huán)學(xué)習(xí)(Real-Time Recurrent Learning裸诽,RTRL)是通過前向傳播的方式來計算梯度嘱函。

假設(shè)循環(huán)神經(jīng)網(wǎng)絡(luò)中第t + 1時刻的狀態(tài)ht+1為:h_{t+1}=f\left(z_{t+1}\right)=f\left(U h_{t}+W x_{t+1}+b\right)

其關(guān)于參數(shù)u_{ij}的偏導(dǎo)數(shù)為:
\begin{align} \frac{\partial h_{t+1}}{\partial u_{i j}} &=\left(\frac{\partial^{+} z_{t+1}}{\partial u_{i j}}+\frac{\partial h_{t}}{\partial u_{i j}} U^{\mathrm{T}}\right) \frac{\partial h_{t+1}}{\partial z_{t+1}} \\ &=\left(\mathbb{I}_{i}\left(\left[\boldsymbol{h}_{t}\right]_{j}\right)+\frac{\partial \boldsymbol{h}_{t}}{\partial u_{i j}} U^{\mathrm{T}}\right) \operatorname{diag}\left(f^{\prime}\left(z_{t+1}\right)\right) \\ &=\left(\mathbb{I}_{i}\left(\left[\boldsymbol{h}_{t}\right]_{j}\right)+\frac{\partial \boldsymbol{h}_{t}}{\partial u_{i j}} U^{\mathrm{T}}\right) \odot\left(f^{\prime}\left(z_{t+1}\right)\right)^{\mathrm{T}} \end{align}
兩種算法比較:RTRL算法和BPTT算法都是基于梯度下降的算法粒梦,分別通過前向模式和反向模式應(yīng)用鏈?zhǔn)椒▌t來計算梯度缴淋。在循環(huán)神經(jīng)網(wǎng)絡(luò)中重抖,一般網(wǎng)絡(luò)輸出維度遠(yuǎn)低于輸入維度,因此BPTT算法的計算量會更小恨统,但是BPTT算法需要保存所有時刻的中間梯度畜埋,空間復(fù)雜度較高。RTRL算法不需要梯度回傳咖祭,因此非常適合用于需要在線學(xué)習(xí)或無限序列的任務(wù)中。

長程依賴問題

循環(huán)神經(jīng)網(wǎng)絡(luò)在學(xué)習(xí)過程中的主要問題是由于梯度消失或爆炸問題硬鞍,很難建模長時間間隔(Long Range)的狀態(tài)之間的依賴關(guān)系。

在BPTT算法中伐坏,將公式\delta_{t, k}=\operatorname{diag}\left(f^{\prime}\left(z_{k}\right)\right) U^{\mathrm{T}} \delta_{t, k+1}展開得到\delta_{t, k}=\prod_{\tau=k}^{t-1}\left(\operatorname{diag}\left(f^{\prime}\left(z_{\tau}\right)\right) U^{\mathrm{T}}\right) \delta_{t, t}

如果定義\gamma \cong\left\|\operatorname{diag}\left(f^{\prime}\left(z_{\tau}\right)\right) U^{\mathrm{T}}\right\|,則\delta_{t, k} \cong \gamma^{t-k} \delta_{t, t}

若γ > 1,當(dāng)t ? k → ∞時埠褪,γt?k → ∞。當(dāng)間隔t ? k 比較大時渴语,梯度也變得很大,會造成系統(tǒng)不穩(wěn)定昆咽,稱為梯度爆炸問題驾凶。

相反,若γ < 1掷酗,當(dāng)t ? k → ∞時调违,γt?k → 0汇在。當(dāng)間隔t ? k 比較大時翰萨,梯度也變得非常小,會出現(xiàn)和深層前饋神經(jīng)網(wǎng)絡(luò)類似的梯度消失問題糕殉,這就是長程依賴問題

由于循環(huán)神經(jīng)網(wǎng)絡(luò)經(jīng)常使用非線性激活函數(shù)為Logistic函數(shù)或Tanh函數(shù)作為非線性激活函數(shù)亩鬼,其導(dǎo)數(shù)值都小于1,并且權(quán)重矩陣∥U∥ 也不會太大阿蝶,因此如果時間間隔t ? k 過大雳锋,δt,k 會趨向于0,因而經(jīng)常會出現(xiàn)梯度消失問題羡洁。

改進(jìn)方案

為了避免梯度爆炸或消失問題玷过,一種最直接的方式就是選取合適的參數(shù),同時使用非飽和的激活函數(shù),盡量使得\operatorname{diag}\left(f^{\prime}\left(z_{k}\right)\right) U^{\mathrm{T}} ≈ 1辛蚊,這種方式需要足夠的人工調(diào)參經(jīng)驗(yàn)粤蝎,限制了模型的廣泛應(yīng)用。比較有效的方式是通過改進(jìn)模型或優(yōu)化方法來緩解循環(huán)網(wǎng)絡(luò)的梯度爆炸和梯度消失問題袋马。

梯度爆炸一般而言初澎,循環(huán)網(wǎng)絡(luò)的梯度爆炸問題比較容易解決,一般通過權(quán)重衰減或梯度截斷(是一種啟發(fā)式的解
決梯度爆炸問題的有效方法)來避免虑凛。

梯度消失是循環(huán)網(wǎng)絡(luò)的主要問題碑宴。除了使用一些優(yōu)化技巧外,更有效的方式就是改變模型桑谍,比如讓U=I延柠,同時令為\frac{\partial h_t}{\partial h_{t-1}}=I單位矩陣,即:h_t=h_{t-1}+g(x_t;\theta)锣披,其中g(\cdot)是一個非線性函數(shù)贞间,θ為參數(shù)。

可以看出h_t和h_{t-1}是線性依賴關(guān)系盈罐,且權(quán)重系數(shù)為1榜跌,這樣就不存在梯度爆炸或消失問題。但是盅粪,這種改變也丟失了神經(jīng)元在反饋邊上的非線性激活的性質(zhì)钓葫,因此也降低了模型的表示能力。

為了避免這個缺點(diǎn)票顾,我們可以采用一種更加有效的改進(jìn)策略:h_t=h_{t-1}+g(x_t,h_{t-1};\theta)

這樣h_t和h_{t-1}之間既有線性關(guān)系础浮,也有非線性關(guān)系,并且可以緩解梯度消失問題奠骄。但這種改進(jìn)依然存在兩個問題:

  1. 梯度爆炸問題豆同,因?yàn)槠渲写嬖诜蔷€性關(guān)系
  2. 記憶容量問題,:隨著ht不斷累積存儲新的輸入信息含鳞,會發(fā)生飽和現(xiàn)象影锈。假設(shè)g(·) 為Logistic 函數(shù),則隨著時間t 的增長蝉绷,ht 會變得越來越大鸭廷,從而導(dǎo)致h變得飽和。也就是說熔吗,隱狀態(tài)ht 可以存儲的信息是有限的辆床,隨著記憶單元存儲的內(nèi)容越來越多,其丟失的信息也越來越多桅狠。

基于門控的循環(huán)神經(jīng)網(wǎng)絡(luò)

為了改善循環(huán)神經(jīng)網(wǎng)絡(luò)的長程依賴問題讼载,一種非常好的解決方案是在上一個改進(jìn)方案的的基礎(chǔ)上引入門控機(jī)制來控制信息的累積速度轿秧,包括有選擇地加入新的信息,并有選擇地遺忘之前累積的信息咨堤。這一類網(wǎng)絡(luò)可以稱為基于門控的循環(huán)神經(jīng)網(wǎng)絡(luò)(Gated RNN)菇篡。本節(jié)中,主要介紹兩種基于門控的循環(huán)神經(jīng)網(wǎng)絡(luò):長短期記憶網(wǎng)絡(luò)和門控循環(huán)單元網(wǎng)絡(luò)吱型。

長短期記憶網(wǎng)絡(luò)(LSTM)

是循環(huán)神經(jīng)網(wǎng)絡(luò)的一個變體逸贾,可以有效地解決簡單循環(huán)神經(jīng)網(wǎng)絡(luò)的梯度爆炸或消失問題。

LSTM網(wǎng)絡(luò)的循環(huán)單元結(jié)構(gòu)

LSTM的改進(jìn)點(diǎn)在兩個方面:

  1. LSTM網(wǎng)絡(luò)引入了一個新的內(nèi)部狀態(tài)ct專門進(jìn)行線性的循環(huán)信息傳遞津滞,同時(非線性地)輸出信息給隱藏層的外部狀態(tài)ht
    \begin{array}{l}{c_{t}=f_{t} \odot c_{t-1}+i_{t} \odot \tilde{c}_{t}} \\ {h_{t}=o_{t} \odot \tanh \left(c_{t}\right)}\end{array}\\ 其中f_{t}灼伤、i_t 和o_t 為三個門(gate)來控制信息傳遞的路徑触徐;\odot 為向量元素乘積; c_{t?1} 為上一時刻的記憶單元狐赡;\\ \tilde c_t 是通過非線性函數(shù)得到的候選狀態(tài)撞鹉,內(nèi)部狀態(tài)c_t 記錄了到當(dāng)前時刻為止的歷史信息。

  2. 門控機(jī)制:LSTM網(wǎng)絡(luò)中的三個“門”是一種“軟”門颖侄,取值在(0, 1) 之間鸟雏,表示以一定的比例運(yùn)行信息通過。

  • 遺忘門ft 控制上一個時刻的內(nèi)部狀態(tài)ct?1 需要遺忘多少信息览祖。\dot{i}_{t} =\sigma\left(W_{i} \boldsymbol{x}_{t}+U_{i} \boldsymbol{h}_{t-1}+\boldsymbol孝鹊_{i}\right)

  • 輸入門it 控制當(dāng)前時刻的候選狀態(tài)\tilde{c}_t 有多少信息需要保存。\boldsymbol{f}_{t} =\sigma\left(W_{f} \boldsymbol{x}_{t}+U_{f} \boldsymbol{h}_{t-1}+\boldsymbol展蒂_{f}\right)

  • 輸出門ot 控制當(dāng)前時刻的內(nèi)部狀態(tài)ct 有多少信息需要輸出給外部狀態(tài)ht又活。\boldsymbol{o}_{t} =\sigma\left(W_{o} \boldsymbol{x}_{t}+U_{o} \boldsymbol{h}_{t-1}+\boldsymbol_{o}\right)

    其中σ(·) 為Logistic 函數(shù)锰悼,其輸出區(qū)間為(0, 1)

    上述公式可簡潔的描述為:

    \begin{aligned}\left[\begin{array}{c}{\tilde{c}_{t}} \\ {o_{t}} \\ {o_{t}} \\ {i_{t}} \\ {f_{t}}\end{array}\right] &=\left[\begin{array}{c}{\tanh } \\ {\sigma} \\ {\sigma}\end{array}\right]\left(W\left[\begin{array}{c}{x_{t}} \\ {h_{t-1}}\end{array}\right]+b\right) \\ c_{t} &=f_{t} \odot c_{t-1}+i_{t} \odot \tilde{c}_{t} \\ h_{t} &=o_{t} \odot tanh(c_t) \end{aligned}其中x_t \in \mathbb{R}^e 為當(dāng)前時刻的輸入柳骄,W \in \mathbb{R}^{4d\times (d+e)} 和b \in \mathbb{R}^{4d} 為網(wǎng)絡(luò)參數(shù)。

記憶循環(huán)神經(jīng)網(wǎng)絡(luò)中的隱狀態(tài)h存儲了歷史信息箕般,可以看作是一種記憶(Memory)耐薯。在簡單循環(huán)網(wǎng)絡(luò)中,隱狀態(tài)每個時刻都會被重寫丝里,因此可以看作是一種短期記憶(Short-Term Memory)曲初。在神經(jīng)網(wǎng)絡(luò)中,長期記憶(Long-Term Memory)可以看作是網(wǎng)絡(luò)參數(shù)丙者,隱含了從訓(xùn)練數(shù)據(jù)中學(xué)到的經(jīng)驗(yàn)复斥,其更新周期要遠(yuǎn)遠(yuǎn)慢于短期記憶。而在LSTM 網(wǎng)絡(luò)中械媒,記憶單元c 可以在某個時刻捕捉到某個關(guān)鍵信息目锭,并有能力將此關(guān)鍵信息保存一定的時間間隔评汰。記憶單元c 中保存信息的生命周期要長于短期記憶h,但又遠(yuǎn)遠(yuǎn)短于長期記憶痢虹, 長短期記憶是指長的“短期記憶”被去。因此稱為長短期記憶。

LSTM網(wǎng)絡(luò)的各種變體

無遺忘門的LSTM網(wǎng)絡(luò):即最早提出的LSTM網(wǎng)絡(luò)奖唯,其內(nèi)部狀態(tài)的更新為:c_{t} =c_{t-1}+i_{t} \odot \tilde{c}_{t}

沒有遺忘門惨缆,記憶單元c 會不斷增大。當(dāng)輸入序列的長度非常大時丰捷,記憶單元的容量會飽和坯墨,從而大大降低LSTM模型的性能。

peephole 連接:讓三個門不但依賴于輸入xt 和上一時刻的隱狀態(tài)ht?1病往,也依賴于上一個時刻的記憶單元ct?1捣染。
\begin{aligned} \boldsymbol{i}_{t} &=\sigma\left(W_{i} \boldsymbol{x}_{t}+U_{i} \boldsymbol{h}_{t-1}+V_{i} \boldsymbol{c}_{t-1}+\boldsymbol_{i}\right) \\ \boldsymbol{f}_{t} &=\sigma\left(W_{f} \boldsymbol{x}_{t}+U_{f} \boldsymbol{h}_{t-1}+V_{f} \boldsymbol{c}_{t-1}+\boldsymbol停巷_{f})\right.\\ \boldsymbol{o}_{t} &=\sigma\left(W_{o} \boldsymbol{x}_{t}+U_{o} \boldsymbol{h}_{t-1}+V_{o} \boldsymbol{c}_{t}+\boldsymbol耍攘_{o}\right)\\&其中V_i,V_f 和V_o 為對角矩陣畔勤。 \end{aligned}
耦合輸入門和遺忘門:LSTM網(wǎng)絡(luò)中的輸入門和遺忘門有些互補(bǔ)關(guān)系蕾各,因此同時用兩個門比較冗余。為了減少LSTM網(wǎng)絡(luò)的計算復(fù)雜度庆揪,將這兩門合并為一個門式曲。令f_t=1-i_t

這樣,內(nèi)部狀態(tài)的更新方式為:c_t=(1-i_t)\odot c_{t-1}+i_t\odot \tilde c_t

門控循環(huán)單元網(wǎng)絡(luò)(GRU)

GRU是是一種比LSTM網(wǎng)絡(luò)更加簡單的循環(huán)神經(jīng)網(wǎng)絡(luò)嚷硫。

GRU網(wǎng)絡(luò)的循環(huán)單元結(jié)構(gòu)

GRU網(wǎng)絡(luò)引入門控機(jī)制來控制信息更新的方式检访。和LSTM 不同,GRU不引入額外的記憶單元仔掸,GRU 網(wǎng)絡(luò)也是在公式h_t=h_{t-1}+g(x_t,h_{t-1};\theta)的基礎(chǔ)上引入一個更新門(Update Gate)來控制當(dāng)前狀態(tài)需要從歷史狀態(tài)中保留多少信息(不經(jīng)過非線性變換)脆贵,以及需要從候選狀態(tài)中接受多少新信息。

? h_t=z_t\odot h_{t-1}+(1-z_t)\odot g(x_t,h_{t-1};\theta)

其中z_t\in[0,1]為更新門起暮,z_t=\sigma(W_zx_t+U_zh_{t-1}+b_z)

在LSTM網(wǎng)絡(luò)中卖氨,輸入門和遺忘門是互補(bǔ)關(guān)系,具有一定的冗余性负懦。GRU網(wǎng)絡(luò)直接使用一個門來控制輸入和遺忘之間的平衡筒捺。當(dāng)zt = 0 時,當(dāng)前狀態(tài)ht 和前一時刻的狀態(tài)ht?1 之間為非線性函數(shù)關(guān)系纸厉;當(dāng)zt = 1 時系吭,ht 和ht?1 之間為線性函數(shù)關(guān)系。

在GRU網(wǎng)絡(luò)中颗品,函數(shù)g(xt,ht?1; θ) 的定義為:\tilde{\boldsymbol{h}}_{t}=\tanh \left(W_{h} \boldsymbol{x}_{t}+U_{h}\left(\boldsymbol{r}_{t} \odot \boldsymbol{h}_{t-1}\right)+\boldsymbol肯尺_{h}\right)沃缘,(這里使用tanh 激活函數(shù)是
由于其導(dǎo)數(shù)有比較大的值域,能夠緩解梯度消失問題则吟。)

其中\tilde h_t表示當(dāng)前時刻的候選狀態(tài)槐臀,r_t\in[0,1]為重置門,用來控制候選狀態(tài)\tilde h_t的計算是否依賴上一時刻的狀態(tài)h_{t-1}

? r_t=\sigma(W_rx_t+U_rh_{t-1}+b_r)

當(dāng)rt = 0 時氓仲,候選狀態(tài)\tilde{\boldsymbol{h}}_{t}=\tanh \left(W_{h} \boldsymbol{x}_{t}+\boldsymbol水慨_{h}\right) 只和當(dāng)前輸入xt 相關(guān),和歷史狀態(tài)無關(guān)敬扛。當(dāng)rt = 1 時晰洒,候選狀態(tài)\tilde{\boldsymbol{h}}_{t}=\tanh (W_{h} \boldsymbol{x}_{t}+U_{h}\boldsymbol{h}_{t-1}+\boldsymbol_{h})和當(dāng)前輸入xt 以及歷史狀態(tài)ht?1 相關(guān)舔哪,和簡單循環(huán)網(wǎng)絡(luò)一致欢顷。

綜上,GRU網(wǎng)絡(luò)的狀態(tài)更新方式為:h_t=z_t\odot h_{t-1}+(1-z_t)\odot \tilde h_t

可以看出捉蚤,當(dāng)zt = 0, r = 1 時,GRU網(wǎng)絡(luò)退化為簡單循環(huán)網(wǎng)絡(luò)炼七;若zt =0, r = 0 時缆巧,當(dāng)前狀態(tài)ht 只和當(dāng)前輸入xt相關(guān),和歷史狀態(tài)ht-1 無關(guān)豌拙。當(dāng)zt = 1時陕悬,當(dāng)前狀態(tài)ht = ht-1 等于上一時刻狀態(tài)ht?1,和當(dāng)前輸入xt 無關(guān)按傅。

深層循環(huán)神經(jīng)網(wǎng)絡(luò)

如果是長時間序列的神經(jīng)網(wǎng)絡(luò)捉超,按時間片段展開,即h_0\rightarrow h_t的路徑是很長的唯绍,可以說這是個很“深”的神經(jīng)網(wǎng)絡(luò)拼岳,但是不按時間片段展開,只看同一時刻網(wǎng)絡(luò)輸入到輸出的路徑况芒,即x_t\rightarrow y_t惜纸,這又是一個很“淺”的網(wǎng)絡(luò)。

深層循環(huán)神經(jīng)網(wǎng)絡(luò)是通過增加x_t\rightarrow h_t或者h_t\rightarrow y_t之間的路徑绝骚,從而增強(qiáng)循環(huán)神經(jīng)網(wǎng)絡(luò)的能力耐版。

堆疊循環(huán)神經(jīng)網(wǎng)絡(luò)(SRNN)

就是將多個循環(huán)網(wǎng)絡(luò)堆疊起來。一個堆疊的簡單循環(huán)網(wǎng)絡(luò)(Stacked SRN)也稱為循環(huán)多層感知器(RMLP)压汪。

按時間展開的堆疊循環(huán)神經(jīng)網(wǎng)絡(luò)
雙向循環(huán)神經(jīng)網(wǎng)絡(luò)

假設(shè)第1 層按時間順序粪牲,第2 層按時間逆序,在時刻t 時的隱狀態(tài)定義為h_t^{(1)}h_t^{(2)}止剖,則:
\begin{aligned} \boldsymbol{h}_{t}^{(1)} &=f\left(U^{(1)} \boldsymbol{h}_{t-1}^{(1)}+W^{(1)} \boldsymbol{x}_{t}+\boldsymbol腺阳^{(1)}\right) \\ \boldsymbol{h}_{t}^{(2)} &=f\left(U^{(2)} \boldsymbol{h}_{t+1}^{(2)}+W^{(2)} \boldsymbol{x}_{t}+\boldsymbol落君^{(2)}\right) \\ \boldsymbol{h}_{t} &=\boldsymbol{h}_{t}^{(1)} \oplus \boldsymbol{h}_{t}^{(2)} \\&其中\(zhòng)oplus為向量拼接操作\end{aligned}

擴(kuò)展到圖結(jié)構(gòu)

因?yàn)橥粚蛹壍碾[狀態(tài),在時間鏈中舌狗,可以構(gòu)成一條鏈路叽奥,而鏈?zhǔn)浇Y(jié)構(gòu)是一種特殊的圖結(jié)構(gòu),我們可以比較容易地將這種消息傳遞(Message Passing)的思想擴(kuò)展到任意的圖結(jié)構(gòu)上痛侍。

遞歸神經(jīng)網(wǎng)絡(luò)(RecNN)

是循環(huán)神經(jīng)網(wǎng)絡(luò)在有向無循環(huán)圖上的擴(kuò)展朝氓。遞歸神經(jīng)網(wǎng)絡(luò)的一般結(jié)構(gòu)為樹狀的層次結(jié)構(gòu)。

遞歸神經(jīng)網(wǎng)絡(luò)

以圖a中的結(jié)構(gòu)為例主届,有三個隱藏層h1赵哲、h2 和h3,其中h1 由兩個輸入x1和x2 計算得到君丁,h2 由另外兩個輸入層x3 和x4 計算得到枫夺,h3 由兩個隱藏層h1 和h2 計算得到。

對于一個節(jié)點(diǎn)hi绘闷,它可以接受來自父節(jié)點(diǎn)集合πi 中所有節(jié)點(diǎn)的消息橡庞,并更新自己的狀態(tài):h_i=f(h_{\pi_i})

其中h_{\pi_i}表示集合\pi_i中所有節(jié)點(diǎn)狀態(tài)的拼接,f(\cdot)是一個和節(jié)點(diǎn)位置無關(guān)的非線性函數(shù)印蔗,可以為一個單層的前饋神經(jīng)網(wǎng)絡(luò)扒最。比如圖a所示的遞歸神經(jīng)網(wǎng)絡(luò)具體可以寫為:
\begin{array}{l}{h_{1}=\sigma\left(W\left[\begin{array}{l}{x_{1}} \\ {x_{2}}\end{array}\right]+b\right)} \\ {h_{2}=\sigma\left(W\left[\begin{array}{l}{x_{3}} \\ {x_{4}}\end{array}\right]+b\right)} \\ {h_{3}=\sigma\left(W\left[\begin{array}{l}{h_{1}} \\ {h_{2}}\end{array}\right]+b\right)}\end{array}
其中,\sigma(\cdot)表示非線性激活函數(shù)华嘹,W和b是可學(xué)習(xí)的參數(shù)吧趣。

同樣,輸出層y可以為一個分類器耙厚,比如:y=g\left(W^{'}\left[\begin{array}{l}{h_{1}} \\ {h_{2}}\end{array}\right]+b^{'}\right)

圖網(wǎng)絡(luò)

圖網(wǎng)絡(luò)(Graph Network强挫,GN)是將消息傳遞的思想擴(kuò)展到圖結(jié)構(gòu)數(shù)據(jù)上的神經(jīng)網(wǎng)絡(luò)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末薛躬,一起剝皮案震驚了整個濱河市俯渤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌泛豪,老刑警劉巖稠诲,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異诡曙,居然都是意外死亡臀叙,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人票堵,你說我怎么就攤上這事抛计〈蚕樱” “怎么了跨释?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長厌处。 經(jīng)常有香客問我鳖谈,道長,這世上最難降的妖魔是什么阔涉? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任缆娃,我火速辦了婚禮,結(jié)果婚禮上瑰排,老公的妹妹穿的比我還像新娘贯要。我一直安慰自己,他們只是感情好椭住,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布崇渗。 她就那樣靜靜地躺著,像睡著了一般京郑。 火紅的嫁衣襯著肌膚如雪宅广。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天些举,我揣著相機(jī)與錄音乘碑,去河邊找鬼。 笑死金拒,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的套腹。 我是一名探鬼主播绪抛,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼电禀!你這毒婦竟也來了幢码?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤尖飞,失蹤者是張志新(化名)和其女友劉穎症副,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體政基,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贞铣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沮明。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辕坝。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖荐健,靈堂內(nèi)的尸體忽然破棺而出酱畅,到底是詐尸還是另有隱情琳袄,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布纺酸,位于F島的核電站窖逗,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏餐蔬。R本人自食惡果不足惜碎紊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望用含。 院中可真熱鬧矮慕,春花似錦、人聲如沸啄骇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缸夹。三九已至痪寻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間虽惭,已是汗流浹背橡类。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留芽唇,地道東北人顾画。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像匆笤,于是被迫代替她去往敵國和親研侣。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容