MindSpore循环神经网络
MindSpore循環神經網絡
一. 神經網絡的組成
神經元模型:首先簡單的了解以下構成神經網絡的最基礎單元:神經元。每個神經元與其它神經元相連,處于激活狀態時,就會向相連的神經元發送相應信號。從而改變其它神經元的狀態。如果某個神經元的信號超過某個閾值。那么將被激活,再接著發送給其它神經元。如圖1所示:
圖1:神經元結構
神經網絡的任何神經元都可以表述為上述的形式。該單元主要由輸入變量、帶權參數和激活函數組成。首先是x1,x2,x3帶權重的輸入變量,該變量的取值來自前面一層所有變量與權重的乘積,然后再求和,在數學上表示為下式:
其中,x為自由的輸入變量,xl為當前l層,這里的累加求和為前面一層所有變量與權重的乘積,n為神經元個數。在實踐當中,神經網絡的輸入層由訓練樣本給定。隱含層和輸出層的x取值由前一層計算得到。其中b為偏置參數。
激活函數:理想中的激活函數是如圖2所示的躍遷函數,將輸入值映射到O或1,很直觀的1對應著神經元激活狀態,0則表示神經元處于失活狀態。然而由于躍遷函數不連續且非光滑(無法完美表達大腦神經網絡的連續傳遞過程),實際常用Sigmoid函數作為激活函數。典型的Sigmoid函數如圖3所示,把可能的數壓縮進(0,1)輸出值之間,又名擠壓函數(squashing function)。
圖2:躍遷函數圖
圖3:sigmoid函數圖
將許多這樣的神經元按照一定的層次結構組織起來,就得到了人工神經網絡。發現這個模型是由許多個函數不斷嵌套而成。
感知機與多層網絡:輸入層接收外界的輸入信號然后傳遞給輸出層,輸出層為邏輯單元,圖4中的感知機有三個輸入:x1、x2、x3。通常,可以根據數據的維度設置數量。這里是一種計算輸出的規則,引入了權重(weight),w1,w2,…,wj等實數來表示各個輸人對于輸出的重要程度。
圖4:多層感知機結構圖
神經元的輸出是0或者l,分別代表未激活與激活狀態,由加權和的值是否小于或者大于某一個閾值(threshold value)決定。與權重一樣,閾值也是一個實數,這是神經元的一個參數。使用更嚴密的代數形式來表示:
對于上面決策的式子,基本的思想就是:這是一個通過給每個維度數據賦予不同權重從而做出決策的機器,就可以判斷出該事件可不可行。也需要通過調整權重和閾值的大小,得到不同的決策模型。
很顯然,感知機不能完全模擬人類的決策系統。但是,一個由感知機構成的復雜網絡能夠做出更加精細的決策,可解釋得通的。在圖5所示這個網絡中,第一層感知機,通過賦予輸入的權重,做出三個非常簡單的決策。第二層感知機呢?每一個第二層感知機通過賦予權重給來自第一層感知機的決策結果做出決策。通過這種方式,第二層感知機可以比第一層感知機做出更加復雜,更高層次抽象的決策。第三層感知機能夠做出更加復雜的決策。通過這種方式,一個多層網絡感知機可以做出更加精細的決策。
圖5:多層感知機網絡
圖5網絡最左邊的是輸入層神經元,用于接收外界輸入信息,中間為隱藏層,對信號進行一定加工與轉換,最右邊為輸出層神經元,最終結果由輸出層神經元輸出表示。因此,通常被稱之為兩層網絡。一般情況下,只需要包含隱藏層,即可稱為多層網絡。神經網絡的學習過程,就是根據訓練數據來調整神經元之間的“權重”,以及每個功能神經元的閾值。
設計網絡的輸入層通常是非常直接的。例如,,要嘗試識別一張輸入圖像是否有“1”。很自然的,,可以將圖片像素的強度進行編碼作為輸入層。如果圖像是64×64的灰度圖.需4096=64×64個輸入神經元。每個強度都取0-1之間適合的值。輸出層只需要一個神經元,當輸出值小于0.5,表示該圖像不是“1”,反之,表示輸出的圖像是“1”。
相較于完全固定的輸入層和輸出層,隱含層的設計是個難題,特別是通過一些簡單的經驗來總結隱藏層的設計流程不一定總是可行的。討論的神經網絡,都是的前面一層作為后面一層的輸入,這種經典的網絡被稱為前饋神經網絡。這也就意味著網絡中沒有回路,信息總是向前傳播,從不反饋。
二. 神經網絡模型
神經網絡就是由很多個單一的神經單元組合到一起,這里面的一個神經單元的輸出就可以是另一個神經單元的輸入,每一個神經元有著各自的功能,通過將這些功能各異的神經元有序組合,就可以構成結構不同、用途不同的神經網絡。例如,圖6就是一個簡單的人工神經網絡。
圖6:神經網絡圖
對于圖6神經網絡圖的解釋,使用小圓圈來表示神經網絡要接受的信號,標上的圓圈中的+1被稱為偏置節點(bias)。神經網絡最左層用于接受的外部的信息,稱為輸入層,最右層是經過神經網絡處理后最終的輸出,稱為輸出層(本例中,輸出層只有一個節點)。中間所有節點組成的一層用于變換計算,看不到具體計算過程,稱為隱藏層,無法在訓練樣本集中觀測到它們的值。同時也可以看到,以上神經網絡的例子中有3個輸入單元(維度為3,偏置單元不計在內),3個隱藏單元及一個輸出單元。
在這里,用Lx來表示網絡總共有幾層,本例中很顯然x=3,同時,將第1層記為L1,則L1為輸入層,L3為輸出層。本例的神經網絡有訓練參數(W,b),其中(W1,b1,W2,b2)其中W1是第l層第j單元與第l+1層的第i單元之間的連接參數,bi則為第l+1層的第i單元的偏置單元。偏置單元是沒有輸入的,因為它們總是輸出+1。同時,,記第l層的節點數為si。
用ai表示第l層第i單元的激活值(輸出值)。當l=1時,ai=x,也就是第i個輸入值(輸入值的第i個特征)。對于給定參數集合(W,b),,的神經網絡就可以按照函數h從(x)來計算輸出結果,則計算過程:
這里用zi來表示第l層第i單元的激活值(包含偏置單元)。這樣就可以將激活函數f()擴展寫為向量的形式來表示,則上面的等式可以更簡潔地寫為:
上式的計算過程被稱為ANN的前向傳播。先前使用a=x來表示輸入層的激活值,依此類推給定第l層的激活值al之后,則第l+1層的激活值a就可以按照如下式子來計算:
更直觀的結構如圖7所示:
圖7:輸入與輸出
討論了一種通用的人工神經網絡結構,可以構建另種結構的神經網絡(這里的結構指的是兩個神經元的連接方式),即含有多個隱藏層的神經網絡。例如有一個有nl層的神經網絡,那么第1層為輸入層,第n層是輸出層,中間的每個層l與H+1層緊密相聯。在這種構造下,很容易計算神經網絡的輸出值,,可以按照之前推出的式子,一步一步地進行前向傳播,逐個單元地計算第L2層的每個激活值,依此類推,接著是第L3層的激活值,直到最后的第Ln層。這種聯接圖沒有回路或者閉環,所以稱這種神經網絡為前饋網絡。
除此之外,神經網絡的輸出單元還可以是多個。舉個例子,圖8的神經網絡結構就有兩層隱藏層:(L2和L3層),而輸出層L4層包含兩個輸出單元。
圖8:神經網絡連接圖
要求解這樣的神經網絡,需要樣本集(x,y)。如果想要預測的輸出是有多個分類的,那么這種神經網絡就比較適合,例如檢測一張數字圖片,就有兩個輸出。
三. 神經網絡的反向傳播
多層網絡的學習擬合能力比單層網絡要強大很多。所以想要訓練多層網絡,前面的簡單感知機學習方法顯然有些不足,需要擬合能力更加強大的算法。反向傳播算法( Back Propagation,BP)是其中的經典方法,BP算法不僅可以用于多層前饋神經網絡,可以用于其它類型神經網絡,例如LSTM模型,通常所說的BP網絡,一般是用BP算法訓練的多層前饋網絡。
可以先通過BP網絡的走向圖大致掌握以下反向傳播算法的主要用處,從輸入層開始,數據進入到網絡中經過每一層的計算變化,最終得出實際輸出。然后和期望輸出做比較計算損失值,此時的損失值將按照反方向逐漸向前傳播計算,通過梯度下降的方式優化網絡中的參數,求取出符合要求的網絡模型。如圖9中所示:
圖9:BP網絡結構圖
接下來,將通過公式計算逐步的展示BP網絡的基本結構。最開始要假設,有一個固定訓練集合{(x1,y1),…,(xm,ym)},樣本總數為m。利用批量梯度下降法來求解參數,也屬于有監督學習方法。具體到每個樣本(x,y),其代價函數為下式:
對于給定有m個樣本的數據集,可以定義整體的代價函數為:
上式中的第一項J(w,b)是均方差項。第二項則是規則化項,用來約束解以達到結構風險最小化( Structural risk minimization,SRM),目的是防止模型出現過擬合( over fitting)。
BP算法的總體流程:首先對每個樣本數據,進行前向傳播計算,依次計算出每層每個單元的激活值。接著計算出第l層的每個節點i的“殘差”值δ,該值直接體現了這個單元對最終的輸出有多大的影響力。最后一層輸出層則可以直接獲得最終結果和輸出結果的差值,,定義為δ(,而對于中間的隱藏層的殘差,,則通過加權平均下層(l+1層)殘差來計算。
BP算法的具體推導過程如下:
1)前饋網絡傳導的計算,逐層算出L2到最后一層的每層節點的激活值。
2)計算各節點的殘差值,對于輸出層,使用如下公式:
上式子中的推導過程如下:
3)從最后一層依次向前推導到第2層,第l層的殘差為:
推導可得出:
依照上面只需將nl替換為l就可以推導到中間層l與l=1的殘差關系。可以更新所需的偏導數:
最后得出BP算法的描述:
在下面的偽代碼中,ΔW0是一個與矩陣W維度相同的矩陣,△b0是一個與b0維度相同的向量。注意這里“ΔW”是一個矩陣。下面,實現批量梯度下降法中的一次迭代:
1)對于所有l,令△W0:=0,Δb0:=0(設置為全零矩陣或全零向量)。
2)對于i=1到m,
a)使用反向傳播算法計算
和
。
b)計算
。
c)計算
。
3)更新權重參數:
現在,可以重復梯度下降法的迭代步驟來減小代價函數J(w,b)的值,進而求解,的神經網絡。
四.門控制循環單元
門控循環神經網絡(gated recurrent neural network)的提出,為了更好地捕捉時間序列中時間步距離較大的依賴關系。通過可以學習的門來控制信息的流動。其中,門控循環單元(gated recurrent unit,GRU)是一種常用的門控循環神經網絡。
下面將介紹門控循環單元的設計。引入了重置門(reset gate)和更新門(update gate)的概念,從而修改了循環神經網絡中隱藏狀態的計算方式。
門控循環單元中的重置門和更新門的輸入均為當前時間步輸入XtXt與上一時間步隱藏狀態Ht?1,輸出由激活函數為sigmoid函數的全連接層計算得到。
圖10:門控制循環單元的重置門和更新門
具體來說,假設隱藏單元個數為h,給定時間步t的小批量輸入Xt∈Rn×d(樣本數為n,輸入個數為d)和上一時間步隱藏狀態Ht?1∈Rn×h。重置門Rt∈Rn×h和更新門Zt∈Rn×h的計算如下:
Rt=σ(XtWxr+Ht?1Whr+br),
Zt=σ(XtWxz+Ht?1Whz+bz),
其中Wxr,Wxz∈Rd×h和Whr,Whz∈Rh×h是權重參數,br,bz∈R1×h是偏差參數。
接下來,門控循環單元將計算候選隱藏狀態來輔助稍后的隱藏狀態計算。如圖11所示,將當前時間步重置門的輸出與上一時間步隱藏狀態做按元素乘法(符號為⊙)。如果重置門中元素值接近0,那么意味著重置對應隱藏狀態元素為0,即丟棄上一時間步的隱藏狀態。如果元素值接近1,那么表示保留上一時間步的隱藏狀態。然后,將按元素乘法的結果與當前時間步的輸入連結,通過含激活函數tanh的全連接層計算出候選隱藏狀態,
圖11:門控制循環單元中候選隱藏狀態的計算
具體來說,時間步t的候選隱藏狀態H~t∈Rn×h的計算為:
H~t=tanh(XtWxh+(Rt⊙Ht?1)Whh+bh)
其中Wxh∈Rd×h和Whh∈Rh×h是權重參數,bh∈R1×h是偏差參數。從上面這個公式可以看出,重置門控制了上一時間步的隱藏狀態如何流入當前時間步的候選隱藏狀態。而上一時間步的隱藏狀態可能包含了時間序列截至上一時間步的全部歷史信息。因此,重置門可以用來丟棄與預測無關的歷史信息。
最后,時間步t的隱藏狀態Ht∈Rn×h的計算使用當前時間步的更新門Zt來對上一時間步的隱藏狀態Ht?1和當前時間步的候選隱藏狀態H~t做組合:
Ht=Zt⊙Ht?1+(1?Zt)⊙H~t.
圖12:門控制循環單元中隱藏狀態的計算
值得注意的是,更新門可以控制隱藏狀態應該如何被包含當前時間步信息的候選隱藏狀態所更新,如圖11所示。假設更新門在時間步t′到t(t′<t)之間一直近似1。那么,在時間步t′到t之間的輸入信息幾乎沒有流入時間步t的隱藏狀態Ht。實際上,這可以看作是較早時刻的隱藏狀態Ht′?1一直通過時間保存并傳遞至當前時間步t。這個設計可以應對循環神經網絡中的梯度衰減問題,并更好地捕捉時間序列中時間步距離較大的依賴關系。
對門控循環單元的設計稍作總結:重置門有助于捕捉時間序列里短期的依賴關系;更新門有助于捕捉時間序列里長期的依賴關系。
五.長短期記憶網絡
門控制循環單元是為了解決循環神經網絡短期記憶問題提出的解決方案,引入稱作“門”的內部機制,可以調節信息流。在上次的內容分享中,簡單解析了名稱為GRU的門控制循環單元。因為“門”的機制,還可以在此基礎上創新出性能更優的循環單元。本次分享的內容也是基于GRU循環單元的強化版:長短期記憶網絡(long short-term memory,LSTM)門控制循環單元。
圖13 :LSTM和GRU結構圖
通過圖13可以很明顯的發現LSTM比GRU“門”的數量更多結構也更復雜。LSTM 中引入了3種類型的門,即輸入門(input gate)、遺忘門(forget gate)和輸出門(output gate),以及與隱藏狀態形狀相同的記憶細胞。
輸入門、遺忘門和輸出門:此3種控制門與門控循環單元中的重置門和更新門功能相似。如圖2所示,長短期記憶的門的輸入均為當前時間步輸入Xt與上一時間步隱藏狀態Ht-1,輸出由激活函數為sigmoid函數的全連接層計算得到。如此一來,由于sigmoid函數的特性,此3個門元素的輸出值域均為[0, 1]。
圖14:LSTM中的輸入門、遺忘門和輸出門
具體來說,假設隱藏單元個數為h,給定時間步t的小批量輸入Xt ∈ Rn×d(樣本數為n,輸入個數為d)和上一時間步隱藏狀態Ht?1 ∈ Rn×h。時間步t的輸入門It ∈ Rn×h、遺忘門Ft ∈ Rn×h和輸出門Ot ∈ Rn×h分別計算如下:
It = σ(XtWxi + Ht?1Whi + bi),
Ft = σ(XtWxf + Ht?1Whf + bf ),
Ot = σ(XtWxo + Ht?1Who + bo),
其中的Wxi,Wxf ,Wxo ∈ Rd×h和Whi,Whf ,Who ∈ Rh×h都屬于權重參數,其余是bi, bf , bo ∈ R1×h是偏差參數。
候選記憶細胞:接下來便是記憶細胞的機制,長短期記憶需要計算候選記憶細胞C?t。它的計算與上面介紹的3種門類似,但這里使用了值域在[-1, 1]的tanh函數作為激活函數,如圖15所示。
圖15:LSTM中的候選記憶細胞計算
時間步t的候選記憶細胞C?t ∈ Rn×h的計算可以表示為:
C?t = tanh(XtWxc + Ht?1Whc + bc),
上述表達式中的Wxc ∈ Rd×h和Whc ∈ Rh×h是權重參數,bc ∈ R1×h是偏差參數。
記憶細胞:,可以通過元素值域在[0, 1]的輸入門、遺忘門和輸出門來控制隱藏狀態中信息的流動,這一般也是通過使用按元素乘法(符號為⊙)來實現的。當前時間步記憶細胞Ct ∈ Rn×h的計算組合了上一時間步記憶細胞和當前時間步候選記憶細胞的信息,并通過遺忘門和輸入門來控制信息的流動:
Ct = Ft ⊙ Ct?1 + It ⊙ C?t.
如圖16所示,遺忘門控制上一時間步的記憶細胞Ct-1中的信息是否傳遞到當前時間步,而輸入門則控制當前時間步的輸?Xt通過候選記憶細胞C?t如何流入當前時間步的記憶細胞。如果遺忘門一直近似1且輸入門一直近似0,過去的記憶細胞將一直通過時間保存并傳遞至當前時間步。這個設計主要是針對循環神經網絡中的梯度衰減問題,并且還可以更好地捕捉時間序列中時間步距離較大的依賴關系。
圖16:LSTM憶中記憶細胞的計算。這?的⊙是按元素乘法
隱藏狀態:有了記憶細胞以后,接下來,還可以通過輸出門來控制從記憶細胞到隱藏狀態Ht ∈ Rn×h的信息的流動:
Ht = Ot ⊙ tanh(Ct).
這里的tanh函數確保隱藏狀態元素值在-1到1之間。需要注意的是,當輸出門近似1時,記憶細胞信息將傳遞到隱藏狀態供輸出層使用;當輸出門近似0時,記憶細胞信息只自己保留。圖17展示了長短期記憶中隱藏狀態的計算。
圖17:LSTM憶中隱藏狀態的計算。這?的⊙是按元素乘法
LSTM的輸入門、遺忘門和輸出門可以控制信息的流動。隱藏層輸出包括隱藏狀態和記憶細胞,只有隱藏狀態會傳遞到輸出層。長短期記憶可以應對循環神經網絡中的梯度衰減問題,并更好地捕捉時間序列中時間步距離較大的依賴關系。
總結:
首先,從網絡的基礎單元神經元開始,不同的神經元組合就構成了各種功能不同的神經網絡模型。BP網絡就是一種具有自我更新參數能力,具有一定的容錯性和抗干擾性。基本方法:學習過程由數據集信號的正向傳播和誤差的反向傳播兩個過程組成,通過兩種傳播不斷優化模型。門控循環單元(GRU)的改進是引入了門的概念,從而也修改了循環神經網絡中隱藏層重點計算方式。LSTM的核心是細胞的狀態,以及其中的各種門結構。細胞狀態充當傳輸通道,在序列鏈中進行著相關信息的傳遞。也可以抽象為網絡的“記憶”。
總結
以上是生活随笔為你收集整理的MindSpore循环神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。