網路流量預測入門(一)之RNN 介紹

段小輝發表於2021-01-25

網路流量預測入門(一)之RNN 介紹

瞭解RNN之前,神經網路的知識是前提,如果想了解神經網路,可以去參考一下我之前寫的部落格:資料探勘入門系列教程(七點五)之神經網路介紹 and 資料探勘入門系列教程(八)之使用神經網路(基於pybrain)識別數字手寫集MNIST

這篇部落格介紹RNN的原理,同時推薦大家去看李宏毅老師的課程:ML Lecture 21-1: Recurrent Neural Network (Part I)。基本上看完他的課程,也就沒有必要看這篇部落格了。

RNN簡介

RNN全稱Recurrent Neural Network ,中文名為迴圈神經網路(亦或稱遞迴神經網路)。相信大家在看這篇部落格之前都已經簡單的瞭解過RNN。將RNN說的簡單一點,就是進行預測(或者回歸)的時候,不僅要考慮到當前時刻的輸入,還要考慮上一個時刻的輸入(甚至有些RNN的變種還會考慮未來的情況)。換句話說,預測的結果不僅與當前狀態有關,還與上一個時刻的狀態有關。

RNN用於處理時序資訊 。而在傳統的神經網路中,我們認為輸入的 \(x_1,x_2,x_3\),是相互獨立的:比如說在Iris分類中,我們認為鳶尾花的長寬是獨立的,之間不存在前後序列邏輯關係。

儘管傳統的神經網路在預測中能夠取得不錯的成績(比如說人臉識別等等),但是對於以下方式情景可能就愛莫能助了。

當我們想要預測一段話“小丑竟是我自____”時,我們必須根據前文的意思來predict。而RNN之所以叫做迴圈(recurrent),這是因為它的預測會考慮以前的資訊。換句話說,也就是RNN具有memory,它“記得”之前計算後的情況。

在知乎全面理解RNN及其不同架構上,說了一個很形象的例子:

以捏陶瓷為例,不同角度相當於不同的時刻:

  • 若用前饋網路:網路訓練過程相當於不用轉盤,而是徒手將各個角度捏成想要的形狀。不僅工作量大,效果也難以保證。
  • 若用遞迴網路(RNN):網路訓練過程相當於在不斷旋轉的轉盤上,以一種手勢捏造所有角度。工作量降低,效果也可保證。

RNN 結構

RNN的原理圖,我們最多見的便是如左圖所示,但是實際上將它展開,便是如下右圖所示。

  1. 在RNN中,我們可以將黃框稱之為一個layer,所有的layer的引數在一個batch中是相同的(引數共享),也就是說,上圖中的 \(U,W,V\) 等引數在某個batch全部相同。(通過一個batch的訓練之後,經過反向傳播,引數會發生改變)

  2. Layer的層數根據自己的需要來定,舉個例子,比如說我們分析的句子是5個單詞構成的句子,那麼layer的層數便是5,每一個layer對應一個單詞。

  3. 上圖既有多個輸入\(X_{t-1},X_{t},X_{t+1}\) , 也可以有多個輸出\(O_{t-1},O_{t},O_{t+1}\) , 但是實際上輸出可以根據實際的需要而定,既可以為多個輸出,也可以只有一個輸出,有如下幾種:

    Type of RNN Illustration Example
    One-to-one \(T_x=T_y=1\) Traditional neural network
    One-to-many \(T_x=1, T_y>1\) Music generation
    Many-to-one \(T_x>1, T_y=1\) Sentiment classification
    Many-to-many \(T_x=T_y\) Name entity recognition
    Many-to-many \(T_x\neq T_y\) Machine translation

Gif圖如下所示:

下圖是李宏毅老師在課堂上講的一個例子。

RNN原理

結構原理

下面是來自Recurrent Neural Networks cheatsheet對RNN原理的解釋:

\(a^{<t>}\)\(y^{<t>}\) 的表示式如下所示:

\[a^{<t>}=g_{1}\left(W_{a a} a^{<t-1>}+W_{a x} x^{<t>}+b_{a}\right) \quad \text { and } \quad y^{<t>}=g_{2}\left(W_{y a} a^{<t>}+b_{y}\right) \]

  • \(W_{a x}, W_{a a}, W_{y a}, b_{a}, b_{y}\) 在時間上是共享的:也就是說,在一個batch中,無論是哪一個layer,其\(W_{a x}, W_{a a}, W_{y a}, b_{a}, b_{y}\)都是相同的(shared temporally)。當然,經過一個batch的訓練之後,其值會因為反向傳播而發生改變。

  • \(g_{1}, g_{2}\) 皆為啟用函式(比如說tanh,sigmoid)

損失函式\(E\)

$ \mathcal{L}$ 為可微分的損失函式,比如交叉熵,其中\(y^{<t>}\)為t時刻正確的詞語,\(\hat{y}^{<t>}\)為t時刻預測的詞語。

\[\mathcal{L}^{<t>} = \mathcal{L}(\hat{y}^{<t>}, y^{<t>}) \\ {E}(\hat{y}, y)=\sum_{t=1}^{T_{y}} \mathcal{L}^{<t>} \]

反向傳播

反向傳播目的就是求預測誤差 \(E\) 關於所有引數 \((U, V, W)\) 的梯度, 即 \(\frac{\partial E}{\partial U}, \frac{\partial E}{\partial V}\)\(\frac{\partial E}{\partial W}\) 。關於具體的推導可以參考迴圈神經網路(RNN)模型與前向反向傳播演算法

知道梯度後,便可以對引數係數進行迭代更新了。

總結

在上述部落格中,簡單的對RNN進行了介紹,介紹了RNN作用,以及部分原理。而在下篇部落格中,我將介紹如何使用keras構建RNN模型寫唐詩。?

參考

  1. 什麼是 LSTM RNN 迴圈神經網路 (深度學習)? What is LSTM in RNN (deep learning)?
  2. ML Lecture 21-1: Recurrent Neural Network (Part I)
  3. Recurrent Neural Network (RNN) Tutorial for Beginners
  4. Recurrent Neural Networks cheatsheet
  5. Recurrent Neural Networks Tutorial, Part 1 – Introduction to RNNs
  6. 全面理解RNN及其不同架構
  7. 神經網路與深度學習(邱錫鵬)
  8. 迴圈神經網路(RNN)模型與前向反向傳播演算法
  9. 深度學習框架PyTorch:入門與實踐

相關文章