目錄
1.RNN:處理序列數據
循環神經網絡是一類以序列數據爲輸入,在序列的演進方向進行遞歸,且所有節點(循環單元)按鏈式連接形成閉合迴路的遞歸神經網絡。
RNN的獨特價值: 它能有效的處理序列數據。因爲序列中,前面的輸入也會影響到後面的輸出。RNN相當於有了記憶功能。
缺點: 嚴重的短期記憶問題,長期的數據影響很小(哪怕是重要的信息)。越晚的輸入影響越大,越早的輸入影響越小。
變種算法LSTM和GRU等的特點:
- 長期信息可以有效的保留
- 挑選重要信息保留,不重要的信息會選擇“遺忘”
1.1.爲什麼需要RNN?
CNN和普通的算法大都是輸入和輸出的一一對應,也就是一個輸入得到一個輸出,不同的輸入之間是沒有聯繫的。
序列數據:一串相互依賴的數據流。(考慮詞序)
對於序列數據,因爲要考慮詞之間的依賴性、順序,則一個輸入就不夠了。因此,需要RNN。
1.2.基本原理
RNN跟傳統神經網絡最大的區別:將前一次的輸出結果,帶到下一次的隱藏層中,一起訓練。
下圖中,輸入 “time” 的時候,前面 “what” 的輸出也產生了影響(隱藏層中有一半是黑色的)。以此類推,前面所有的輸入都對未來的輸出產生了影響,大家可以看到圓形隱藏層中包含了前面所有的顏色。當我們判斷意圖的時候,只需要最後一層的輸出。
1.3.缺點
1.3.1.短期記憶、訓練成本大
根據上圖的最後一個hidden layer(下圖):短期的記憶影響較大(如橙色區域),但是長期的記憶影響就很小(如黑色和綠色區域),這就是RNN存在的短期記憶問題。
RNN有短期記憶問題,無法處理很長的輸入序列。而且訓練RNN需要投入極大的成本。
越晚的輸入影響越大,越早的輸入影響越小。
1.3.2.梯度消失/爆炸
BPTT:Back propogation through time
求導過程的鏈太長。
太長的求導鏈在以tanh爲激活函數(其導數值在0~1之間)的BPTT中,連乘就會使得最終的求導爲0,導致梯度消失。因此,t時刻已經學習不到t-N時刻的參數了。
解決方法: LSTM、設計更好的初始參數、更換激活函數ReLU等。
1.4.LSTM:RNN的優化算法
長短期記憶(LSTM) 單位是遞歸神經網絡的單位。由LSTM單元組成的RNN常簡稱爲LSTM。
公共LSTM單元由單元、輸入門、輸出門和忘記門組成。該單元記住任意時間間隔內的值,並且三個門控制進出單元的信息流。
1.4.1.與RNN相比
- 保留較長序列數據中的重要信息,忽略不重要的信息,解決了RNN短期記憶的問題。
- 處理了在訓練傳統RNN時,可能遇到的梯度爆炸和消失的問題。
- 所有遞歸神經網絡都具有神經網絡的鏈式重複模塊。
在標準的RNN中,這個重複模塊具有非常簡單的結構,例如只有單個tanh層。
LSTM的鏈式結構重複模塊:不是一個單獨的神經網絡層,而是4個非常特殊的方式進行交互的層。而且多了一個控制長時記憶的Cell state(細胞狀態)。
1.4.2.核心步驟(前向計算過程)
該小節的圖中:
- 最上面線的狀態代表了長時記憶
- 最下面的線代表了工作記憶或短時記憶
門結構:用來控制增加或刪除信息的程度,一般由 sigmoid函數(值域 (0,1))和向量點乘來實現。
LSTM共包含3個門結構(遺忘門、輸入門、隱藏門),來控制細胞狀態和隱藏狀態。
- 遺忘門:確定什麼樣的信息要被丟棄。
決定上一時刻細胞狀態中的多少信息(由控制)可以傳遞到當前時刻中。
- 輸入門:確定什麼樣的新信息被存放在細胞狀態中。
控制當前輸入新生成的信息中有多少信息(由控制)可以加入到細胞狀態中。
- tanh層:產生當前時刻新的信息
- sigmoid層:控制有多少新信息可以傳遞給細胞狀態
- 更新細胞狀態:丟棄需要丟棄的、保留需要保留的。
基於遺忘門和輸入門的輸出,來更新細胞狀態。更新後的細胞狀態有兩部分構成:
(1) 來自上一時刻、舊的細胞狀態信息,由遺忘門控制:
(2) 當前輸入新生成的信息,由輸入門控制:
- 輸出門:基於更新的細胞狀態,輸出隱藏狀態。
sigmoid層:輸出門,用來控制有多少細胞狀態信息。
將細胞狀態縮放至 (−1,1),使之作爲隱藏狀態的輸出。
1.4.3.反向傳播算法BPTT
詳見博客
1.4.4.python實現
1.4.5.LSTM變體
1.4.5.1.在門上增加窺視孔
1.4.5.2.整合遺忘門和輸入門
1.5.GRU:LSTM 的變體
- 將忘記門和輸入門合成爲更新門
- 還混合了細胞狀態和隱藏狀態
- 其他一些改動…
最終的模型比標準的LSTM模型要簡單,效果和LSTM差不多,但是參數少了1/3,不容易過擬合。
1.6.應用
- 文本生成:類似填空題,給出前後文,然後預測空格中的詞是什麼。
- 機器翻譯:翻譯工作也是典型的序列問題,詞的順序直接影響了翻譯的結果。
- 語音識別:根據輸入音頻判斷對應的文字是什麼。
- 生成圖像描述:類似看圖說話,給一張圖,能夠描述出圖片中的內容。這個往往是 RNN和CNN的結合。
- 視頻標記:將視頻分解爲圖片,然後用文字來描述圖片內容。
3.【科普】NLP
詳見博客
3.1.核心任務
3.1.1.自然語言理解 – NLU | NLI
希望機器像人一樣,具備正常人的語言理解能力。
難點:
- 語言的多樣性
- 語言的歧義性
- 語言的魯棒性
- 語言的知識依賴
- 語言的上下文
詳見博文
3.1.2.自然語言生成 – NLG
將非語言格式的數據轉換成人類可以理解的語言格式,如文章、報告等。
步驟:
- 內容確定 – Content Determination
- 文本結構 – Text Structuring
- 句子聚合 – Sentence Aggregation
- 語法化 – Lexicalisation
- 參考表達式生成 – Referring Expression Generation|REG
- 語言實現 – Linguistic Realisation
詳見博文
3.2.難點
- 語言是規律複雜的。
- 語言是可以自由組合的,可以組合複雜的語言表達。
- 語言是一個開放集合,我們可以任意的發明創造一些新的表達方式。
- 語言需要聯繫到實踐知識,有一定的知識依賴。
- 語言的使用要基於環境和上下文。
3.3.流程步驟
3.3.1.語料預處理
3.3.2.特徵工程
特徵提取、特徵選擇
3.3.3.選擇分類器/設計DL模型
3.4.典型應用
參考
https://easyai.tech/ai-definition/rnn/
https://easyai.tech/ai-definition/lstm/
https://easyai.tech/ai-definition/nlp/
https://blog.csdn.net/flyinglittlepig/article/details/72229041
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
https://www.cnblogs.com/jins-note/p/9715610.html
https://www.jianshu.com/p/daedde46eae5
https://blog.csdn.net/u012735708/article/details/82769711