文科友善-誰都能認識聊天機器人

王柏鈞
5 min readFeb 21, 2020

--

RNN學習歷程part4: sequence to sequence

#機器學習百日馬拉松13

文章類型:知識科普

今天的RNN分享是抱著可以讓文科生也能覺得原來如此的心態編寫的,所以稱為文科友善單元,大致上應該可以達到對RNN的領域的大概認知,並且希望能夠讓你知道聊天機器人背後的原理。

目錄:

1. RNN的緣由
2. RNN的缺陷
3. RNN的進化- LSTM( Long short-term memory)
4. LSTM的四大應用
5. 聊天機器人的背後 sequence to sequence

RNN的緣由

RNN,也就是遞迴神經網路( Recurrent Neural Network, RNN),是為了讓傳統NN(Neural Network)能夠處理與時間序列有關的問題而存在的,例如聊天對答或是文字翻譯。這種問題的答案與前後有所關連,但傳統的NN卻不能利用到這種答案前後的相關性,非常可惜。

於是RNN就誕生了。

NN是由許多神經元組成的神經網路,RNN也相同。但RNN的神經元具有記憶單元(hidden state),記憶單元能夠記住前一次給出的答案,而RNN的神經元每一次的輸出都是來自於記憶單元和神經元的共同計算。

記憶單元(hidden state)就是RNN最大的特點。

圖源: https://www.twblogs.net/a/5b90f57f2b71772002d13676

RNN的缺陷

我們的神經元在擁有記憶後,看似美好卻會遇到一個問題。很難對RNN進行訓練。

RNN是用來接收序列資料的,所以我們看似樸素的一個RNN神經元,其實可以展開成一成串的神經元連結,如下所示:

左邊那一個神經元,就相當於右邊神經元序列的組合

在序列中最後一筆資料也輸入後,RNN神經元會產生一個輸出。而我們的訓練就是在找這個輸出跟序列中每一個記憶單元的關係。

因為序列很長,所以如果我們想要知道輸出與序列中第一筆輸入的關係,由於距離太遠,我們會遇到一種深度學習的現象:梯度消失,也就是斜率為0。

找關係的過程就像從山頂滑雪到山腳下,斜率為0相當於你卡在半山腰的一個平面上,你就無法繼續前進了。

RNN的進化- LSTM( Long short-term memory)

在這種情況下,LSTM誕生了,LSTM的記憶單元不在是一個單純的記憶單元,這個記憶單元就像一個小房間,裡面裝了稱為hidden state的資訊,房間有三道門,分別是input gate、output gate、forget gate。

這三道門的目的簡而言之,就是找到重點,把不重要的遺忘。它可以讓本來很遠的距離因為忽略了中間不重要的部分而大幅的縮短距離。這讓我們可以相當容易的找到輸出與序列中第一筆輸入的關係。

LSTM的四大應用

現在基本款的RNN已經很少人在使用了,最常見的就是上面介紹的LSTM,那LSTM可以做什麼應用呢?

常見的應用包括:

  1. 聊天機器人 (能對不特定的輸入訊息產生反應)
  2. 文本翻譯 (學會不同語言之間的轉換)
  3. 文章總結 (找出文章中的重點)
  4. 語意辨識 (用來理解對話中的前後文)

這些應用的原理是一種基於LSTM開發的人工智慧模型架構:sequence to sequence。

聊天機器人的背後 sequence to sequence

聊天機器人是基於sequence to sequence開發的應用,在原理上sequence to sequence這個人工智慧模型架構同時包含兩個模型,編碼器和解碼器。

以聊天機器人為例:我們把使用者的一句話,輸入編碼器,編碼器則會把基於這句話產生的記憶單元(hidden state)傳遞給解碼器。

解碼器得到記憶單元後,我們必須給解碼器一個起始字元,然後解碼器根據這個記憶單元與起始字元來產生下一個字。
而下一個字則會與新的記憶單元(原來的記憶單元因為起始字元而產生改變)共同運算,再產出下一個字,以此類推,直到最後產生結束字元,解碼器就會停止運作。

sequence to sequence的架構如下所示。

圖源: https://i1.kknews.cc/SIG=3vmd2is/5o5900000sq7r3q75n0o.jpg

事實上,在這個領域也有許多sequence to sequence的變種,不過邏輯大概與我們所介紹的類似,就不多做說明。也許改日再來討論。

總結:

今天的分享可以說是RNN的全面認識的重製版,在深度和內容上都有調整,其實很想知道文科生或是完全無基礎的理科生的反應究竟如何,如果可以留言或私訊我,我會非常感謝的。

課程評鑑問答:

  1. RNN的神經元跟傳統NN的神經元有什麼不一樣?
  2. 當訓練的時候斜率(梯度)趨近於零,會發生什麼現象導致無法繼續訓練?
  3. sequence to sequence的模型會因為起始自元而開始輸出,會輸出多少字才會停止?

--

--