學習筆記TF017:天然語言處理、RNN、LSTM

天然語言處理 (NLP)問題都是序列化的。前饋神經網絡,在單次前饋中對到來數據處理,假定全部輸入獨立,模式丟失。循環神經網絡(recurrent neural network,RNN)對時間顯式建模神經網絡。RNN神經元可接收其餘神經元加權輸入。RNN神經元可與更高層創建鏈接,也可與更低層創建鏈接。隱含活性值在同一序列相鄰輸入間被記憶。2006年 LSTM。語音識別、語音合成、手寫連體字識別、時間序列預測、圖像標題生成、端到端機器翻譯。算法

RNN由神經元和鏈接權值構成任意有向圖。輸入神經元(input neuron)擁有「到來」鏈接,活性值由輸入數據設置。輸出神經元(output neuron)是數據流圖一組可讀取預測結果神經元。全部其餘神經元爲隱含神經元(hidden neuron)。每一個時間步,經過設置輸入神經元爲網絡提供輸入序列下一幀。隱含活性值做爲下一個時間步附加輸入。RNN當前隱含活性值爲狀態。序列最開始設置值0空狀態。RNN狀態依賴當前輸入和上一狀態。狀態與序列全部前輸入都間接相關,工做記憶(woring memory)。RNN權值矩陣定義執行程序,決定隱含活性值輸入,不一樣活性值整合新活性值輸出。sigmoid激活函數 RNN 2006年被證實圖錄完備(Turing-complete)。給定正確權值,RNN可完成任意計算程序相同計算。不存在找到完美權值方法,可用梯度降低法獲得次好結果。微信

優化RNN,沿時間輸展開,用優化前饋網絡相同方式優化。複製序列神經元,鏈接在副本傳遞,移除循環邊接而不改計算語義。相鄰時間步權值相同強度。隨時間反向傳播(Back-Propagation Through Time,BPTT),返回時間相關偏差對權值(包括聯結相鄰副本權值)偏導。聯結權值(tied weight)梯度相加。網絡

循環神經網絡常見映射:序列分類、序列生成、序列標註、序列翻譯。序列標註(sequential labelling),序列做爲輸入,訓練網絡爲每幀數據產生正確輸出,一個序列到另外一個序列等長映射。序列分類(sequential classification),每一個序列輸入對應一個類別標籤,可僅選擇上一幀輸出訓練RNN,更新權值時偏差流經全部時間步收集集成有用信息。序列生成(sequential generation),給定一個類別標籤,輸出反饋給網絡做爲下一步輸入,生成序列。單個向量視爲信息稠密表示。序列翻譯(sequential translation),域中序列編碼,最後隱含活性值解碼爲另外一個域中序列。輸入輸出概念層次有差別,兩個不一樣RNN,第一個模型最後活性值初始化第二個模型。單個網絡,序列後傳入特殊符號輸入,通知網絡中止編碼,開始解碼。架構

帶輸出投影RNN網絡結構,全鏈接隱含單元,映射輸入輸出。全部隱含單元都爲輸出,堆疊前饋層。隱含單元和輸出單元不一樣激活函數。函數

TensorFlow支持RNN各類變體,tf.nn.rnn_cell。tensor flow.models.rnn中tf.nn.dynamic_rnn實現RNN動力學。接收循環網絡定義,輸入序列批數據。全部序列等長。返回保存每一個時間步輸出和隱含狀態兩個張量。從tensor flow.models.rnn導入rnn_cell和rnn。輸入數據維數爲batch_size*sequence_length*frame_size。不但願限制批次大小,第1維尺寸能夠設None。rnn_cell.BasicRNNCell 建立基礎RNN。rnn.dynamic_rnn 定義sequence_length步模擬RNN運算。定義RNN,沿時間軸展開,加載數據,選擇TensorFlow優化器訓練網絡,tf.train.RMSPropOptimizer、tf.train.AdamOptimizer。學習

長時依賴性,網絡記住含有許多後續不相關幀的序列第一幀。長序列,基礎RNN展開網絡深度很是大,層數很是多,每一層反向傳播算法未來自網絡上一層偏差乘以局部偏導。若是大多數局部偏導遠小於1,梯度每層變小,指數衰減,最終消失。若是不少偏導大於1,梯度值急劇增大。偏差項包含相乘項權值矩陣轉置。RNN相鄰時間步聯結一塊兒,權值局部偏導都小於1或大於1,RNN每一個權值都向相同方向縮放,梯度消失、爆炸問題突出。數值優化,浮點精度對梯度值產生影響。長短時記憶網絡(long-short term memory,LSTM)RNN架構解決方案。優化

LSTM專門解決梯度消失、爆炸問題。學習長時依賴關係的RNN事實標準。將RNN普通神經元替換爲內部擁有少許記憶LSTM單元(LSTM Cell)。聯結一塊兒,內部狀態記憶時間步偏差。LSTM內部狀態有固定權值爲1自鏈接,線性激活函數,局部偏導始終爲1。反向傳播,常量偏差傳輸子(constant error carousel)在時間步攜帶偏差不發生梯度消失或爆炸。內部狀態隨時間步傳遞偏差,LSTM環繞門(surrounding gates)負責學習,非線性激活函數(sigmoid)。原始LSTM單元,一種門學習對到來活性值縮放,另外一種門學習輸出活性值縮放,學習包含或忽略新輸入,學習給其餘單元傳遞特徵。單元輸入送入不一樣權值門。能夠把循環神經網絡用爲規模更大網絡架構組成部分。
LSTMCell類可替換BasicRNNCell類,一個完整的LSTM層。輸入非線性->輸入門->狀態->輸出非線性->輸出門。編碼

LSTM流行變種,添加對內部循環鏈接比例縮放遺忘門(forget gate),網絡學會遺忘,內部循環鏈接局部偏導變成遺忘門活性值,可取非1值。當上下文重要,遺忘門保持關閉狀態。輸入非線性->輸入門->狀態->遺忘門->輸出非線性->輸出門。翻譯

添加窺視孔鏈接(peephole connection),門能看到單元狀態。當精確時間選擇和間隔時有益。TensorFlow LSTM層傳入use-peepholes=Trues標記激活窺視孔鏈接。get

門限循環單元(Gated Recurrent Unit,GRU),架構簡單,更少計算量,沒有輸出門,輸入和遺忘門整合單獨更新門(update gate)。更新門決定內部狀態與候選活性值融合比例。重置門(reset gate)和新輸入肯定部分隱含狀態計算獲得候選活性值。TensorFlow GRU層對應GRUCell類。只須要單元數目參數。輸入->候選活性值->更新門->重置門->狀態。

全鏈接隱含單元RNN,訓練期間把不須要權值置0。最多見作法,兩層或多層全鏈接RNN相互堆疊,信息只能在兩層之間向上流動,多層RNN權值數目少,學習到更多抽象特徵。


參考資料:
《面向機器智能的TensorFlow實踐》

歡迎加我微信交流:qingxingfengzi個人微信公衆號:qingxingfengzigz我老婆張幸清的微信公衆號:qingqingfeifangz

相關文章
相關標籤/搜索