# 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
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.