張謙 王明松 劉思意
摘 要:BP神經網絡通過神經元之間的相互連接,由前向傳播和反向傳播方式優化行為參數,在當今的人工智能領域有著廣泛的應用。循環神經網絡優化了傳統神經網絡結構,通過記憶結節的信息流動,實現對具有時間連續性的數據進行處理和預測,LSTM則改進了RNN時間和空間的效率問題,引入了門控機制,降低神經網絡中信息傳遞的復雜度。本文闡述了RNN及LSTM網絡的基本理論,并用TensorFlow框架實現了網絡應用。
關鍵詞:BP神經網絡;RNN網絡;LSTM
1? BP神經網絡
人工神經元網絡是通過眾多神經元的相互連接而構成的自適應系統,具有動態自我更新的特征。BP神經網絡是一種多層的前饋神經網絡,其通過信號的前向傳播,獲取預測結果,再通過反向傳播,得到相應的誤差。通過這樣的前向與反向流動,獲取合理的權重與偏置。
2? RNN理論及實踐
循環神經網絡(Rerrent Neural Network, RNN),主要用于對具有時間連續性的數據進行處理和預測。在傳統的神經網絡模型中,網絡可能有多層結構,但是層與層之間的神經元節點是孤立的,沒有信息傳遞過程。而循環神經網絡刻畫了當前的狀態節點與之前節點的信息關系,接收前端傳來的上一時刻的信息作為重要的處理因子,進行計算輸出,這使得當前狀態時刻節點數據的處理更加復雜化。
在某t時刻,輸入樣本因素值,并伴隨著樣本權重集合,通過輸入因素的權重集合和上一時刻t-1的狀態值的計算,得到t時刻的狀態值。將此刻的狀態值與輸出的樣本權重集合作為參數,通過激活函數的作用,得到輸出預測的概率值。隨著時間狀態變化的序列值前行,一系列神經元節點輸出預測值。可見,網絡的輸出概率值受之前的輸入樣本因子的影響。
反射傳播主要用于更新這些權重參數。在前向傳播過程中,節點輸出預測值會產生誤差值,則在某t時刻,對這些參數的更新,用梯度下降法進行求得。
以下是TensorFlow實現RNN記憶節點功能的主要操作:
class RNNPoint(Layer_RNN_Cell):
#inputs表示輸入到節點的要素集合,state表示上一時刻的輸入集合
def call(self, input_datas, state_cell):
#用來計算[input,state] * [W,U] == [Xt,Ht-1] * W
data_input=math_ops.matmul(array_ops.concat([inputs_data,state_cell], 1), self._kernel)
data_input = nn_ops.bias_add(data_input, self._bias)
output = self._activation(data_input) #用激活函數來歸一化操作
return output, output? #第一個output參數返回下一時刻的輸入S,另一個output作為下一層的輸入
3? LSTM(Long Short Term Memory, 長短期記憶網絡)理論與實踐
一般結構的RNN網絡中,網絡節點某時刻狀態與下一時刻狀態之間是非線性的關系,而且相關參數都是節點之間共同擁有與使用,這會產生不可抗拒的梯度自然消失現象,同時理論的計算量巨大,導致數據訓練所投入的時間和工作量呈指數增長。RNN中的節點單元無法確定信息量的價值,在記憶節點中存儲很多無用的信息,而有利用價值的信息有可能被這些無用信息所侵占和排擠。為此,LSTM則將網絡的狀態分為內部狀態和外部狀態兩種。LSTM 的外部狀態是t時刻隱藏層的對外輸出,同時也是t-1時刻隱藏層的輸入,這是傳統的RNN是一致的。LSTM的內部狀態則引入了門機制,成為解決問題的重要關鍵點。
LSTM記憶節點由輸入門(Input Gate)、遺忘門(Forget Gate)、輸出門(Output Gate)和單元狀態組成。輸入門判定有多少信息量能夠保存到當前時刻的記憶節點中,作為記憶節點的保存數據的閥門,過濾掉不必要的數據信息,將輸入信息與上一狀態輸出信息,經過權重參數的調整,作為激活函數的參數,得到是否通過的決定。遺忘門決定上一時刻的節點狀態有多少需要保留到當前時刻的記憶節點中,哪些信息需要被丟棄,也是經過激活函數的作用,決定能否通過。輸出門控制記憶節點輸出的數據量,有多少信息需要輸出給外部狀態。輸入門和遺忘門是LSTM 保證節點記憶長期依賴的關鍵所在。經過激活函數sigmoid的變換后,得到一個0-1之間的一個數值,用來作為輸入門的控制信號。1表示數據可以通過該門,0表示該門完全關閉。以下是TensorFlow框架實現LSTM節點的主要操作。
class BasicLSTM(Layer_RNN_Cell):
def? call? (self, input_data, states, scope=None):
with vs.variable_scope(scope or type(self).__name__):? # 基礎LSTM節點
concation = _linear([input_data, h], 4 * self._num_units, True); new_t = (c * sigmoid(f + self._forget_bias) + sigmoid(i) *self._activation(j));
new_h = self._activation(new_t) * sigmoid(o); new_sta = array_ops.concat(1, [new_t, new_h]);
return new_h, new_sta
4? 小結
傳統神經網絡參數眾多,在實踐中存在著儲多難題。循環神經網絡優化了傳統神經網絡結構,通過記憶結節的信息流動,實現對具有時間連續性的數據進行處理和預測,LSTM則改進了RNN時間和空間的效率問題,引入了門控機制,降低神經網絡中信息傳遞的復雜度。循環神經網絡(RNN)解決了傳統神經網絡在數據中共享位置特征的難題,在語音識別、機器翻譯、視頻行為識別等諸多領域有著廣泛的應用。
參考文獻:
[1]楊麗,吳雨茜,王俊麗,等.循環神經網絡研究綜述[J].計算機應用, 2018,38S2):6-11.
[2]高茂庭,徐彬源.基于循環神經網絡的推薦算法[J].計算機工程,2019(8).
[3]余昉恒.循環神經網絡門結構模型研究[D].杭州:浙江大學,2018.
[4]朱肖穎,賴紹輝,陸科達.基于 LSTM 算法在新聞分類中的應用[J].梧州學院學報,2018,28(6):10-20.
作者簡介:
王明松(1972- ),男,漢族,遼寧省營口市,講師,碩士,軟件工程理論及實踐方向。
張謙(1999- ),男,漢族,河北省滄州市,軟件工程專業學生,本科。
基金項目業:2020年國家級大學生創新創業訓練計劃項目(項目編號:202013892059)