1. 程式人生 > >深度學習中的序列模型演變及學習筆記(含RNN/LSTM/GRU/Seq2Seq/Attention機制)

深度學習中的序列模型演變及學習筆記(含RNN/LSTM/GRU/Seq2Seq/Attention機制)

【說在前面】本人部落格新手一枚,象牙塔的老白,職業場的小白。以下內容僅為個人見解,歡迎批評指正,不喜勿噴![認真看圖][認真看圖]

【補充說明】深度學習中的序列模型已經廣泛應用於自然語言處理(例如機器翻譯等)、語音識別、序列生成、序列分析等眾多領域!

【再說一句】本文主要介紹深度學習中序列模型的演變路徑,和往常一樣,不會詳細介紹各演算法的具體實現,望理解!

一、迴圈神經網路RNN

1. RNN標準結構

傳統神經網路的前一個輸入和後一個輸入是完全沒有關係的,不能處理序列資訊(即前一個輸入和後一個輸入是有關係的)。

迴圈神經網路RNN解決了以上問題,整體結構如圖所示:

2. RNN系列結構

多對一:例如情感分析,需要多個時間步長的輸入,但是隻需要單個輸出(即實現分類)。整體結構如圖所示:

一對多:例如音樂生成,只需要單個輸入(即輸入類別),但是需要輸出整個序列。整體結構如圖所示:

多對多:例如實時分類,輸入序列與輸出序列的長度是一樣的。整體結構如圖所示:

多對多:例如機器翻譯,輸入序列與輸出序列的長度是不一樣的。整體結構如圖所示:

二、長短期記憶網路LSTM

LSTM是RNN的一種變體,RNN由於梯度消失只有短期記憶,而LSTM網路通過精妙的門控制,一定程度上緩解了梯度消失的問題。

在標準RNN中,神經網路模組只有一個非常簡單的結構,例如一個tanh層。整體結構如圖所示:

 

而LSTM得神經網路模組具有不同的結構,LSTM包含遺忘門、輸入門和輸出門,增加了非線性的相互作用。整體結構如圖所示:

 

三、GRU

GRU是LSTM的一種變體,也是為了解決梯度消失(即長期記憶問題)而提出來的。相較於LSTM,GRU的網路結構更加簡單,且效果很好。

四、RNN/LSTM/GRU的變體結構

1. 雙向迴圈神經網路

例如命名實體識別:判斷句子中Teddy是否是人名,如果只從前面幾個詞是無法得知Teddy是否是人名,如果能有後面的資訊就很好判斷了。

雙向迴圈神經網路中的網路單元可以是RNN、LSTM和GRU,均適用這種變體結構。

2. 深層迴圈神經網路

顧名思義,就是多個迴圈神經網路的堆疊,迴圈神經網路可以採用RNN、LSTM和GRU,均適用這種變體結構。

 

3. Seq2Seq架構:非常火熱

又叫Encoder-Decoder模型,適用於輸入與輸出個數不一樣相等的情況(即多對多的迴圈神經網路,適用於機器翻譯等場景)。

其中,Encoder編碼器和Decoder解碼器可以使用RNN、LSTM和GRU,均適用這種變體結構。

同時,這種結構也可以與雙向、深層的變體結構同時使用,不衝突的。

 

這裡多提一句,例如給影象新增描述這樣的應用場景,圖中對應的描述為“一隻貓站在椅子上”,同樣可以採用Encoder-Decoder模型。

 五、注意力機制

1. Seq2Seq + Attention機制介紹

需要注意到,LSTM、GRU、雙向變體結構、深層變體結構和Seq2Seq變體結構,只能說一定程度上緩解了梯度消失問題。

提出問題:在做機器翻譯時,專家學者們發現,在Seq2Seq結構中,Encoder把所有的輸入序列都編碼成一個統一的語義向量context,然後再由Decoder解碼。其中,context自然也就成了限制模型效能的瓶頸,當要翻譯的句子較長時,一個 context 可能存不下那麼多資訊。同時,只使用編碼器的最後一個隱藏層狀態,似乎不是很合理。

解決方案:因此,引入了Attention機制(將有限的認知資源集中到最重要的地方)。在生成 Target 序列的每個詞時,用到的中間語義向量 context 是 Source 序列通過Encoder的隱藏層的加權和,而不是隻用Encoder最後一個時刻的輸出作為context,這樣就能保證在解碼不同詞的時候,Source 序列對現在解碼詞的貢獻是不一樣的。例如,Decoder 在解碼"machine"時,"機"和"器"提供的權重要更大一些,同樣,在解碼"learning"時,"學"和"習"提供的權重相應的會更大一些。

實現步驟:(1)衡量編碼中第 j 階段的隱含層狀態和解碼時第 i 階段的相關性(有很多種打分方式,這裡不細講);(2)通過相關性的打分為編碼中的不同階段分配不同的權重;(3)解碼中第 i 階段輸入的語義向量context就來自於編碼中不同階段的隱含層狀態的加權和。

 

補充說明一下,衡量相關性的打分方式主要包括以下幾種,具體不展開了:

2. 層次注意力機制Hierarchical Attention

能夠反映文件的層次結構。模型在單詞和句子級別分別設計了兩個注意力機制,這樣做能夠在構建文件表示時區別地對待這些內容。

 

3. 自注意力機制Self-Attention:只有一個Seq

是關聯單個序列中不同位置的注意力機制,從而計算序列的互動表示。已被證明在很多領域十分有效,例如機器閱讀、影象描述生成等。

以機器閱讀為例,當前單詞為紅色,藍色陰影的大小表示啟用程度,自注意力機制使得能夠學習當前單詞和句子前一部分詞之間的相關性:

補充說明,以影象描述生成為例,注意力權重的視覺化清楚地表明瞭模型關注的影象的哪些區域以便輸出某個單詞:

4. Fairseq:基於卷積神經網路的Seq2Seq + Attention機制

Facebook人工智慧實驗室提出基於卷積神經網路的Seq2Seq架構,將RNN替換為帶有門控單元的CNN(相較於RNN,CNN工作不依賴於上一時間步的結果,所以可以做到最大程度的平行計算,提升訓練速度),提升效果的同時大幅加快了模型訓練速度。

5. Transformer:使用self-attention代替原有的RNN及CNN

以上Attention model雖然解決了輸入seq僅有一個context vector的缺點,但仍存在一些問題:

  • context vector計算的是輸入seq、目標seq間的關聯,卻忽略了輸入seq中文字間的關聯、目標seq中文字間的關聯性。
  • Attention model中使用的RNN無法平行化處理,導致訓練時間長,使用的CNN實際上是透過大量的layer去解決區域性資訊的問題。

Google提出一種叫做”transformer”的模型,透過self-attention、multi-head的概念去解決上述缺點,完全捨棄了RNN、CNN的構架。

值得一提的是,Google後續提出了BERT模型,在11個任務中取得了最好的效果,是深度學習在nlp領域又一個里程碑式的工作。

6. Memory-based Attention

在 NLP 的一些任務上,比如問答匹配任務,答案往往與問題間接相關。因此,基本的注意力技術就顯得很無力了,這時候就體現了Memory-based Attention的強大之處。例如可以通過迭代記憶體更新(也稱為多跳)來模擬時間推理過程,以逐步引導注意到答案的正確位置。

7. Soft/Hard Attention

簡單說就是Soft Attention打分之後分配的權重取值在0到1之間,而Hard Attention取值為0或者1。

8. Global/Local Attention

這個也很好理解,就是採用全域性或者區域性的注意力機制。

六、應用

1. 自然語言處理

例如機器翻譯、問答系統、文字分類、情緒分析、命名實體識別、創作樂曲等。

2. 影象處理

例如多媒體描述、區域性影象補全、通過低解析度的影象還原高解析度影象等。

3. 智慧推薦

例如用於使用者行為分析,即將注意力權重分配給使用者的互動專案,以更有效地捕捉長期和短期的興趣。

4. 其他

本文參考大佬:https://github.com/yuquanle/Attention-Mechanisms-paper/blob/master/Attention-mechanisms-paper.md

 

如果你對智慧推薦感興趣,歡迎先瀏覽我的另幾篇隨筆:智慧推薦演算法演變及學習筆記

如果您對資料探勘感興趣,歡迎瀏覽我的另幾篇部落格:資料探勘比賽/專案全流程介紹

如果您對人工智慧演算法感興趣,歡迎瀏覽我的另一篇部落格:人工智慧新手入門學習路線和學習資源合集(含AI綜述/python/機器學習/深度學習/tensorflow)

如果你是計算機專業的應屆畢業生,歡迎瀏覽我的另外一篇部落格:如果你是一個計算機領域的應屆生,你如何準備求職面試?

如果你是計算機專業的本科生,歡迎瀏覽我的另外一篇部落格:如果你是一個計算機領域的本科生,你可以選擇學習什麼?

如果你是計算機專業的研究生,歡迎瀏覽我的另外一篇部落格:如果你是一個計算機領域的研究生,你可以選擇學習什麼?

如果你對金融科技感興趣,歡迎瀏覽我的另一篇部落格:如果你想了解金融科技,不妨先了解金融科技有哪些可能?

之後博主將持續分享各大演算法的學習思路和學習筆記:hello world: 我的部落格寫作