????????首先,介紹一下lstm神經網絡:
????????長短期記憶(英語:Long Short-Term Memory,LSTM)是一種時間遞歸神經網絡(RNN)[1],論文首次發表于1997年。由于獨特的設計結構,LSTM適合于處理和預測時間序列中間隔和延遲非常長的重要事件。
????????LSTM的表現通常比時間遞歸神經網絡及隱馬爾科夫模型(HMM)更好,比如用在不分段連續手寫識別上[2]。2009年,用LSTM構建的人工神經網絡模型贏得過ICDAR手寫識別比賽冠軍。LSTM還普遍用于自主語音識別,2013年運用TIMIT自然演講資料庫達成17.7%錯誤率的紀錄。作為非線性模型,LSTM可作為復雜的非線性單元用于構造更大型深度神經網絡。
? ? ? ? ? 根據前一周的學習,首先設計訓練參數:
learning_rate:學習的速度,根據Hinton 的BP算法中的梯度下降法則,數值越小,越能找出趨近于最合適的參數值。
training_iters:訓練迭代的次數,次數的選擇需要一點一點地查看,過多會導致過擬合,過少很引起欠擬合。
batch_size:使用批梯度下降,再次,注意一下,批梯度下降與隨機梯度下降的區別:
批量梯度下降的求解思路如下:
(1)將J(theta)對theta求偏導,得到每個theta對應的的梯度
(2)由于是要最小化風險函數,所以按每個參數theta的梯度負方向,來更新每個theta
(3)從上面公式可以注意到,它得到的是一個全局最優解,但是每迭代一步,都要用到訓練集所有的數據,如果m很大,那么可想而知這種方法的迭代速度!!所以,這就引入了另外一種方法,隨機梯度下降。
隨機梯度下降的求解思路如下:
(1)上面的風險函數可以寫成如下這種形式,損失函數對應的是訓練集中每個樣本的粒度,而上面批量梯度下降對應的是所有的訓練樣本:
(2)每個樣本的損失函數,對theta求偏導得到對應梯度,來更新theta
(3)隨機梯度下降是通過每個樣本來迭代更新一次,如果樣本量很大的情況(例如幾十萬),那么可能只用其中幾萬條或者幾千條的樣本,就已經將theta迭代到最優解了,對比上面的批量梯度下降,迭代一次需要用到十幾萬訓練樣本,一次迭代不可能最優,如果迭代10次的話就需要遍歷訓練樣本10次。但是,SGD伴隨的一個問題是噪音較BGD要多,使得SGD并不是每次迭代都向著整體最優化方向。
lr =0.001 # learning rate
training_iters =10000? ? # train step 上限
batch_size =64
inputs:一次性輸入的量
steps:輸入完一整個數據的次數,因為詞向量的長度為300,所以均為300的公因數
hidden_units:lstm內部的神經元的個數
n_inputs = 50 # input of each neuronn_steps = 6 # time stepsn_hidden_units = 512 # neurons in hidden layern_classes = 3 # result(bad, not good, good)