圖解 RNN(循環(huán)神經(jīng)網(wǎng)絡(luò)) 背后的數(shù)學(xué)原理

0引言

這篇文章的目的是對循環(huán)神經(jīng)網(wǎng)絡(luò)的功能、結(jié)構(gòu)提供一個直觀的認(rèn)識。
一個神經(jīng)網(wǎng)絡(luò)通常取自變量
但如果數(shù)據(jù)的順序很重要呢?想象一下,如果所有自變量的順序都很重要呢?
讓我來直觀地解釋一下吧。

只要假設(shè)每個螞蟻是一個獨(dú)立變量,如果一個螞蟻朝著不同的方向前進(jìn),對其他螞蟻來說都沒關(guān)系,對吧?但是,如果螞蟻的順序很重要怎么辦?

此時(shí),如果一只螞蟻錯過或者離開了群體,它將會影響到后面的螞蟻。
那么,在機(jī)器學(xué)習(xí)空間中,哪些數(shù)據(jù)的順序是重要的呢?
自然語言數(shù)據(jù)的詞序問題 語音數(shù)據(jù) 時(shí)間序列數(shù)據(jù) 視頻/音樂序列數(shù)據(jù) 股市數(shù)據(jù) 等等
那么 RNN 是如何解決整體順序很重要的數(shù)據(jù)呢?我們用自然文本數(shù)據(jù)為例來解釋 RNN。
假設(shè)我正在對一部電影的用戶評論進(jìn)行情感分析。
從這部電影好(This movie is good) — 正面的,再到這部電影差(This movie is bad) — 負(fù)面的。
我們可以通過使用簡單的詞匯袋模型對它們進(jìn)行分類,我們可以預(yù)測(正面的或負(fù)面的),但是等等。
如果影評是這部電影不好(This movie is not good),怎么辦?
BOW 模型可能會說這是一個積極的信號,但實(shí)際上并非如此。而 RNN 理解它,并預(yù)測它是消極的信息。
1RNN 如何做到的呢?
1各類 RNN 模型
1、一對多
RNN 接受一個輸入,比如一張圖像,并生成一個單詞序列。

2、多對一
RNN 接受一個單詞序列作為輸入,并生成一個輸出。

3、多對多

接下來,我們正專注于第二種模式多對一。RNN 的輸入被視為時(shí)間步長。
示例: 輸入(X) = [" this ", " movie ", " is ", " good "]
this 的時(shí)間戳是 x(0),movie 的是 x(1),is 的是 x(2),good 的是 x(3)。
2網(wǎng)絡(luò)架構(gòu)及數(shù)學(xué)公式
下面讓我們深入到 RNN 的數(shù)學(xué)世界。
首先,讓我們了解 RNN 單元格包含什么!我希望并且假設(shè)大家知道前饋神經(jīng)網(wǎng)絡(luò),F(xiàn)FNN 的概括,


在前饋神經(jīng)網(wǎng)絡(luò)中,我們有 X(輸入)、H(隱藏)和 Y(輸出)。我們可以有任意多的隱藏層,但是每個隱藏層的權(quán)值 W 和每個神經(jīng)元對應(yīng)的輸入權(quán)值是不同的。
上面,我們有權(quán)值 Wy10 和 Wy11,分別對應(yīng)于兩個不同的層相對于輸出 Y 的權(quán)值,而 Wh00、Wh01 等代表了不同神經(jīng)元相對于輸入的不同權(quán)值。
由于存在時(shí)間步長,神經(jīng)網(wǎng)絡(luò)單元包含一組前饋神經(jīng)網(wǎng)絡(luò)。該神經(jīng)網(wǎng)絡(luò)具有順序輸入、順序輸出、多時(shí)間步長和多隱藏層的特點(diǎn)。
與 FFNN 不同的是,這里我們不僅從輸入值計(jì)算隱藏層值,還從之前的時(shí)間步長值計(jì)算隱藏層值。對于時(shí)間步長,隱藏層的權(quán)值(W)是相同的。下面展示的是 RNN 以及它涉及的數(shù)學(xué)公式的完整圖片。

在圖片中,我們正在計(jì)算隱藏層的時(shí)間步長 t 的值:
是之前的時(shí)間步長。我說過 W 對所有時(shí)間步長來說都是一樣的。激活函數(shù)可以是 Tanh、Relu、Sigmoid 等。

上面我們只計(jì)算了 Ht,類似地,我們可以計(jì)算所有其他的時(shí)間步長。
步驟:
1、從
和 計(jì)算? 2、由
和 計(jì)算? 3、從
、 、 和 計(jì)算? 4、由
和 計(jì)算 ,依此類推。
需要注意的是:
1、
和 是權(quán)重向量,每個時(shí)間步長都不同。 2、我們甚至可以先計(jì)算隱藏層(所有時(shí)間步長),然后計(jì)算
值。 3、權(quán)重向量一開始是隨機(jī)的。
一旦前饋輸入完成,我們就需要計(jì)算誤差并使用反向傳播法來反向傳播誤差,我們使用交叉熵作為代價(jià)函數(shù)。
2BPTT(時(shí)間反向傳播)
如果你知道正常的神經(jīng)網(wǎng)絡(luò)是如何工作的,剩下的就很簡單了,如果不清楚,可以參考本號前面關(guān)于人工神經(jīng)網(wǎng)絡(luò)的文章。
我們需要計(jì)算下面各項(xiàng),
1、相對于輸出(隱藏和輸出單元)的總誤差如何變化? 2、相對于權(quán)重(U, V, W)的輸出如何變化?
因?yàn)?W 對于所有的時(shí)間步長都是一樣的,我們需要返回到前面,來進(jìn)行更新。

記住 RNN 的反向傳播和人工神經(jīng)網(wǎng)絡(luò)的反向傳播是一樣的,但是這里的當(dāng)前時(shí)間步長是基于之前的時(shí)間步長計(jì)算的,所以我們必須從頭到尾遍歷來回。
如果我們運(yùn)用鏈?zhǔn)椒▌t,就像這樣

在所有時(shí)間步長上的 W 都相同,因此按鏈?zhǔn)椒▌t展開項(xiàng)越來越多。
在 Richard Sochers 的循環(huán)神經(jīng)網(wǎng)絡(luò)講座幻燈片[1]中,可以看到一種類似但不同的計(jì)算公式的方法。
類似但更簡潔的 RNN 公式:
總誤差是各時(shí)間步長 t 對應(yīng)誤差的總和:
鏈?zhǔn)椒▌t的應(yīng)用:
所以這里,
2回到實(shí)例
現(xiàn)在我們回過頭來談?wù)勎覀兊那楦蟹治鰡栴},這里有一個 RNN,

我們給每個單詞提供一個詞向量或者一個熱編碼向量作為輸入,并進(jìn)行前饋和 BPTT,一旦訓(xùn)練完成,我們就可以給出新的文本來進(jìn)行預(yù)測。它會學(xué)到一些東西,比如不+積極的詞 = 消極的。
RNN 的問題 → 消失/爆炸梯度問題
由于 W 對于所有的時(shí)間步長都是一樣的,在反向傳播過程中,當(dāng)我們回去調(diào)整權(quán)重時(shí),信號會變得要么太弱要么太強(qiáng),從而導(dǎo)致要么消失要么爆炸的問題。為了避免這種情況,我們使用 GRU 或 LSTM,將在后續(xù)文章中介紹。
?參考資料?
Richard Sochers 的循環(huán)神經(jīng)網(wǎng)絡(luò)講座幻燈片: http://cs224d.stanford.edu/lectures/CS224d-Lecture7.pdf
[2]英文鏈接: https://medium.com/towards-artificial-intelligence/a-brief-summary-of-maths-behind-rnn-recurrent-neural-networks-b71bbc183ff
三連在看,月入百萬??
