遞歸神經網路(Recurrent Neural Network): Back-propagation Through Time

Tommy Huang
10 min readJul 29, 2019

--

此篇Recurrent Neural Network (RNN)介紹主要是"RNN簡單介紹"和RNN運到的權重更新方式"Back-propagation Through Time(BPTT)"的部分進行公式推導與介紹。

如果對神經網路Back-propagation不太熟的可以先看這篇文章
機器學習- 神經網路(多層感知機 Multilayer perceptron, MLP) 含倒傳遞( Backward propagation)詳細推導

RNN簡單介紹

RNN是透過不同樣本(pattern)之間的關聯度(這篇是以時間做為關聯度)來增加特徵擷取的強度,這個關聯度不一定是時間,空間關聯度也是可以的,但網路一般都是拿時間關聯度來舉例,我也拿時間來當範例。

時間關聯度: 兩張連續(時間點t和時間點t+1) 的影像、時間點t和時間點t+1的訊號。

空間關聯度: CRNN (CNN+RNN)在OCR(Optical Character Recognition)上做連續字形辨識,如下圖判斷一張圖片上的字串的文字這類,這時候RNN的「不同樣本(pattern)之間」則是CNN的特徵圖上拆解出來的pattern(如下圖 Recurrent layer),模型可以學習到S後面要加T,T後面要加A,A後面又是T,T後面就是E這類的空間關聯度,也是有時間概念,因為要寫STATE這個字的時候,一定是S、T、A、T、E的訓續來寫,這也是後來有用RNN家族的方法拿來做自動文章撰寫的AI應用。

來源: https://github.com/qjadud1994/CRNN-Keras

我們拉回單純的RNN,RNN和一般MLP的差異就是引進了具有記憶功能的「狀態(State)」,簡單說RNN的輸入不在是單純的透過fully connection或是conv.來計算得到輸出,而是先算出一個State,在透過這個State得到輸出,然而這個State具有記憶功能,可以影響到下一個、下兩個或是下n個State,讓不同的State之間產生關聯性,利用State幫RNN進行「記憶」功能,幫忙網路記憶之前看過樣本的訊息,並結合最新樣本所帶來的訊息進行得到輸出。下圖是一般RNN結構,左邊是簡化版,右邊是詳細版,從圖可以看到每一個時間點的輸出都會受到前一次State的影響(記憶)。

圖一、RNN結構,t代表第t個時間點

x(t-1), x(t), x(t+1): 為第t-1, tt+1時間點的輸入。
s(t-1), s(t), s(t+1): 為第t-1, tt+1時間點的State。
o(t-1), o(t), o(t+1): 為第t-1, tt+1時間點的輸出。

所以V就是input和State的關聯權重,W為State和Output的關聯權重,這邊範例假設State只有一個hidden node(實際運作State可以很複雜),U則是t和t+1時間點State之間的權重,不同時間點用到的U、V、W都是一樣的

我們可以想像x(t)→s(t)→o(t)可視為一個Neural Network,然後靠s(t-1)達到Recurrent的功能。

我們可以發現剛剛上公式我們遺漏了神經網路非常重要一項,也就是activation function,我們將activation補回去,簡化公式如下:

f1是State到輸出的activation function,f2 是輸入到State的activation function。

RNN基本上就是U、V、W三個權重和對應的activation進行運算。

RNN前傳遞 (Forward propagation)

RNN的向前傳遞基本上就如同下圖所示
1. 由輸入層→state層: 輸入層部分除了原始的輸入資料外會再加上t-1時間的state狀態,一同向前傳遞到t時間的state。
2.State層→輸出層: 這邊向前傳遞就什麼特殊的部分,跟一般MLP差不多。

此部分份因為牽涉到公式推導,因此我們會將上述所列的公式和圖示拆細一點來說明RNN前向傳遞。

  1. V就是input(x(t))和State(s(t))的關聯權重: d+1個input node(x(t))和p+1個state node(s(t))。
    x(t)=[x0(t), x1(t),…,xd(t)]T
    s(t)=[s0(t), s1(t),…,sp(t)]T
    xi(t)和sk(t)的權重Vik。
  2. W為State和Output的關聯權重:p+1個state node(s(t))和m+1個output node(o(t))和。
    o(t)=[o0(t), o1(t),…,om(t)]T
    sk(t)和oj(t)的權重wkj。
  3. U則是t和t+1時間點State之間的權重:p+1個t時間的state node(s(t))和p+1個t-1時間的state node(s(t-1))
    sk(t-1)和sk(t)的權重uqk。
在t時間點前向傳遞的RNN圖示(複雜版本)。
在t時間點前向傳遞的RNN圖示(簡化版本)。

RNN的輸入層→state層

和MLP不同的地方,在於RNN輸入有兩個輸入資料,分別為輸入特徵( x(t))和t-1時間點的state(s(t-1) ),MLP只有x且沒有時間。

RNN輸入層( x(t)和(s(t-1))→state層
2025/01/08修正index錯誤,感謝讀者@林逢暉 提出錯誤。

i是輸入資料維度的index(總共有d+1維),q是state維度的index(總共有p+1維)。
f1是輸入到State的activation function。

RNN的state層→輸出層

RNN state層(s(t))→輸出層 (紅色框)

f2是State到輸出的activation function。

RNN向後傳遞 (Backward propagation)

之前介紹過深度學習找解的方式是用gradient來找解,所以要找參數解,就是要找他的梯度(偏微分),RNN三個參數分別是U、V、W,相對應的梯度如下三行公式,看起來超簡單的是吧。

這邊用到的E(t)就是神經網路的靈魂loss function,我這邊用E(t)來表示t時間的MSE當作loss function,如下

其中m是輸出層node的個數,n是訓練輸入的樣本數,t是第t個時間點。
在t時間點倒傳遞的RNN圖示。

我們把公式在拆開來看,三個參數分成三部分倒傳遞的推導,如下

I. t時間輸出到t時間state layer

t時間輸出到t時間state layer

此部分的結果會和MLP輸出層到隱藏層的推導一樣,因此我直接放結果推導請看MLP的那篇。

會用到chain rule技巧,詳細推論請看MLP

II. t時間state layer到t時間輸入層

t時間state layer到t時間輸入層

此部分的結果會和MLP隱藏層到輸入層的推導一樣,

2020/08/20 修正第二行公式 原本寫對W偏微分,已修正成對h偏微分。

III. t時間state layer到t-1時間state layer層

t時間state layer到t-1時間state layer層

MLP和RNN的差別,跟為什麼叫Back-propagation Through Time

MLP主要分三層輸入層、隱藏層和輸出層。
RNN分成t時間點輸入層、t時間點State(隱藏層)、t+1時間State和t時間點輸出層。
從上圖可以得知RNN比MLP多了一個U權重要找,所以上一章倒傳遞(I、II和III推導來看),其他都和MLP推導差不多,只是多了 △u_qk這一項(III. t時間state layer到t-1時間state layer層)。

RNN所用到的Back-propagation Through Time,所謂的Through Time其實跟MLP用的Back-propagation差別最大就是多了△u_qk這一項

因為這一項的gradient會考慮過去t-1時間點的state ( sk(t-1),下公式紅色部分)

所以就可以藉由此方式將過去時間的訊息用來做倒傳遞的學習。

但換個角度想,時間t-1的state(sk(t-1))這個部分,你把這部分想像它只是單純的input node,這樣整個網路跟MLP基本上是完全一樣的。

備註:

Recurrent Neural Network (RNN)和一般的MLP或是CNN不太一樣。
MLP或是CNN input都是相對固定的大小,比如說MLP模型確定後輸入的維度數是固定下來的,而CNN也是在模型確認後,輸入的圖也是經由resize (比如224*224, 300*300, 416*416)固定輸入圖的大小。
RNN理論上和MLP和CNN一樣模型的輸入維度也要固定下來,但RNN通常輸入長度都不固定,但可以通過一些手法讓不同長度的輸入得以固定下來(此部分固定下來,是指x部分,時間軸部分可以不用固定,但應該還是有一個最大極限在),聽說很複雜,還不太熟,慢慢學習中。

MLP: 輸入為處理過的特徵或是明確的特徵(結構化且可量化資料),比如身高、體重這類的,且模型在學習時不同樣本之間的假設彼此是獨立的。
CNN: 擅長從非結構化資料(影像或是訊號)間著重在相鄰區域間的關聯性(locally connection/weight share)進行特徵學習(相連區域有可能應為Dilate的設定變得不相連),不同樣本間彼此之間也是獨立的。

--

--

Tommy Huang
Tommy Huang

Written by Tommy Huang

怕老了忘記這些吃飯的知識,開始寫文章記錄機器/深度學習相關內容。Medium現在有打賞功能(每篇文章最後面都有連結),如果覺得寫的文章不錯,也可以Donate給個Tipping吧。黃志勝 Chih-Sheng Huang (Tommy), mail: chih.sheng.huang821@gmail.com

Responses (2)