圖解 RNN (循環神經網絡) 背后的數學原理
引言
現在,關于機器學習、深度學習和人工神經網絡的討論越來越多了。但程序員往往只想把這些魔幻的框架用起來,大多并不想知道背后到底是如何運作的。但是如果我們能夠掌握這些背后的原理,對于使用起來豈不更好。
今天我們就來討論下循環神經網絡及其背后的基本數學原理,這些原理使得循環神經網絡能夠做到其他神經網絡做不到的事情。
? RNN(循環神經網絡)。
這篇文章的目的是對循環神經網絡的功能、結構提供一個直觀的認識。
一個神經網絡通常取自變量 X(或一組自變量)和因變量y ,然后它學習X 和 y之間的映射(我們稱之為訓練),一旦訓練完成,當給定一個新的自變量,就能預測相應的因變量。
但如果數據的順序很重要呢?想象一下,如果所有自變量的順序都很重要呢?
讓我來直觀地解釋一下吧。
只要假設每個螞蟻是一個獨立變量,如果一個螞蟻朝著不同的方向前進,對其他螞蟻來說都沒關系,對吧?但是,如果螞蟻的順序很重要怎么辦?
此時,如果一只螞蟻錯過或者離開了群體,它將會影響到后面的螞蟻。
那么,在機器學習空間中,哪些數據的順序是重要的呢?
- 自然語言數據的詞序問題
- 語音數據
- 時間序列數據
- 視頻/音樂序列數據
- 股市數據
- 等等
那么 RNN 是如何解決整體順序很重要的數據呢?我們用自然文本數據為例來解釋 RNN。
假設我正在對一部電影的用戶評論進行情感分析。
從這部電影好(This movie is good) — 正面的,再到這部電影差(This movie is bad) — 負面的。
我們可以通過使用簡單的詞匯袋模型對它們進行分類,我們可以預測(正面的或負面的),但是等等。
如果影評是這部電影不好(This movie is not good),怎么辦?
BOW 模型可能會說這是一個積極的信號,但實際上并非如此。而 RNN 理解它,并預測它是消極的信息。
一. RNN 如何做到的呢?
1.各類 RNN 模型
(1)、一對多
RNN 接受一個輸入,比如一張圖像,并生成一個單詞序列。
(2)、多對一
RNN 接受一個單詞序列作為輸入,并生成一個輸出。
(3)、多對多
接下來,我們正專注于第二種模式多對一。RNN 的輸入被視為時間步長。
示例: 輸入(X) = [" this ", " movie ", " is ", " good "]
this 的時間戳是 x(0),movie 的是 x(1),is 的是 x(2),good 的是 x(3)。
2. 網絡架構及數學公式
下面讓我們深入到 RNN 的數學世界。
首先,讓我們了解 RNN 單元格包含什么!我希望并且假設大家知道前饋神經網絡,FFNN 的概括,
? 隱藏層只有單一神經元的前饋神經網絡示例。
? 具有單一隱藏層的前饋神經網絡。
在前饋神經網絡中,我們有 X(輸入)、H(隱藏)和 Y(輸出)。我們可以有任意多的隱藏層,但是每個隱藏層的權值 W 和每個神經元對應的輸入權值是不同的。
上面,我們有權值 Wy10 和 Wy11,分別對應于兩個不同的層相對于輸出 Y 的權值,而 Wh00、Wh01 等代表了不同神經元相對于輸入的不同權值。
由于存在時間步長,神經網絡單元包含一組前饋神經網絡。該神經網絡具有順序輸入、順序輸出、多時間步長和多隱藏層的特點。
與 FFNN 不同的是,這里我們不僅從輸入值計算隱藏層值,還從之前的時間步長值計算隱藏層值。對于時間步長,隱藏層的權值(W)是相同的。下面展示的是 RNN 以及它涉及的數學公式的完整圖片。
在圖片中,我們正在計算隱藏層的時間步長 t 的值:
? 不同的激活函數。
上面我們只計算了 Ht,類似地,我們可以計算所有其他的時間步長。
步驟:
需要注意的是:
一旦前饋輸入完成,我們就需要計算誤差并使用反向傳播法來反向傳播誤差,我們使用交叉熵作為代價函數。
3. BPTT(時間反向傳播)
如果你知道正常的神經網絡是如何工作的,剩下的就很簡單了,如果不清楚,可以參考本號前面關于人工神經網絡的文章。
我們需要計算下面各項,
- 1、相對于輸出(隱藏和輸出單元)的總誤差如何變化?
- 2、相對于權重(U, V, W)的輸出如何變化?
因為 W 對于所有的時間步長都是一樣的,我們需要返回到前面,來進行更新。
? RNN 中的 BPTT。
記住 RNN 的反向傳播和人工神經網絡的反向傳播是一樣的,但是這里的當前時間步長是基于之前的時間步長計算的,所以我們必須從頭到尾遍歷來回。
如果我們運用鏈式法則,就像這樣
? 反向傳播鏈式法則。
在所有時間步長上的 W 都相同,因此按鏈式法則展開項越來越多。
回到實例
現在我們回過頭來談談我們的情感分析問題,這里有一個 RNN,
我們給每個單詞提供一個詞向量或者一個熱編碼向量作為輸入,并進行前饋和 BPTT,一旦訓練完成,我們就可以給出新的文本來進行預測。它會學到一些東西,比如不+積極的詞 = 消極的。
RNN 的問題 → 消失/爆炸梯度問題
由于 W 對于所有的時間步長都是一樣的,在反向傳播過程中,當我們回去調整權重時,信號會變得要么太弱要么太強,從而導致要么消失要么爆炸的問題。