tensorflow lstm从隐状态到预测值_机器学习100天-Day2405 循环神经网络RNN(LSTM)
說明:本文依據《Sklearn 與 TensorFlow 機器學習實用指南》完成,所有版權和解釋權均歸作者和翻譯成員所有,我只是搬運和做注解。
進入第二部分深度學習
第十四章循環(huán)神經網絡
循環(huán)神經網絡可以分析時間序列數(shù)據,諸如股票價格,并告訴你什么時候買入和賣出。在自動駕駛系統(tǒng)中,他們可以預測行車軌跡,避免發(fā)生交通意外。
循環(huán)神經網絡可以在任意長度的序列上工作,而不是之前討論的只能在固定長度的輸入上工作的網絡。
舉個例子,它們可以把語句,文件,以及語音范本作為輸入,使得它們在諸如自動翻譯,語音到文本或者情感分析(例如,讀取電影評論并提取評論者關于該電影的感覺)的自然語言處理系統(tǒng)中極為有用。
另外,循環(huán)神經網絡的預測能力使得它們具備令人驚訝的創(chuàng)造力。
可以要求它們去預測一段旋律的下幾個音符,隨機選取這些音符的其中之一并演奏它。然后要求網絡給出接下來最可能的音符,演奏它,如此周而復始。
同樣,循環(huán)神經網絡可以生成語句,圖像標注等。
在本章中,教程介紹以下幾點
- 循環(huán)神經網絡背后的基本概念
- 循環(huán)神經網絡所面臨的主要問題(在第11章中討論的消失/爆炸的梯度),廣泛用于反抗這些問題的方法:LSTM 和 GRU cell(單元)。
- 展示如何用 TensorFlow 實現(xiàn)循環(huán)神經網絡。最終我們將看看及其翻譯系統(tǒng)的架構。
7.長時訓練困難
在訓練長序列的 RNN 模型時,那么就需要把 RNN 在時間維度上展開成很深的神經網絡。正如任何深度神經網絡一樣,其面臨著梯度消失/爆炸的問題,使訓練無法終止或收斂。
在之前教程中提到過不少方法(參數(shù)初始化方式,非飽和的激活函數(shù)(如 ReLU),批量規(guī)范化(Batch Normalization), 梯度截斷(Gradient Clipping),更快的優(yōu)化器),但是在實際使用中仍會遇到訓練緩慢的問題。
最簡單的方法是在訓練階段僅僅展開限定時間步長的 RNN 網絡,稱為截斷時間反向傳播算法。
在TensorFlow中通過截斷輸入序列來簡單實現(xiàn)這種功能。例如在時間序列預測問題上可以在訓練時減小n_steps來實現(xiàn)截斷。這種方法會限制模型在長期模式的學習能力。
另一種變通方案是確保縮短的序列中包含舊數(shù)據和新數(shù)據,從而使模型獲得兩者信息(如序列同時包含最近五個月的數(shù)據,最近五周的和最近五天的數(shù)據)。
其實就是在解決RNN的記憶問題,包括兩個問題:
1.如何確保從之前的細分類中獲取的數(shù)據有效性。
2.第一個輸入的記憶會在長時間運行的RNN網絡中逐漸淡去。
為了解決這些問題,就出現(xiàn)了各種能夠攜帶長時記憶的神經單元的變體。
8.長短時記憶LSTM
長短時記憶單元,如果把 LSTM 單元看作一個黑盒,從外圍看它和基本形式的記憶單元很相似,但 LSTM 單元會比基本單元性能更好,收斂更快,能夠感知數(shù)據的長時依賴。TensorFlow 中通過BasicLSTMCell實現(xiàn) LSTM 單元。
lstm_cell = tf.contrib.rnn.BasicLSTMCell(num_units=n_neurons)
圖
LSTM 單元狀態(tài)分為兩個向量:h^{(t)} 和 c^{(t)}(c代表 cell)。可以簡單認為 h^{(t)} 是短期記憶狀態(tài),c^{(t)} 是長期記憶狀態(tài)。
LSTM 單元的核心思想是其能夠學習從長期狀態(tài)中存儲什么,忘記什么,讀取什么
- 長期狀態(tài) c^{(t-1)} 從左向右在網絡中傳播,依次經過遺忘門(forget gate)時丟棄一些記憶;
- 加法操作增加一些記憶(從輸入門中選擇一些記憶)。
- 輸出 c^{(t)} 不經任何轉換直接輸出。
每個單位時間步長后,都有一些記憶被拋棄,新的記憶被添加進來。
另一方面,長時狀態(tài)經過 tanh 激活函數(shù)通過輸出門得到短時記憶 h^{(t)},同時它也是這一時刻的單元輸出結果 y^{(t)}。
LSTM 單元能夠學習到識別重要輸入(輸入門作用),存儲進長時狀態(tài),并保存必要的時間(遺忘門功能),并學會提取當前輸出所需要的記憶。
這也解釋了 LSTM 單元能夠在提取長時序列,長文本,錄音等數(shù)據中的長期模式的驚人成功的原因。
其中主要的全連接層輸出 g^{(t)},它的常規(guī)任務就是解析當前的輸入 x^{(t)} 和前一時刻的短時狀態(tài) h^{(t-1)}。在基本形式的 RNN 單元中,就與這種形式一樣,直接輸出了 h^{(t)} 和 y^{(t)}。與之不同的是 LSTM 單元會將一部分 g^{(t)} 存儲在長時狀態(tài)中。
其它三個全連接層被稱為門控制器(gate controller)。其采用 Logistic 作為激活函數(shù),輸出范圍在 0 到 1 之間。在圖中,這三個層的輸出提供給了逐元素乘法操作,當輸入為 0 時門關閉,輸出為 1 時門打開。分別為:
- 遺忘門(forget gat)由 f^{(t)} 控制,來決定哪些長期記憶需要被擦除;
- 輸入門(input gate) 由 i^{(t)} 控制,它的作用是處理哪部分 g^{(t)} 應該被添加到長時狀態(tài)中,也就是為什么被稱為部分存儲。
- 輸出門(output gate)由 o^{(t)} 控制,在這一時刻的輸出 h^{(t)} 和 y^{(t)} 就是由輸出門控制的,從長時狀態(tài)中讀取的記憶。
9.窺孔連接
基本形式的 LSTM 單元中,門的控制僅有當前的輸入 x^{(t)} 和前一時刻的短時狀態(tài) h^{(t-1)}。不妨讓各個控制門窺視一下長時狀態(tài),獲取一些上下文信息不失為一種嘗試。
在tensorflow中使用use_peepholes=True來進行設置。
lstm_cell = tf.contrib.rnn.LSTMCell(num_units=n_neurons, use_peepholes=True)
10.GRU單元
門控循環(huán)單元是 LSTM 單元的簡化版本,能實現(xiàn)同樣的性能,這也說明了為什么它能越來越流行。
- 長時狀態(tài)和短時狀態(tài)合并為一個向量 h^{(t)}。
- 用同一個門控制遺忘門和輸入門。如果門控制輸入 1,輸入門打開,遺忘門關閉,反之亦然。也就是說,如果當有新的記憶需要存儲,那么就必須實現(xiàn)在其對應位置事先擦除該處記憶。這也構成了 LSTM 本身的常見變體。(沒看懂)
- GRU 單元取消了輸出門,單元的全部狀態(tài)就是該時刻的單元輸出。與此同時,增加了一個控制門 r^{(t)} 來控制哪部分前一時間步的狀態(tài)在該時刻的單元內呈現(xiàn)。
在tensorflow中創(chuàng)建GRU
- gru_cell = tf.contrib.rnn.GRUCell(n_units=n_neurons)
總結
以上是生活随笔為你收集整理的tensorflow lstm从隐状态到预测值_机器学习100天-Day2405 循环神经网络RNN(LSTM)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全国首个半导体领域知识产权运营中心在江苏
- 下一篇: 核心频率个加速频率_仅少数Ryzen 9