# RNN :::info ### 功能 RNN遞歸神經網路,可以使NN有短暫的記憶功能,輸入測資的順序會影響輸出的結果。 :::spoiler * 輸入順序影響輸出結果,對於語句分析之類具有時效性應用有幫助。 ![](https://i.imgur.com/3SOMeF6.png) ::: :::success ### 實作 * SimpleRNN 簡單的將Hidden Layer的輸出儲存到記憶體,下次運算時再加回輸入。 ![](https://i.imgur.com/xucad76.png) :::spoiler 原理 下圖中[1 1]為輸入,記憶體為[0 0],輸出為[1+1 1+1]=[2 2], 下次[1 1]為輸入,記憶體為[2 2],輸出為[1+1+2+2 1+1+2+2]=[6 6]。 ![](https://i.imgur.com/d7TIfWp.png) ::: :::spoiler bidirectional RNN 之前的RNN在做出判斷時並未完整看完句子,用bidirectional RNN可以確保做出判斷時已經看完整個句子。 ``` Ex. arrive in Taipei 判斷arrive時還沒有看到Taipei ``` ![](https://i.imgur.com/aYlwBaG.png) ::: * Long Short-Term Memory (LSTM) 使用LSTM Unit,搭配數個控制閘來控制記憶與遺忘,藉此達到較長的短期記憶。 ![](https://i.imgur.com/Cj1KyWA.png) :::spoiler 原理 4個閘控制輸入,1個閘輸出。 ![](https://i.imgur.com/dTjTTKC.png) sigmoid函數會將輸入映射到0~1,如果輸入過小,會完全關閉閥門,過大則會完全通過。 ![](https://i.imgur.com/4MZ3EV8.png) ::: 假設輸入為1個三維vector,此時會有4組weight和bios,將輸入乘上weight,加上bios,當作4個gate的輸入值。 初始的輸入為[3 1 0],此時Input Gate輸入為90,將會開啟,Forget Gate輸入為110,開啟,記憶變為3+1 * 0(原來的記憶) = 3,Output Gate輸入為-10,關閉,因此輸出是0。 ![](https://i.imgur.com/W66n52l.png) 從上圖可以觀察到: * 輸入weight為[1 0 0],代表輸入為$x_1$ * Input Gate 的bios為-10,代表平常輸入閥是關閉的,只有$x_2$帶正值時才會開啟。 * Forget Gate的bios為10,代表平常記憶會繼續保存,只有$x_2$帶負值才會遺忘。 * Output Gate的bios為-10,代表平常輸出為關閉,只有$x_3$帶正值時才會輸出。 * Attention-based model 藉由控制讀寫頭,讓模型具有讀寫特定記憶的功能,可以仿照人類大腦,依據問題去使用特定的記憶。 ![](https://i.imgur.com/Njxl7FJ.png) ::: :::warning ### 應用 * 語意分析 ![](https://i.imgur.com/NjQIrz2.png) * CTC語音辨識 : 辨識輸出不一定都是文字,延長音會輸出null。 ![](https://i.imgur.com/KdmMlTm.png) * Seq-to-Seq Encoder: 將模型最後一層輸出當作輸入,由另一個RNN產生出原始語句。此時模型目的為完整還原原始句子,Loss Function為輸入與輸出語句的差別。 ![](https://i.imgur.com/xMe3mns.png) * 應用 : 語言翻譯、語音辨識 (Encoder的部分不變,產生語意vector後再做不同用途。) ::: ###### tags: `ML2020`