---
# System prepended metadata

title: Recurrent Neural Network(RNN)

---

# Recurrent Neural Network(RNN)
#####  1.RNN概念說明
#####  2.RNN的應用
#####  3.LSTM簡介
#####  4.參考資料


---
## 一、RNN概念說明
RNN是循環神經網絡，為了對序列數據進行建模而產生的。文本，是字母和  詞彙的序列；語音，是音節的序列；影片，是圖像的序列；氣象觀測數據，股    票交易數據等等，也都是序列數據


![](https://i.imgur.com/cJkb6so.png)

RNN計算公式 :
U、V、W為初始權重
g(.)為優化函數可選擇sigmoid、relu等等
![](https://i.imgur.com/H7PuqKm.png)
![](https://i.imgur.com/DVlubkQ.png)


---

另外，依據 input 及 output 的數目，RNN 可以有很多的變化與應用：
1. 一對一(one to one)：固定長度的輸入(input)及輸出(output)，即一般  的 Neural Network 模型。

2. 一對多(one to many)：單一輸入、多個輸出，例如影像標題(Image Captioning)，輸入一個影像，希望偵測影像內多個物體，並一一給予標題，這稱之為『Sequence output』。

3. 多對一(many to one)：多個輸入、單一輸出，例如情緒分析(Sentiment Analysis)，輸入一大段話，判斷這段話是正面或負面的情緒表達，這稱之為『Sequence input』。

4. 多對多(many to many)：多個輸入、多個輸出，例如語言翻譯(Machine Translation)，輸入一段英文句子，翻譯成中文，這稱之為『Sequence input and sequence output 』。

5. 另一種多對多(many to many)：『同步』(Synchronize)的多個輸入、多個輸出，例如視訊分類(Video Classification)，輸入一段影片，希望為每一幀(Frame)產生一個標題，這稱之為『Synced sequence input and output』。

![](https://i.imgur.com/VneA3sM.png)


---



## 二、RNN的應用
1. 語言模型與生成語句:
   給定之前詞語的情況下我們希望產生出下一個詞語是什麼。語言模型的作用就    是讓我們可以衡量一個句子的可能性。
   
   EX : AI點寫天龍八部
   網址=> https://leemeng.tw/how-to-generate-interesting-text-with-tensorflow2-and-tensorflow-js.html

2. 機器翻譯:
   機器翻譯類似於語言模型，其輸入為需要翻譯的句子，輸出則是翻譯的目標語    言的句子。


3. 生成圖片描述:
   與CNN結合，RNN可以為無標籤的圖片生成描述，模型甚至可以排列好這些描述    成更加類似人類語言的形式。
   ![](https://i.imgur.com/kSJ5Rnm.png)


## 三、LSTM(長短期記憶網路)簡介
LSTM(Long Short Term Memory Network)為RNN的衍伸，為什麼需要LSTM?原因就在於RNN訓練上常常會有梯度爆炸或是消失的狀況發生，而LSTM正好可以解決這些問題。

![](https://i.imgur.com/286eBT2.png)
原先RNN結構圖


---

![](https://i.imgur.com/WRhcNgA.png)
LSTM內部結構圖


---
* 遺忘門 :是決定我們要從單元狀態中捨棄什麼信息。這一步由激活函數是sigmoid的神經層決定，我們稱之為。首先我們將和作為遺忘門的輸入，對於的每一個數字，遺忘門輸出一個[0,1]區間的數字，輸出1代表“完全保留”，輸出0代表“完全遺忘”。

* 輸入門 :是決定我們將要在單元狀態中存儲哪些新的信息。這有兩個部分。首先，激活函數為sigmoid的稱為“輸入門”的層決定我們將更新哪些值。接下來，激活函數為tanh的層創建一個新的候選值向量，，可以添加到單元狀態。下一步，我們將結合這兩部分來更新狀態。

* 輸出門 :需要決定輸出的內容。這個輸出將基於我們的單元狀態，但將是一個過濾版。首先，我們運行一個sigmoid層，決定我們要輸出單元狀態的哪些部分。然後，我們通過tanh函數（把值轉換為[-1,1]區間）把它的單元狀態與sigmoid門的輸出相乘，這樣我們只輸出我們決定的部分。


## 四、參考資料
* 動態圖理解RNN https://kknews.cc/zh-tw/tech/a4aee9x.html
* 李宏毅教授hackmd https://hackmd.io/@overkill8927/SyyCBk3Mr?type=view
* RNN & LSTM說明 https://www.itread01.com/content/1549269013.html
* 知乎 傳統RNN的缺點，LSTM結構解析 https://zhuanlan.zhihu.com/p/33113729
* 莫凡講解LSTM https://www.youtube.com/watch?v=Vdg5zlZAXnU