【說在前面】本人博客新手一枚,象牙塔的老白,職業場的小白。如下內容僅爲我的看法,歡迎批評指正,不喜勿噴![認真看圖][認真看圖]html
【補充說明】深度學習中的序列模型已經普遍應用於天然語言處理(例如機器翻譯等)、語音識別、序列生成、序列分析等衆多領域!python
【再說一句】本文主要介紹深度學習中序列模型的演變路徑,和往常同樣,不會詳細介紹各算法的具體實現,望理解!git
傳統神經網絡的前一個輸入和後一個輸入是徹底沒有關係的,不能處理序列信息(即前一個輸入和後一個輸入是有關係的)。github
循環神經網絡RNN解決了以上問題,總體結構如圖所示:面試
多對一:例如情感分析,須要多個時間步長的輸入,可是隻須要單個輸出(即實現分類)。總體結構如圖所示:算法
一對多:例如音樂生成,只須要單個輸入(即輸入類別),可是須要輸出整個序列。總體結構如圖所示:網絡
多對多:例如實時分類,輸入序列與輸出序列的長度是同樣的。總體結構如圖所示:架構
多對多:例如機器翻譯,輸入序列與輸出序列的長度是不同的。總體結構如圖所示:機器學習
LSTM是RNN的一種變體,RNN因爲梯度消失只有短時間記憶,而LSTM網絡經過精妙的門控制,必定程度上緩解了梯度消失的問題。post
GRU是LSTM的一種變體,也是爲了解決梯度消失(即長期記憶問題)而提出來的。相較於LSTM,GRU的網絡結構更加簡單,且效果很好。
例如命名實體識別:判斷句子中Teddy是不是人名,若是隻從前面幾個詞是沒法得知Teddy是不是人名,若是能有後面的信息就很好判斷了。
雙向循環神經網絡中的網絡單元能夠是RNN、LSTM和GRU,均適用這種變體結構。
顧名思義,就是多個循環神經網絡的堆疊,循環神經網絡能夠採用RNN、LSTM和GRU,均適用這種變體結構。
又叫Encoder-Decoder模型,適用於輸入與輸出個數不同相等的狀況(即多對多的循環神經網絡,適用於機器翻譯等場景)。
其中,Encoder編碼器和Decoder解碼器可使用RNN、LSTM和GRU,均適用這種變體結構。
同時,這種結構也能夠與雙向、深層的變體結構同時使用,不衝突的。
這裏多提一句,例如給圖像添加描述這樣的應用場景,圖中對應的描述爲「一隻貓站在椅子上」,一樣能夠採用Encoder-Decoder模型。
須要注意到,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就來自於編碼中不一樣階段的隱含層狀態的加權和。
補充說明一下,衡量相關性的打分方式主要包括如下幾種,具體不展開了:
可以反映文檔的層次結構。模型在單詞和句子級別分別設計了兩個注意力機制,這樣作可以在構建文檔表示時區別地對待這些內容。
是關聯單個序列中不一樣位置的注意力機制,從而計算序列的交互表示。已被證實在不少領域十分有效,例如機器閱讀、圖像描述生成等。
以機器閱讀爲例,當前單詞爲紅色,藍色陰影的大小表示激活程度,自注意力機制使得可以學習當前單詞和句子前一部分詞之間的相關性:
補充說明,以圖像描述生成爲例,注意力權重的可視化清楚地代表了模型關注的圖像的哪些區域以便輸出某個單詞:
Facebook人工智能實驗室提出基於卷積神經網絡的Seq2Seq架構,將RNN替換爲帶有門控單元的CNN(相較於RNN,CNN工做不依賴於上一時間步的結果,因此能夠作到最大程度的並行計算,提高訓練速度),提高效果的同時大幅加快了模型訓練速度。
以上Attention model雖然解決了輸入seq僅有一個context vector的缺點,但仍存在一些問題:
Google提出一種叫作」transformer」的模型,透過self-attention、multi-head的概念去解決上述缺點,徹底捨棄了RNN、CNN的構架。
值得一提的是,Google後續提出了BERT模型,在11個任務中取得了最好的效果,是深度學習在nlp領域又一個里程碑式的工做。
在 NLP 的一些任務上,好比問答匹配任務,答案每每與問題間接相關。所以,基本的注意力技術就顯得很無力了,這時候就體現了Memory-based Attention的強大之處。例如能夠經過迭代內存更新(也稱爲多跳)來模擬時間推理過程,以逐步引導注意到答案的正確位置。
簡單說就是Soft Attention打分以後分配的權重取值在0到1之間,而Hard Attention取值爲0或者1。
這個也很好理解,就是採用全局或者局部的注意力機制。
例如機器翻譯、問答系統、文本分類、情緒分析、命名實體識別、創做樂曲等。
例如多媒體描述、局部圖像補全、經過低分辨率的圖像還原高分辨率圖像等。
例如用於用戶行爲分析,即將注意力權重分配給用戶的交互項目,以更有效地捕捉長期和短時間的興趣。
本文參考大佬:https://github.com/yuquanle/Attention-Mechanisms-paper/blob/master/Attention-mechanisms-paper.md
若是你對智能推薦感興趣,歡迎先瀏覽個人另幾篇隨筆:智能推薦算法演變及學習筆記
若是您對數據挖掘感興趣,歡迎瀏覽個人另幾篇博客:數據挖掘比賽/項目全流程介紹
若是您對人工智能算法感興趣,歡迎瀏覽個人另外一篇博客:人工智能新手入門學習路線和學習資源合集(含AI綜述/python/機器學習/深度學習/tensorflow)
若是你是計算機專業的應屆畢業生,歡迎瀏覽個人另一篇博客:若是你是一個計算機領域的應屆生,你如何準備求職面試?
若是你是計算機專業的本科生,歡迎瀏覽個人另一篇博客:若是你是一個計算機領域的本科生,你能夠選擇學習什麼?
若是你是計算機專業的研究生,歡迎瀏覽個人另一篇博客:若是你是一個計算機領域的研究生,你能夠選擇學習什麼?
若是你對金融科技感興趣,歡迎瀏覽個人另外一篇博客:若是你想了解金融科技,不妨先了解金融科技有哪些可能?
以後博主將持續分享各大算法的學習思路和學習筆記:hello world: 個人博客寫做思路