iT邦幫忙

2022 iThome 鐵人賽

DAY 20
3
AI & Data

OH~ AI 原來如此,互助就此開始!系列 第 20

Day 19. 深度學習模型 - RNN(二)

  • 分享至 

  • xImage
  •  

昨天講解完 RNN 的輸入資料是怎麼來的,今天要來介紹 RNN 基本架構和 RNN 具體可以做些什麼。

RNN 之所以可以處理時間序列資料,在於會把過去(前一個單詞)的特徵也傳遞給下一個。一個傳一個帶有循環的網路,讓資料持續存在(有記憶性),所以叫循環神經網路

RNN 的基本架構

比方說 "the students opened their" (學生們打開他們的...)預測接下來會出現的單詞(書或筆電)。RNN 會將句子的每個單詞轉成詞向量當輸入,將隱藏層狀態傳給下一個詞。

一般神經網路 RNN
https://ithelp.ithome.com.tw/upload/images/20220925/201506228W2ljSNKV9.jpg https://ithelp.ithome.com.tw/upload/images/20220925/20150622onGKFjkUWY.jpg
輸入必須固定(以文章來說不太實際) 輸入可隨序列增加,參數是層層傳遞不會增加(很好)

ーー出處:CS224n: Natural Language Processing with Deep
Learning

實際上 RNN 的隱藏層內部長這樣:

隱藏層 n 隱藏層 n+1
上個隱藏層狀態+本層輸入=新的隱藏層狀態 新的隱藏層狀態傳給下一層

以自然語言處理為例,句子照著單詞順序分成好幾個時間步驟(timestep),每個時間步驟將該單詞轉為詞向量(one hot 向量 或 詞嵌入向量)作為輸入和上一層的結果結合後傳給下一層。激勵函數則是使用 tanh。


ーー 上述動畫出處均為:Illustrated Guide to LSTM’s and GRU’s

用數學式表示的話:
https://chart.googleapis.com/chart?cht=tx&chl=h_t%20%3D%20RNN%20(%20h_%7Bt-1%7D%20%2C%20x_t%20)%20%3D%20tanh%20(%20h_%7Bt-1%7D%20W_h%20%2B%20b_h%20%2B%20x_t%20W_x%20%2B%20b_x%20)
本層狀態=RNN(上層狀態,本層輸入)=tanh(上層狀態的權重和偏差+本層輸入的權重和偏差)

學習(參數調整)則是一樣做反向傳播,只是因為是順著時間軸反著做,所以叫隨著時間反向傳播(BPTT,Backpropagation Through Time)。

https://ithelp.ithome.com.tw/upload/images/20220925/20150622AnxE7RbXbR.jpg
ーーBPTT,出處:CS224n: Natural Language Processing with Deep
Learning

RNN 可以做什麼

一般的神經網路以及CNN,輸入和輸出的大小是固定的,而 RNN 的優勢在於可以透過序列做一對多,多對一,或者是多對多的應用,
https://ithelp.ithome.com.tw/upload/images/20220925/20150622iFlEGNLQXp.jpg
ーー 出處:The Unreasonable Effectiveness of Recurrent Neural Networks

  • 一對一
    例:圖像分類。
    固定大小的輸入到固定大小的輸出。也就是一般的神經網路及 CNN。
  • 一對多
    例:圖像摘要
    透過一張圖像轉換成多個單詞組成的句子。
    https://ithelp.ithome.com.tw/upload/images/20220925/20150622l3vYNaFdQr.jpg
    ーー 一個年輕男孩在打籃球。出處:keras-image-captioning
  • 多對一
    例:情感分析
    透過一段文字判斷是正面或負面的情緒。
    https://ithelp.ithome.com.tw/upload/images/20220925/20150622JwzWFeMvMT.jpg
    例:文本分類
    透過一段文字判斷郵件是垃圾郵件或一般郵件。
  • 多對多
    例:機器翻譯
    透過一段英文句子轉成中文句子。
    "Roger Federer Retired From Tennis"→「羅傑·費德勒從網球退役」
  • 同步多對多
    例:影片分類
    透過一段影片,分辨當下的每個時間點是在做伏地挺身,伸展還是瑜珈等動作。

    ーー 出處:TenserFlow - 影片分類

但是這個基本的 RNN 也有幾個需要解決的問題:

  • 梯度消失
    隨著時間拉長,反向傳遞越往前面梯度會越來越小,越前面的時間步驟(越早的資料)無法作有效的學習修正,也就是說 RNN 只能短期記憶,太久遠之前的資料無法記住。

  • 輸入權重衝突 (input weight conflict)
    一般的神經網路中,不重要的輸入,權重會變小,重要的輸入,權重會變大。但是 RNN 的場合,這個輸入現在不重要,但是將來很重要,同時有著權重應該要變小還是要變大的矛盾存在(輸入權重衝突)。而相對的,這個輸出現在不重要,但是將來很重要這種矛盾叫做輸出權重衝突(output weight conflict)

一般神經網路使用激勵函數 ReLU 來取代 sigmoid 來改善梯度消失,而 RNN 不替換激勵函數而是使用了改善後的模型 LSTMGRU 同時解決上述兩個問題。

它們共通的概念是,忘記不重要的資料,只保留重要訊息來做預測。
比如說下面的文字,只記憶重要的評語「令人讚嘆!」(Amazing!),「肯定再次購買」(buying again),進而推論這是一個好產品。

ーー 出處:Illustrated Guide to LSTM’s and GRU’s: A step by step explanation

長短期記憶(LSTM,Long Short-Term Memory)

RNN LSTM
https://ithelp.ithome.com.tw/upload/images/20220925/20150622Yr2viB9Gzf.png https://ithelp.ithome.com.tw/upload/images/20220925/20150622IEQbAjBJAZ.png

LSTM 有以下兩個構成:

  • 細胞狀態(Cell state)
    一條新的長期記憶線,可以想像成一條傳送帶,將相關訊息當成包裹搬送到其他或近或遠的地方方便取用。
    https://ithelp.ithome.com.tw/upload/images/20220925/20150622oOc4kL8PdY.png
    解決只能短期記憶的問題。步驟如下:
    1. 乘上遺忘門的結果
      保留細胞狀態或捨棄。
    2. 加上輸入門的結果
      更新細胞狀態,決定是否將候選細胞(cell candidate)加到長期記憶。
    3. 傳給下一層的細胞狀態以及輸出門
  • 門(Gate)
    • 遺忘門(Forget gate)
      決定資料保留或丟棄
      https://ithelp.ithome.com.tw/upload/images/20220925/20150622fESW18cFMm.png
      上層輸出加上本層輸入透過 sigmoid 激勵函數將值保持在0~1,傳遞給細胞狀態,接近0代表可忘記,接近1代表要保留。
    • 輸入門(Input gate)
      更新細胞狀態
      https://ithelp.ithome.com.tw/upload/images/20220925/20150622OQUXcn8BXq.png
      上層輸出加上本層輸入透過 tanh 和 sigmoid 做相乘,tanh(-1~1)做網路調節,sigmoid(0~1)決定那些值要保留。因為可以在必要的時機將必要的輸入資料作保留或捨棄,可改善輸入權重衝突
    • 輸出門(Output gate):
      決定隱藏層輸出
      https://ithelp.ithome.com.tw/upload/images/20220925/20150622r4eTZUkSPH.png
      ーー 上述圖片出處均為:Understanding-LSTM
      上層輸出加上本層輸入的 sigmoid 結果乘上新的細胞狀態的 tanh 結果決定隱藏層狀態攜帶哪些訊息到下一層。 同樣地可改善輸出權重衝突

門控循環單元(GRU,Gated Recurrent Unit)

簡化版 LSTM。不使用細胞狀態,而採用了下列兩個門來取代輸入門,輸出門,忘記門。

  • 更新門(Update gate)
    取代遺忘門和輸入門。決定丟棄和新增哪些訊息。
  • 重置門(Reset gate)
    決定丟棄哪些過去的訊息。

https://ithelp.ithome.com.tw/upload/images/20220925/20150622c5fG1HDHcQ.jpg
ーー 出處:Illustrated Guide to LSTM’s and GRU’s
比起 LSTM 因為參數較少所以計算較快,但是長期記憶性則是 LSTM 較好。

雙方向 RNN (Bidirectional RNN)

組合兩個 RNN,一個用過去的資料作預測,一個反向用未來的資料作預測。合併雙方的隱藏狀態當作當前的狀態,透過雙方向的預測可以讓預測準度提高。

https://ithelp.ithome.com.tw/upload/images/20220925/20150622pACxpZHz1a.jpg
ーー出處:CS224n: Natural Language Processing with Deep
Learning

舉例來說:

我不喜歡你,我愛死你了。

如果照著一般的順序做預測,可能心都要碎了,但是搭配著反過來的預測結合上下文,就會知道重點其實是愛你的。

在程式使用上只需要把 RNN 模型的 Bidirectional 設成 True 就可以了。

編碼器-解碼器(Encoder-Decoder)

目前介紹的 RNN,預測都是單一個輸出,想要預測連續的輸出可以使用 Seq2Seq(Sequence to Sequence)。例如英文句子預測出中文的句子。

Seq2Seq 也是通過組合兩個 RNN,一個當編碼器,一個當解碼器來支持可變數量的輸出。

  • 編碼器
    對輸入數據進行編碼,輸出一個固定長度的向量。
  • 解碼器
    將固定長度的向量進行解碼。因為輸出也是時間序列資料,所以解碼的預測值會傳給下一個當輸入。

https://ithelp.ithome.com.tw/upload/images/20220925/20150622EXk3Ii70ge.jpg
ーー Starwars 經典台詞。EOS = End of sentence

另外,一般說的編碼器-解碼器,不一定都要由 RNN 所組成。例如在圖像摘要中,編碼器是處理輸入圖像的 CNN,而解碼器是生成語言描述(自然語言處理)的 RNN。

Google 翻譯從2016年起捨棄了以往的統計式機器翻譯(SMT)改採用神經網路的神經機器翻譯(NMT,Neural Machine Translation)架構,大幅提升了翻譯的準確度。最初版就是使用 Seq2Seq。

補充資料

立即複習

  1. RNN 的輸入可以隨著序列增加,那麼參數也會隨著增加嗎?
  2. 請列舉3個 RNN 的應用。
  3. RNN 因為短期記憶會造成什麼消失?
  4. 追加了長期記憶的模型叫做?
  5. 圖像摘要的編碼器是採用什麼模型,解碼器採用了什麼模型?

參考資料


上一篇
Day 18. 深度學習模型 - RNN(一)
下一篇
Day 20. 深度學習模型 - Attention 和 Transformer
系列文
OH~ AI 原來如此,互助就此開始!31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言