# RNN and LSTM >通常做分類問題時,我們都會利用CNN來幫助我們解決問題,但是當今天的問題與時間有關或是屬於序列化的問題時,利用CNN是無法幫我們解決的,而RNN正是解決此問題的方法,例如以前英文考試的克漏字填空,要如何判斷空格要填什麼單字,必須從上下文去判斷。但有時候你的腦容量無法一下子裝那麼多東西,你可能會看了後面忘記前面,而這就是RNN的缺點,所以為了解決此問題而衍生出LSTM。 --- ## RNN原理 ### 晚餐要吃什麼 為了理解 RNN 的運作原理,我們可以考慮一下「晚餐要吃什麼」這個問題。如果住在家裡的人應該很了解,媽媽煮的好像都是哪幾樣,常常還是會吃膩。假設我家晚餐就是披薩、壽司、鬆餅三種輪流,如下圖所示。  在這個model中,作為判斷的依據就是昨晚吃了什麼,如果昨天吃披薩,今天就會吃壽司;昨天吃壽司,今天吃鬆餅;昨天吃鬆餅,今天吃披薩。那如果有一天突然跟朋友出去吃大餐沒有在家裡吃,我是不是就無法預測媽媽今天會煮什麼晚餐,其實還是可以從幾天前的晚餐推測今天會吃什麼,只要先從更早之前推回昨天的晚餐,就能接著預測今天的晚餐,如下圖所示。  RNN可以透過下面第一及第二張示意圖來解釋,簡單來說就是每一層的output,都是下一層的input,而每一層的activation function都是tanh,其可將數值壓縮在1 ~ -1之間。而之所以使用tanh的原因是因為,RNN在不同時間點時參數是共想的,不加activation function,代表這些weight連乘,會越來越大,那麼weight中絕對值小於1的元素會在連乘趨近於0,絕對值大於1的會在連乘中變為無窮大,產生梯度消失及梯度爆炸的問題,這就是為什麼不使用Relu,sigmoid的原因。第三張圖中,虛線表示了今天的預測結果如何在明天被重新利用,成為明天的「昨日預測」。    參考文章中以寫童書為例,童書中的句子為Doug saw Jane., Jane saw Spot., Spot saw Doug.,在這例子中,RNN扮演著將書中句子正確排列,並完成一本童書。也就是說如果一開始是人名,那後面必須接saw,saw後面再接人名,依此類推。    但是有可能發生以下的問題: 這是因為RNN有著很短期的記憶,只會參考前一步的結果,它不會參考更早之前的資訊。  --- ## LSTM原理 以下是LSTM的示意圖,我們把它拆解成小部分做解釋。  LSTMs主要是透過圖片中的圈圈來做調控。下圖中最上面由左至右的水平線用來cell state,可以將它想像成是時間軸,將資訊從一個單元帶到下一個單元 ,比如說昨天吃壽司,前天吃披薩的「記憶」。但這個記憶是可以透過圈圈做調控的。  1. **第一步**: 透過sigmoid function可以選擇上一層的輸出帶進來的資訊($h_{t-1}$),以及這一層新增加的資訊($x_{t}$),有多少比例要被忘掉  2. **第二步**: 決定有多少新的資訊要儲存在cell state,這邊分成兩部分,第一部份是sigmoid function,作用跟第一步一樣,第二部份是tanh,決定有多少資訊要儲存在cell state。  接下來將更新cell state,也就是把儲存在cell state的資訊用來取代被忘記的資訊。  3. **第三步**: 最後,我們決定有多少資訊要被輸出。將$h_{t-1}$與$x_{t}$透過sigmoid function轉換,然後將上一個步驟產生的結果$C_{t}$,透過tanh的轉換,再將兩者相乘,來決定主要單元上要被輸出,用作明天預測的資料是什麼。  ## Recurrent Neural Networks (RNN) and Long Short-Term Memory (LSTM) {%youtube WCUNPb-5EYI %} ## 參考文獻 1. https://colah.github.io/posts/2015-08-Understanding-LSTMs/ 2. https://brohrer.mcknote.com/zh-Hant/how_machine_learning_works/how_rnns_lstm_work.html 3. https://medium.com/@tengyuanchang/%E6%B7%BA%E8%AB%87%E9%81%9E%E6%AD%B8%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF-rnn-%E8%88%87%E9%95%B7%E7%9F%AD%E6%9C%9F%E8%A8%98%E6%86%B6%E6%A8%A1%E5%9E%8B-lstm-300cbe5efcc3 4. https://medium.com/@baubibi/%E9%80%9F%E8%A8%98ai%E8%AA%B2%E7%A8%8B-%E6%B7%B1%E5%BA%A6%E5%AD%B8%E7%BF%92%E5%85%A5%E9%96%80-%E4%BA%8C-954b0e473d7f 5. https://segmentfault.com/a/1190000019687826 ###### tags: `ML`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up