owned this note
owned this note
Published
Linked with GitHub
# 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 才完整
![](https://i.imgur.com/tCyDMX8.png)
- $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 版本
![](https://i.imgur.com/orvtqE7.png)
從左圖 folding 的圖看,就可以觀察出,上一個時間點的 a 很明顯的需要先"記下來"放在 Memory 裡面,等待給下一個時間點來使用
## RNN 的變形
### 從 Input Output 來看
![](https://i.imgur.com/IHp2BJw.png)
例子:
- One to Many -> Image Captioning
input: 一張圖
output: 多個文字來描述這張圖片
![](https://i.imgur.com/Zyoiitf.png)
- Many to One -> **Sentiment Analysis**
input: 一個電影的 Review
Output: 正評還是負評
![](https://i.imgur.com/8jY32aX.png)
如果這個例子使用 word vector 單純去 encode 去做的話,可能會被 Reward wins 等字誤導為正面很多的評價,實際上這句是個諷刺的獎項,要從前後文來推敲意思!
- Many to Many (Synced): Video Keyframe Tagging
input: 影片
output: 一系列的 tag 點出哪些時間點發球出去
![](https://i.imgur.com/I0KkfCS.png)
- Many to Many (Unsynced): Machine Translation
input: 中文原文
output: 英文翻譯
![](https://i.imgur.com/axA3tg2.png)
中英文並非一對一的關係
中文字必須要看到若干個字之後,才能翻譯出正確的一個英文單字
這樣的案例又稱為==sequence to sequence== learning
### Bidirectional RNNs
原本的 RNN
${a^{(k,t)}} = act(U^{(k)}a^{(k,t-1)}+W^{(k)}a^{(k-1,t)})$
![](https://i.imgur.com/zw0gdLP.png)
第 k 層的除了看過去時間點傳來的參數,也看未來時間點一路傳過來的參數
以網球比賽影片為例: 我們可以多取一些獲勝球員的精彩畫面,來訓練 RNN
這樣的訓練之下的 Model 就可以來預測看哪個球員最後會贏!
### Recursize RNNs
基本 RNN 的問題:
越早發生的時間點影響力越小,要離現在時間點越近的weight影響力才會越大,這樣的架構下,對於文意判讀會有問題
NLP 裡面的例子
Given movie review:
- create a parse tree 來 parse sentence
- define Neural Network on the tree
![](https://i.imgur.com/80NmqSk.png)
Tree 裡面的定義了字跟字之間的關係
U 跟 W 可以是 invariant 的:
在每一個 merged point 都可以是不變的,讓 machine 在每一個點都使用同樣一組 U 跟 W 來 merge 出新的 root
這樣的 RNN 裡面每一個 substructure 都是 recursively shared!