RNN 筆記 - 基礎架構

Ref 吳尚鴻教授上課影片 from Youtube: https://www.youtube.com/watch?v=2btuy_-Fw3c&list=PLlPcwHqLqJDkVO0zHMqswX1jA9Xw7OSOK

Ref LaTeX Math Symbols: http://web.ift.uib.no/Teori/KURS/WRK/TeX/symALL.html

本篇主要透過數學表達式,來探討 RNN 之架構

Vanilla RNN

RNN Dataset

Dataset: X \(= \{ {X^{(n)}} \}_n \in \mathbb{R}^{N \times (D,K) \times T}\)

  • \({X^{(n)}} = \{(x^{(n,t)},y^{(n,t)}) \}_t\)
    a sequence, where the superscript \(n\) can be ommited for spimplicy
    很多的 x,y pair

    • \(n\) 代表第n個 data point
    • 資料點 x 維度是 \(D\)
    • 資料點 y 維度是 \(T\)
    • \(T\) 代表時間維度,稱為 horizon
  • \(T\) is call the horizon and may be different between \({x^{(n)}}\) and \({y^{(n)}}\)
    注意: x 跟 y 的 horizon 不一定會相同,可能某些時間點才會同時出現 x 跟 y,而某些時間點只有 x

  • \(y^{(t)}\) depends on \({x^{(1)}, x^{(2)}, ..., x^{(t)} }\)

RNN Architecture

  • Output \({a^{(L,t)}}\) depends on hidden activations
    \({a^{(k,t)}} = act(z^{(k,t)}) \\ = act(U^{(k)}a^{(k,t-1)}+W^{(k)}a^{(k-1,t)})\)
    k 代表第 k 層
    t 代表時間點
    對於第 k 層的神經元過 activation a() 函式數值的影響,來自於兩個東西:
    一個是上一個時間點同為第 k 層神經元所傳送過來的數值 + 這個時間點,前一層 (k-1) 層傳送過來的數值

  • p.s. 這裏的數學式省略沒寫 Bias 實際上還要加上 Bias 才完整

  • \(a{(\cdot,t)}\) summerizes \({x^{(t)}, x^{(t-1)}, ..., x^{(1)} }\)
    • Earlier points are less important

公式深入探討:
\({a^{(k,t)}} = act(z^{(k,t)}) \\ = act(U^{(k)}a^{(k,t-1)}+W^{(k)}a^{(k-1,t)})\)

  • U 跟 W 函數當中,並沒有時間的維度,因此 Weights are shared across time instances 不隨著時間改變,U 跟 W 訓練出來後,在所有時間點可以共用

  • Assumes that the "transition functions" are time invariant
    RNN 假設 transition of U, W 不會隨著時間改變

  • Our goal is to learn \(U^{(k)}\)'s and \(W^{(k)}\)'s for \(k=1,2,3,...,L\)

RNNs have Memory

RNN and be folded in time

右圖: 把所有的時間點都畫一份
左圖: 把右圖的表達畫成 fold 版本

從左圖 folding 的圖看,就可以觀察出,上一個時間點的 a 很明顯的需要先"記下來"放在 Memory 裡面,等待給下一個時間點來使用

RNN 的變形

從 Input Output 來看

例子:

  • One to Many -> Image Captioning
    input: 一張圖
    output: 多個文字來描述這張圖片

  • Many to One -> Sentiment Analysis
    input: 一個電影的 Review
    Output: 正評還是負評

    如果這個例子使用 word vector 單純去 encode 去做的話,可能會被 Reward wins 等字誤導為正面很多的評價,實際上這句是個諷刺的獎項,要從前後文來推敲意思!

  • Many to Many (Synced): Video Keyframe Tagging
    input: 影片
    output: 一系列的 tag 點出哪些時間點發球出去

  • Many to Many (Unsynced): Machine Translation
    input: 中文原文
    output: 英文翻譯

    中英文並非一對一的關係
    中文字必須要看到若干個字之後,才能翻譯出正確的一個英文單字
    這樣的案例又稱為sequence to sequence learning

Bidirectional RNNs

原本的 RNN
\({a^{(k,t)}} = act(U^{(k)}a^{(k,t-1)}+W^{(k)}a^{(k-1,t)})\)


第 k 層的除了看過去時間點傳來的參數,也看未來時間點一路傳過來的參數

以網球比賽影片為例: 我們可以多取一些獲勝球員的精彩畫面,來訓練 RNN
這樣的訓練之下的 Model 就可以來預測看哪個球員最後會贏!

Recursize RNNs

基本 RNN 的問題:
越早發生的時間點影響力越小,要離現在時間點越近的weight影響力才會越大,這樣的架構下,對於文意判讀會有問題

NLP 裡面的例子
Given movie review:

  • create a parse tree 來 parse sentence
  • define Neural Network on the tree


Tree 裡面的定義了字跟字之間的關係
U 跟 W 可以是 invariant 的:
在每一個 merged point 都可以是不變的,讓 machine 在每一個點都使用同樣一組 U 跟 W 來 merge 出新的 root
這樣的 RNN 裡面每一個 substructure 都是 recursively shared!

Select a repo