之前已經介紹過關於 Recurrent Neural Nnetwork 與 Long Short-Trem Memory 的網絡結構與參數求解算法( 遞歸神經網絡(Recurrent Neural Networks,RNN) ,LSTM網絡(Long Short-Term Memory )),本文將列舉一些 RNN 與 LSTM 的應用, RNN (LSTM)的樣本可以是如下形式的:1)輸入輸出均為序列;2)輸入為序列,輸出為樣本標簽;3)輸入單個樣本,輸出為序列。本文將列舉一些 RNN(LSTM) 的應用,了解 RNN(LSTM) 是如何應用在各種機器學習任務中的,在講解具體任務之前,先看一下一些通用的 RNN(LSTM) 的結構,下圖列舉的這些結構都有描述詳細的論文:
圖中藍色節點為輸入,紅色為輸出,綠色為 hidden node 或者 memory block ,(a)描述的是傳統的 MLP 網絡,即不考慮數據的時序性,認為數據是獨立的;(b)將輸入序列映射為一個定長向量(分類標簽),可用於文本、視頻分類;(c)輸入為單個數據點,輸出為序列數據,典型的代表為 Image Captioning;(d)這種是一種結構 sequence-to-sequence 的任務,常被用於機器翻譯,兩個序列長度不一定相等;(e)這種結構會得到一個文本的生成模型,每詞都會預測下一時刻的字符。
Machine Translation
機器翻譯長期以來是 NLP任務 的一個難題,首先難點就在於文本表示方法,在 NLP 任務中,若處理詞語級的序列, 當 RNN 的輸出層為 $softmax$ 時,每個時刻輸出會產生向量 $y^t \in \mathbb{R}^K $ , $K$ 即為詞表的大小,$y^t$ 向量中的第 $k$ 維代表生成第 $k$ 個詞語的概率;每個時刻的輸入也均為一個詞語,以前經常用 one-hot (Bag-of-Word)的方法表示,現在比較常用的是 distribute representation(Glove ,word2vec)。若 RNN 處理字符級序列,這時通常采用的是 ont-hot 的方式。通常文本分類方法采用 one-hot 的方式(不考慮詞序)即可取得很好的效果,但是詞序在文本翻譯中很重要,比如“Scientist killed by raging virus”和 “Virus killed by raging scientist”的 ont-hot 表示結果完全相同,所以機器翻譯非常有必要考慮詞序。Sutskever et al. [2014] 提出一個兩層 LSTM 結構的機器翻譯模型,在將英語翻譯為法語的任務上表現出色,第一層 LSTM 用來對輸入英語語句(phrase)編碼,第二層用來解碼為法語語句(phrase),模型如下圖所示:
圖中 LSTM1 為 encoding LSTM, LSTM2 為 decoding LSTM ,藍色與紫色節節點為輸入,粉紅節點為輸出:
1)對源語句 $x^t$ 設置結束標志(實現時可任意設定不出現在語句中的符號),每次將一個詞語送入 encoding LSTM中,且每次網絡均不輸出。
2)當到達 $x^t$ 的末尾(圖中的<EOS>),意味着目標語句將開始被送往 decoding LSTM,如圖中的<EOS>對應 “j’al”,且 decoding LSTM 將 encoding LSTM 的輸出作為輸入(圖中 LSTM1 $\rightarrow $ LSTM2 交接處),decoding LSTM 在每個時刻的輸出為與詞表大小相同的 $softmax$ 層,分量代表每個詞語的概率。
3)推斷時,在每個時刻通過 beam search 來找到最有可能的詞語。直到輸出達到<EOS>為結束狀態。
訓練階段,將輸入語句扔進 encoder ,翻譯語句被扔進 decoder ,損失從 decoder 一直回傳到最開始,整個模型通過極大化訓練集中標簽樣本的概率,推斷時,運行一個從左到右的 beam search 算法來找到最優序列,原文中作者用 SGD 來訓練,每跑完一次 epoch ,將學習速率減半,跑完 5 個 epoch, BLEU 值(用來度量模型的好壞)達到 start –of-the-art ,模型本身通過 8 個 GPU 跑了 10 天訓練出來的 - -!,每個 LSTM memory block 含有 1000 個 memory cell,英語詞表為 160,000 ,法語詞表為 80,000 ,權重初始化為 (-0.08,0.08) 的均勻分布。
Image Captioning
最近一些工作是關於用自然語言描述一幅圖像([Vinyals et al., 2015, Karpathy and Fei-Fei,2014, Mao et al., 2014].)。
Image Captioning 是一種監督學習任務,輸入數據為圖像 $x$ ,輸出數據為描述圖像的語句 $y$ 。Vinyals et al. [2015]的做法類似於剛才的 Machine Translation ,只不過將原來的 encoder 換成 Convolution Neural Network ,decoder 還是 LSTM 層,Karpathy and Fei-Fei [2014] 使用一種帶有 attention 機制的雙向 CNN 來 encoding 圖像,且用標准的 RNN 去解碼對圖像的說明,使用的是 word2vec 產生的詞向量。該模型即產生整個圖片的 captioning ,並且還會產生圖像區域與文本片段的對應性。
對印圖片進行推斷時,過程類似於 Machine Translation ,每次解碼一個單詞,得到最優詞語作為下一時刻的輸入,知道到達<EOS>.Karpathy and Fei-Fei 分別在三個數據集上進行試驗: [Flickr8K, Flickr30K, and COCO, 大小分別為50MB (8000 images), 200MB (30,000 images), 與 750MB (328,000 images)],且 encoder 用的 CNN 是在 Image Net 上訓練的。
其他的一些任務 比如 Handwriting recognition,在這個任務上,bidirectional LSTM 達到了 state-of-the-art 的效果, HMM 的准去率為 70.1% , 而 bidirectional LSTM 達到了 81.5% 。且這幾年人們還有把以上成功的方法與應用到 unsupervised video encoding [Srivastava et al., 2015] 與 video captioning [Venugopalan et al., 2015] 甚至 program execution [Zaremba and Sutskever, 2014] ,video captioning 中作者用 CNN 得到圖片的幀的特征 然后扔到 LSTM 里去編碼,解碼時生成對應的詞語。