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