深度學(xué)習(xí)課件:序列類數(shù)據(jù)處理_第1頁(yè)
深度學(xué)習(xí)課件:序列類數(shù)據(jù)處理_第2頁(yè)
深度學(xué)習(xí)課件:序列類數(shù)據(jù)處理_第3頁(yè)
深度學(xué)習(xí)課件:序列類數(shù)據(jù)處理_第4頁(yè)
深度學(xué)習(xí)課件:序列類數(shù)據(jù)處理_第5頁(yè)
已閱讀5頁(yè),還剩50頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

§5-1一維卷積神經(jīng)網(wǎng)絡(luò)§5-2循環(huán)神經(jīng)網(wǎng)絡(luò)RNN§5-3遞歸神經(jīng)網(wǎng)絡(luò)§5-4長(zhǎng)短期記憶LSTM網(wǎng)絡(luò)

序列類數(shù)據(jù)處理本章簡(jiǎn)介第4章介紹了識(shí)別圖像類數(shù)據(jù)的深度學(xué)習(xí)技術(shù)。但是在我們的生活以及工程應(yīng)用中,數(shù)據(jù)的表現(xiàn)形式不一定只有圖像,還存在著諸如特征序列,語(yǔ)音信號(hào),文本等序列類數(shù)據(jù),這些數(shù)據(jù)同樣記錄著十分重要的信息,我們也希望計(jì)算機(jī)能夠準(zhǔn)確地識(shí)別它們。本章將介紹一系列序列類數(shù)據(jù)處理的方法并利用Keras實(shí)現(xiàn)它們。同時(shí),也會(huì)介紹一些適用于處理序列類數(shù)據(jù)深度學(xué)習(xí)模型的優(yōu)化方法?!?-1一維卷積神經(jīng)網(wǎng)絡(luò)5.1.1一維卷積神經(jīng)網(wǎng)絡(luò)原理與二維卷積神經(jīng)網(wǎng)絡(luò)相似,一維卷積神經(jīng)網(wǎng)絡(luò)也是利用濾波器來(lái)識(shí)別特征。為了減少計(jì)算的復(fù)雜程度,在識(shí)別一種特征的時(shí)候依舊使用權(quán)重共享技術(shù)。一維卷積的基本原理如圖5-1所示。圖5-1一維卷積原理圖不難發(fā)現(xiàn),圖5-1中的輸入序列數(shù)據(jù)維度為8,濾波器的維度為2。與二維卷積類似,卷積后輸出的數(shù)據(jù)維度特征圖個(gè)數(shù)為8?2+1=7。由此可以得到一位卷積的輸出維度公式。圖5-2一維卷積補(bǔ)零策略其中,為輸出維度,為輸入維度,為濾波器維度。這樣看來(lái),一維卷積與二維卷積一樣,同樣存在著維度減少的問(wèn)題。為了保持信號(hào)的維度不發(fā)生變化,一維卷積也可以采用補(bǔ)零策略,如圖5-2所示。(5-1)在得到特征圖之后,為了進(jìn)一步凝煉特征還要使用池化技術(shù)。和二維卷積技術(shù)相同,在一維卷積中我們依舊可以使用最大池化、平均池化以及L2池化等。但是,在使用池化技術(shù)之前還需要利用激活函數(shù)來(lái)增加非線性因素。在獲得凝煉的特征之后還可以利用壓平(Flatten)方法或者是全局平均池化(GlobalAveragePooling)使眾多特征圖變成一個(gè)特征向量以便使用分類函數(shù)對(duì)樣本進(jìn)行分類。壓平方法就是將所有特征圖的每一個(gè)元素各自連接到一個(gè)單獨(dú)的神經(jīng)元,原理如圖5-3所示。如圖5-3所示,假如我們擁有4個(gè)特征圖,每一個(gè)特征圖的大小為1×8,那么全連接層的神經(jīng)元個(gè)數(shù)為4×8=32個(gè),這是一個(gè)“被壓平”的32維特征向量。因此,壓平方法就是將特征圖中的所有元素進(jìn)行全連接,使眾多特征值變?yōu)橐粋€(gè)一維向量。最后將這個(gè)特征向量送入分類函數(shù),最終可以獲得分類結(jié)果。

圖5-3壓平方法原理雖然壓平方法看起來(lái)十分簡(jiǎn)單,但是它存在著很大的問(wèn)題,即特征圖的數(shù)量以及規(guī)模十分龐大時(shí),加入全連接層會(huì)使模型的參數(shù)數(shù)量劇增。為了解決這一問(wèn)題,可以使用全局平均池化方法。全局平均池化方法就是計(jì)算每一個(gè)特征圖中元素的平均值,然后將每一個(gè)特征圖的平均值構(gòu)成特征向量,得到的特征向量再被送入分類函數(shù),最終得到樣本的分類結(jié)果。由于全局平均池化只是求取了每一個(gè)特征圖的平均值而非使用全連接層,這樣就節(jié)省了大量的計(jì)算資源。結(jié)合在第4章中所講到的二維卷積神經(jīng)網(wǎng)絡(luò),我們就得到了一維卷積神經(jīng)網(wǎng)絡(luò)的原理圖,如圖5-4所示。圖5-4一維卷積神經(jīng)網(wǎng)絡(luò)原理5.1.2一維卷積神經(jīng)網(wǎng)絡(luò)實(shí)例現(xiàn)在利用Keras來(lái)實(shí)現(xiàn)一個(gè)實(shí)際的工程問(wèn)題,就是在第3章講述“實(shí)現(xiàn)簡(jiǎn)單神經(jīng)網(wǎng)絡(luò)”時(shí)所提到的對(duì)不同種類鳶尾花的識(shí)別,數(shù)據(jù)集如圖5-5所示。圖5-5鳶尾花數(shù)據(jù)集不難理解,鳶尾花數(shù)據(jù)集就是序列數(shù)據(jù),每一條數(shù)據(jù)由鳶尾花的特征值構(gòu)成。因此,我們可以使用一維卷積神經(jīng)網(wǎng)絡(luò)對(duì)鳶尾花數(shù)據(jù)進(jìn)行識(shí)別。現(xiàn)在初步構(gòu)造一個(gè)一維卷積神經(jīng)網(wǎng)絡(luò)來(lái)進(jìn)行實(shí)驗(yàn),看看它的效果如何。#導(dǎo)入所需要的包importnumpyasnpimportpandasaspdfromkerasimportoptimizersfromkerasimportregularizersfromkeras.modelsimportSequentialfromkeras.layersimportDense,Dropoutfromkeras.wrappers.scikit_learnimportKerasClassifierfromkeras.utilsimportnp_utilsfromsklearn.model_selectionimporttrain_test_split,KFold,cross_val_scorefromsklearn.preprocessingimportLabelEncoderfromkeras.layers.coreimportDense,Dropout,Activationfromkeras.layersimportConv1D,MaxPooling1D,GlobalAveragePooling1D,Flattenfromkeras.callbacksimportTensorBoardfromkeras.callbacksimportEarlyStopping%matplotlibinlineimportmatplotlibimportmatplotlib.pyplotasplt#讀取CSV文件dataframe=pd.read_csv("D:\\DLsample\\iris2.csv",header=None)dataset=dataframe.values#讀取范圍的設(shè)定,共讀取第0至第4列并轉(zhuǎn)為float形式X=dataset[:,0:4].astype(float)#標(biāo)簽的設(shè)定,第4列為標(biāo)簽列Y=dataset[:,4]#由于Conv1官方要求輸入為一個(gè)3D張量,形如(samples,steps,input_dim)的3D張量,因此要對(duì)輸入的數(shù)據(jù)增擴(kuò)X=np.expand_dims(X,3)#將每一類值對(duì)應(yīng)為一個(gè)整數(shù)encoder=LabelEncoder()encoded_Y=encoder.fit_transform(Y)#one-hot形式編碼dummy_y=np_utils.to_categorical(encoded_Y,3)#顯示輸入數(shù)據(jù)以及編碼后的標(biāo)簽print(X)print(dummy_y)#搭建模型model=Sequential()model.add(Conv1D(64,3,activation='relu',input_shape=(4,1),padding='same'))model.add(MaxPooling1D(2))#使用最大池化model.add(Conv1D(128,3,activation='relu',input_shape=(4,1),padding='same'))model.add(MaxPooling1D(2))model.add(GlobalAveragePooling1D())#使用全局平均池化model.add(Dense(10,activation='relu'))model.add(Dense(5,activation='relu'))model.add(Dense(output_dim=3,activation='softmax'))model.summary()#打印模型History=model.fit(X,dummy_y,epochs=500,batch_size=20,validation_split=0.2)#訓(xùn)練網(wǎng)絡(luò)#畫(huà)圖plt.plot(history.history['acc'])plt.plot(history.history['val_acc'])#設(shè)定圖片屬性plt.title('modelaccuracy')plt.ylabel('accuracy')plt.xlabel('epoch')plt.legend(['train','test'],loc='upperleft')plt.show()最后,我們可以觀察到內(nèi)嵌的訓(xùn)練情況。圖5-6一維卷積神經(jīng)網(wǎng)絡(luò)訓(xùn)練情況§5-2循環(huán)神經(jīng)網(wǎng)絡(luò)RNN循環(huán)神經(jīng)網(wǎng)絡(luò)(RecurrentNeuralNetwork,RNN)具有固定的權(quán)值和內(nèi)部的狀態(tài),是一類專門(mén)用于處理任意長(zhǎng)度序列信息的神經(jīng)網(wǎng)絡(luò)。通常用來(lái)描述動(dòng)態(tài)時(shí)間行為序列,循環(huán)網(wǎng)絡(luò)通常是在序列的小批量元素上進(jìn)行操作的,并且不同的小批量數(shù)據(jù)可以具有不同的序列長(zhǎng)度。此外,循環(huán)神經(jīng)網(wǎng)絡(luò)在幾個(gè)時(shí)間步內(nèi)共享相同的權(quán)重,不需要分別學(xué)習(xí)句子每個(gè)位置的所有語(yǔ)言規(guī)則。同樣可以應(yīng)用于兩個(gè)維度的空間數(shù)據(jù)(如圖像和視頻信號(hào))。5.2.1循環(huán)神經(jīng)網(wǎng)絡(luò)基本原理信號(hào)流圖可以很好地顯示深度學(xué)習(xí)模型的信號(hào)流向以及具體構(gòu)造。為了讓循環(huán)神經(jīng)網(wǎng)絡(luò)變得更易被理解,我們結(jié)合信號(hào)流圖來(lái)解釋循環(huán)神經(jīng)網(wǎng)絡(luò)的原理。(5-2)首先考慮動(dòng)態(tài)系統(tǒng)的基本形式:其中,是系統(tǒng)在時(shí)刻的狀態(tài),為系統(tǒng)參數(shù)。通過(guò)表達(dá)式不難看出每一時(shí)刻的系統(tǒng)狀態(tài)不僅僅由系統(tǒng)參數(shù)決定,還由系統(tǒng)上一時(shí)刻的狀態(tài)決定。由于系統(tǒng)在時(shí)刻還需要考慮時(shí)刻的狀態(tài),因此這樣的系統(tǒng)是循環(huán)的。圖5-7迭代式的信號(hào)流圖對(duì)于有限時(shí)間步t,例如t=3,展開(kāi)式(5.2)得到:(5.3)不停地迭代下去就能得到最終的表達(dá)。圖5-7是利用傳統(tǒng)的數(shù)據(jù)流圖來(lái)表達(dá)這一過(guò)程。在自然語(yǔ)言建模的過(guò)程中使用RNN,通常給定前一個(gè)詞去預(yù)測(cè)下一個(gè)詞或者一系列詞來(lái)預(yù)測(cè)樣本類別,此時(shí)沒(méi)有必要存儲(chǔ)時(shí)刻之前輸入序列中的所有信息,而僅僅存儲(chǔ)足夠的信息就可以了。當(dāng)然,我們要求在稀疏的同時(shí)又足夠豐富,盡可能無(wú)差別地恢復(fù)輸入序列。設(shè)一個(gè)函數(shù)g(t)經(jīng)t步展開(kāi)后的循環(huán)為(5.4)(5.5)函數(shù)g(t)將全部的過(guò)去序列作為輸入來(lái)更新系統(tǒng)當(dāng)前的狀態(tài),通過(guò)前面的分析允許將分解g(t)為多次映射函數(shù)f的重復(fù)應(yīng)用。這種迭代方法具有以下兩個(gè)優(yōu)點(diǎn):1.由于它描述的是一種狀態(tài)到另一種狀態(tài)的轉(zhuǎn)移,而非直接處理長(zhǎng)短不一的原始序列數(shù)據(jù),因此無(wú)論序列的長(zhǎng)度如何,最終學(xué)成的模型始終具有相同的輸入大?。?.我們可以在每個(gè)時(shí)間步使用相同參數(shù)的轉(zhuǎn)移函數(shù)。這兩個(gè)優(yōu)點(diǎn)保證了在所有時(shí)間步和所有序列長(zhǎng)度上操作單一的模型是可能的,而不需要在所有可能時(shí)間步學(xué)習(xí)獨(dú)立的模型g(t)。也就是說(shuō)不需要在每一個(gè)時(shí)間步都學(xué)習(xí)一個(gè)單獨(dú)的參數(shù)。5.2.2循環(huán)神經(jīng)網(wǎng)絡(luò)的輸出目前為止,我們上述的循環(huán)網(wǎng)絡(luò)例子中損失L(t)是訓(xùn)練目標(biāo)y(t)和輸出o(t)之間的交叉熵。與前饋網(wǎng)絡(luò)類似,從理論上講,循環(huán)網(wǎng)絡(luò)幾乎可以使用任何損失函數(shù),但具體的損失函數(shù)類型必須根據(jù)具體的工程任務(wù)來(lái)選擇。(5-6)當(dāng)我們使用一個(gè)預(yù)測(cè)性對(duì)數(shù)似然的訓(xùn)練目標(biāo),我們將RNN訓(xùn)練為能夠根據(jù)之前的輸入估計(jì)下一個(gè)序列元素的條件分布。這意味著最大化對(duì)數(shù)似然為:在RNN圖模型中引入狀態(tài)變量,盡管它是輸入的確定性函數(shù),但它有助于計(jì)算的便捷化。序列中的每個(gè)階段使用相同的結(jié)構(gòu),并且與其他階段共享相同的參數(shù)。如圖5-8所示。圖5-8RNN的高效計(jì)算方式如圖5.16所示,相隔較遠(yuǎn)的過(guò)去變量y(t)可以通過(guò)其對(duì)隱藏層h的影響來(lái)影響輸出變量y(t)。節(jié)點(diǎn)之間相互連接結(jié)構(gòu)表明可以在不同的時(shí)間步使用相同的條件概率分布,并且當(dāng)觀察到全部變量時(shí),可以高效地評(píng)估聯(lián)合分配給所有變量的概率。但即便我們已經(jīng)使用高效計(jì)算、參數(shù)化的模型結(jié)構(gòu),某些應(yīng)用需求在計(jì)算上仍然具有挑戰(zhàn)性。例如RNN模型難以預(yù)測(cè)序列中缺少的值。同時(shí),雖然提出的循環(huán)網(wǎng)絡(luò)可以減少參數(shù)的數(shù)目,但是它付出的代價(jià)是可能影響到優(yōu)化參數(shù)。5.2.3上下文依賴型數(shù)據(jù)處理我們之前討論的都是由輸入序列逐步迭代,最后得到輸出序列的情況。但是在實(shí)際工程中不僅僅單純地對(duì)序列類數(shù)據(jù)進(jìn)行簡(jiǎn)單預(yù)測(cè)或分類。例如在許多中文語(yǔ)句中,在不同的上下文環(huán)境里相同的語(yǔ)句具有不同的文意。我們希望這個(gè)深度學(xué)習(xí)模型能夠很好地根據(jù)上下文的語(yǔ)義環(huán)境進(jìn)行識(shí)別或預(yù)測(cè)。以下是將額外輸入提供到RNN的一些常見(jiàn)方法:1.在每一個(gè)時(shí)間步增加一個(gè)額外輸入;2.作為或者影響初始狀態(tài)h(o);3.綜合以上兩種方法。前面已經(jīng)提到,循環(huán)性狀態(tài)h在時(shí)間上向前傳播信息,而循環(huán)性狀態(tài)g在時(shí)間上向后傳播信息。因此在每個(gè)時(shí)間步t,輸出單元o(t)都可以接收到輸入h(t)中關(guān)于過(guò)去的相關(guān)信息以及輸入g(t)中所包括的關(guān)于未來(lái)的相關(guān)要素。值得注意的是,雖然我們一直使用時(shí)間步來(lái)進(jìn)行說(shuō)明,但是RNN也可以應(yīng)用于非時(shí)間序列的序列數(shù)據(jù),此時(shí)時(shí)間步索引就變成了序列數(shù)據(jù)的位置索引。例如,上述的雙向RNN也可以應(yīng)用于處理圖像數(shù)據(jù):由四個(gè)RNN組成,每一個(gè)網(wǎng)絡(luò)沿著四個(gè)方向中的一個(gè)計(jì)算:上、下、左、右。相比卷積網(wǎng)絡(luò),應(yīng)用于圖像的RNN計(jì)算成本通常更高,但允許同一特征圖的特征之間存在長(zhǎng)期橫向的相互作用。5.2.4序列到序列的數(shù)據(jù)處理上面章節(jié)中討論了RNN如何將輸入序列映射成固定大小的向量、如何將固定大小的向量映射成一個(gè)序列,以及RNN如何將一個(gè)輸入序列映射到等長(zhǎng)的輸出序列。但是在實(shí)際的工程應(yīng)用中我們還需要將輸入序列映射到長(zhǎng)度不等的輸出序列。如語(yǔ)音識(shí)別、機(jī)器翻譯或問(wèn)答等。它們訓(xùn)練集的輸入和輸出序列的長(zhǎng)度通常不相同,即使它們的長(zhǎng)度可能存在某些固定的關(guān)系。我們經(jīng)常將RNN的輸入稱為“上下文”。希望產(chǎn)生此上下文的抽象表示,這個(gè)抽象表示我們利用C來(lái)表示。上下文C可能是一個(gè)對(duì)輸入序列抽象表示的向量或者向量序列。用于將一個(gè)可變長(zhǎng)度序列映射到另一個(gè)可變長(zhǎng)度序列最簡(jiǎn)單的RNN架構(gòu)通常被稱為編碼-解碼架構(gòu)或序列到序列架構(gòu),原理如圖5-9所示。圖5-9序列到序列的RNN結(jié)構(gòu)

這個(gè)結(jié)構(gòu)主要由讀取輸入序列的編碼器RNN和生成輸出序列的解碼器RNN組成。編碼器RNN的最終隱藏狀態(tài)用于計(jì)算一般為固定大小的上下文抽象表示,而表示輸入序列的語(yǔ)義概要并且作為解碼器RNN的輸入。這個(gè)結(jié)構(gòu)的實(shí)現(xiàn)過(guò)程十分簡(jiǎn)單:1.編碼器(encoder)處理輸入RNN的序列。編碼器最終輸出上下文C,即對(duì)輸入序列的抽象表示。2.解碼器(decoder)以固定長(zhǎng)度的向量為條件產(chǎn)生輸出序列我們觀察之前講述的所有RNN架構(gòu),不難發(fā)現(xiàn)大多數(shù)RNN的計(jì)算可以分解成3個(gè)不同階段的參數(shù)及其相關(guān)變換:1.從輸入x到隱藏狀態(tài)h;2.從前一隱藏狀態(tài)h(t)到下一隱藏狀態(tài)h(t+1);3.從隱藏狀態(tài)h到輸出y。我們可以理解,適當(dāng)?shù)卦黾幽P偷纳疃葧?huì)對(duì)訓(xùn)練有著一定的積極作用。增加RNN架構(gòu)深度的方法有許多,如下三種最為常見(jiàn):1.隱藏的循環(huán)狀態(tài)可以被分解為具有層次的狀態(tài)組2.可以在輸入到隱藏、隱藏到隱藏以及隱藏到輸出的各部分中引入更深的計(jì)算,如之前介紹的全連接3.引入跳躍連接來(lái)緩解梯度引起的問(wèn)題§5-3遞歸神經(jīng)網(wǎng)絡(luò)5.3.1遞歸神經(jīng)網(wǎng)絡(luò)基本原理遞歸神經(jīng)網(wǎng)絡(luò)(recursiveneuralnetwork)是循環(huán)網(wǎng)絡(luò)的另一種類型,是樹(shù)狀結(jié)構(gòu)而不是循環(huán)神經(jīng)網(wǎng)絡(luò)的鏈狀結(jié)構(gòu),適用于輸入是數(shù)據(jù)結(jié)構(gòu),如自然語(yǔ)言處理和計(jì)算機(jī)視覺(jué)。遞歸神經(jīng)網(wǎng)絡(luò)經(jīng)典數(shù)據(jù)流圖如圖5-10所示。圖5-10經(jīng)典遞歸神經(jīng)網(wǎng)絡(luò)數(shù)據(jù)流圖遞歸網(wǎng)絡(luò)將循環(huán)網(wǎng)絡(luò)的鏈狀數(shù)據(jù)流圖擴(kuò)展成樹(shù)狀數(shù)據(jù)流圖。其中,可變大小的序列x(t)可以通過(guò)固定的參數(shù)集合,即權(quán)重矩陣U、V、W映射到固定大小的抽象o表示。圖5-10展示了監(jiān)督學(xué)習(xí)的情況,因?yàn)樘峁┝伺c整個(gè)序列相關(guān)的目標(biāo)輸出y。遞歸神經(jīng)網(wǎng)絡(luò)最顯著的優(yōu)點(diǎn)就是對(duì)于具有相同長(zhǎng)度t的序列,由于采用了樹(shù)狀結(jié)構(gòu),計(jì)算量可由o(t)銳減至o(logt),可以緩解長(zhǎng)期依賴的問(wèn)題(參見(jiàn)5.3.2節(jié))。遞歸網(wǎng)絡(luò)的變種有很多。比如將數(shù)據(jù)與樹(shù)結(jié)構(gòu)相關(guān)聯(lián),并將輸入和目標(biāo)與樹(shù)的單獨(dú)節(jié)點(diǎn)相關(guān)聯(lián)。5.3.2長(zhǎng)期依賴性當(dāng)網(wǎng)絡(luò)的深度增加以后,模型可能會(huì)出現(xiàn)梯度消失或是梯度爆炸的情況,這種情況我們稱之為長(zhǎng)期依賴。由于循環(huán)神經(jīng)網(wǎng)絡(luò)中存在比相鄰的時(shí)間步之間相互作用的參數(shù)更小的權(quán)重,所以即使我們假設(shè)循環(huán)網(wǎng)絡(luò)的參數(shù)是穩(wěn)定的,但還是存在長(zhǎng)期依賴的現(xiàn)象。循環(huán)神經(jīng)網(wǎng)絡(luò)所使用的函數(shù)組合與矩陣乘法相似。將不同時(shí)間步之間的隱藏層狀態(tài)聯(lián)系寫(xiě)為:(5-7)這是一個(gè)非常簡(jiǎn)單的、缺少非線性激活函數(shù)和輸入的循環(huán)神經(jīng)網(wǎng)絡(luò)。它的迭代式為:(5-8)假設(shè)W存在特征值分解,即:其中若Q為正交的,那么帶入式(5-8)后得到:(5-9)當(dāng)特征值經(jīng)過(guò)高次冪的運(yùn)算后,幅值小于1的特征值將會(huì)衰減到零,而幅值大于1的就會(huì)激增。任何不與最大特征向量對(duì)齊的h(0)的部分將最終被丟棄。(5-10)該乘積消失還是爆炸取決于w的幅值,當(dāng)w>1時(shí)高次冪的運(yùn)算會(huì)導(dǎo)致爆炸,而當(dāng)w<1時(shí)高次冪的值最終會(huì)消失。但是如果能夠在每個(gè)時(shí)間步使用不同權(quán)重w(t)的非循環(huán)網(wǎng)絡(luò),就可以避免高次冪運(yùn)算可能帶來(lái)的梯度消失或爆炸的問(wèn)題。關(guān)于RNN梯度消失和爆炸問(wèn)題,有些學(xué)者希望通過(guò)簡(jiǎn)單地停留在梯度不消失或不爆炸的參數(shù)空間來(lái)避免這個(gè)問(wèn)題。不幸的是,為了儲(chǔ)存記憶并對(duì)小擾動(dòng)具有魯棒性,RNN必須進(jìn)入?yún)?shù)空間中的梯度消失區(qū)域。循環(huán)神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)的就是h(t-1)到h(t)的循環(huán)權(quán)重映射參數(shù)以及從x(t)到h(t)的輸入權(quán)重映射參數(shù)。研究者提出避免上述問(wèn)題的方法是設(shè)定循環(huán)隱藏單元,使其能很好地捕捉過(guò)去的輸入歷史,并且只學(xué)習(xí)輸出權(quán)重。如圖5-11所示的回聲狀態(tài)網(wǎng)絡(luò)(EchoStateNetwork,ESN)就是一個(gè)很好的示例。該網(wǎng)絡(luò)將任意長(zhǎng)度的序列映射為一個(gè)長(zhǎng)度固定的向量,把循環(huán)網(wǎng)絡(luò)視為動(dòng)態(tài)系統(tǒng),并設(shè)定讓動(dòng)態(tài)系統(tǒng)接近穩(wěn)定邊緣的輸入和循環(huán)權(quán)重,之后施加一個(gè)預(yù)測(cè)算法以解決實(shí)際工程問(wèn)題。圖5-11回聲狀態(tài)網(wǎng)絡(luò)原理圖§5-4長(zhǎng)短期記憶LSTM網(wǎng)絡(luò)5.4.1長(zhǎng)短期記憶網(wǎng)絡(luò)基本原理實(shí)際應(yīng)用中最有效的序列模型稱為門(mén)控RNN,包括基于長(zhǎng)短期記憶(LSTM)和基于門(mén)控循環(huán)單元(GRU)的網(wǎng)絡(luò)。門(mén)控RNN在每個(gè)時(shí)間步都可能改變連接權(quán)重。我們希望神經(jīng)網(wǎng)絡(luò)學(xué)會(huì)自行決定何時(shí)清除舊的狀態(tài),也就是希望門(mén)控RNN能夠清除不太重要的歷史信息,以解決長(zhǎng)期依賴的問(wèn)題和減少不必要的計(jì)算存儲(chǔ)資源的浪費(fèi)。引入自循環(huán)結(jié)構(gòu)以產(chǎn)生梯度長(zhǎng)時(shí)間持續(xù)流動(dòng)的路徑是長(zhǎng)短期記憶LSTM模型的核心機(jī)制。其中一個(gè)關(guān)鍵就是使自循環(huán)的權(quán)要依照上下文而定,而不是固定的。另一個(gè)關(guān)鍵就是隱藏單元可以控制這個(gè)自循環(huán)的權(quán)重,累積的時(shí)間尺度可以動(dòng)態(tài)地改變。在這種情況下,因?yàn)闀r(shí)間常數(shù)是模型本身的輸出,所以即使是具有固定參數(shù)的LSTM,累積的時(shí)間尺度也可以因輸入序列而改變。傳統(tǒng)的循環(huán)神經(jīng)網(wǎng)絡(luò)難以學(xué)習(xí)相隔較遠(yuǎn)的歷史數(shù)據(jù),這也是推動(dòng)LSTM的主要原因之一。原始RNN的隱藏層只有一個(gè)狀態(tài),即h,它只對(duì)短期的輸入非常敏感。那么假如我們?cè)僭黾右粋€(gè)狀態(tài),即s,讓它來(lái)保存長(zhǎng)期的狀態(tài),就能解決模型長(zhǎng)期依賴的問(wèn)題了。如圖5-12所示。圖5-12LSTM在每一個(gè)時(shí)間步增加保存長(zhǎng)期狀態(tài)的參數(shù)我們把圖5-12的單個(gè)時(shí)間步的LSTM按時(shí)間展開(kāi),可以得到如圖5-13所示的原理圖。通過(guò)原理圖不難看出,LSTM在每個(gè)時(shí)間步上有3個(gè)輸入:當(dāng)前時(shí)刻網(wǎng)絡(luò)的輸入值、上一時(shí)刻LSTM的輸出值、以及上一時(shí)刻的單元狀態(tài)。而LSTM的輸出有兩個(gè):當(dāng)前時(shí)刻LSTM輸出值和當(dāng)前時(shí)刻的單元狀態(tài)。圖5-13LSTM按時(shí)間步展開(kāi)原理LSTM的關(guān)鍵就是怎樣控制長(zhǎng)期狀態(tài),思路是使用三個(gè)控制開(kāi)關(guān)。如圖5-14所示,第一個(gè)開(kāi)關(guān)f是遺忘門(mén);第二個(gè)開(kāi)關(guān)g是輸入門(mén);第三個(gè)開(kāi)關(guān)q是輸出門(mén)。圖5-14所有的部件組成了一個(gè)LSTM的“細(xì)胞”。細(xì)胞彼此循環(huán)連接,代替了一般循環(huán)網(wǎng)絡(luò)中普通的隱藏單元。如果輸入門(mén)g允許,它的值可以累加到狀態(tài)。狀態(tài)單元具有線性自循環(huán)功能,其權(quán)重由遺忘門(mén)f控制。而細(xì)胞的輸出可以被輸出門(mén)q關(guān)閉。圖5-14三個(gè)“開(kāi)關(guān)”的作用原理LSTM網(wǎng)絡(luò)比簡(jiǎn)單的循環(huán)架構(gòu)更易于學(xué)習(xí)長(zhǎng)期依賴,既有用于測(cè)試長(zhǎng)期依賴學(xué)習(xí)能力的人工數(shù)據(jù)集,又能夠在具有挑戰(zhàn)性的序列處理任務(wù)上獲得最先進(jìn)的表現(xiàn)。關(guān)于門(mén)控RNN也允許網(wǎng)絡(luò)動(dòng)態(tài)地控制時(shí)間尺度和不同單元的遺忘行為,其單元也被稱為門(mén)控循環(huán)單元或GRU。它與LSTM的主要區(qū)別是,單個(gè)門(mén)控單元同時(shí)控制遺忘因子和更新?tīng)顟B(tài)單元,更新公式為:其中代表更新門(mén),表示復(fù)位門(mén)。(5-10)更新門(mén)和復(fù)位門(mén)能獨(dú)立地忽略一部分狀態(tài)向量。更新門(mén)可以線性地控制任意維度,從而選擇將它復(fù)制或完全由新的目標(biāo)狀態(tài)值替換。而復(fù)位門(mén)控制當(dāng)前狀態(tài)中的哪些部分用于計(jì)算下一個(gè)目標(biāo)狀態(tài),在過(guò)去狀態(tài)和未來(lái)狀態(tài)之間引入了附加的非線性效應(yīng)。圍繞這一思路還可以設(shè)計(jì)出更多的變種。例如復(fù)位門(mén)或遺忘門(mén)的輸出可以在多個(gè)隱藏單元間共享?;蛘呷珠T(mén)和一個(gè)局部門(mén)可用于結(jié)合全局控制與局部控制。就是這樣通過(guò)改變RNN的連接構(gòu)造我們就能緩解模型的長(zhǎng)期依賴問(wèn)題。本節(jié)介紹了LSTM的基本原理及其簡(jiǎn)單的變種結(jié)構(gòu),下一節(jié)將嘗試?yán)肒eras實(shí)現(xiàn)一個(gè)簡(jiǎn)單的LSTM模型。5.4.2長(zhǎng)短期記憶網(wǎng)絡(luò)工程實(shí)例該實(shí)例的數(shù)據(jù)源是空氣質(zhì)量數(shù)據(jù)集,來(lái)源自位于北京的美國(guó)大使館在2010年至2014年共5年間每小時(shí)采集的天氣及空氣污染指數(shù)(https:///ml/datasets/Beijing+PM2.5+Data)。數(shù)據(jù)集包括日期、PM2.5濃度、露點(diǎn)、溫度、風(fēng)向、風(fēng)速、累積小時(shí)雪量和累積小時(shí)雨量。數(shù)據(jù)的形式如圖5-15所示。圖5-15空氣質(zhì)量數(shù)據(jù)集我們可以利用此數(shù)據(jù)集搭建預(yù)測(cè)模型,利用前一個(gè)或幾個(gè)小時(shí)的天氣條件和污染數(shù)據(jù)預(yù)測(cè)下一個(gè)(當(dāng)前)時(shí)刻的污染程度。在觀察數(shù)據(jù)集后會(huì)發(fā)現(xiàn)最開(kāi)始的很長(zhǎng)時(shí)間里(例如前面的24小時(shí))PM2.5值都是NA,因此為了方便訓(xùn)練,我們刪除這部分?jǐn)?shù)據(jù),對(duì)于其他時(shí)刻少量的缺省值利用Pandas中的fillna填充;同時(shí)需要整合日期數(shù)據(jù),使其作為Pandas中索引。由于樣本的序號(hào)對(duì)我們并沒(méi)有什么幫助,因此也刪除樣本的序號(hào)列,即“No”這一列。這些列工作可以由pandas自行完成(一個(gè)數(shù)學(xué)處理包)。#導(dǎo)入相應(yīng)的包frompandasimportread_csvfromdatetimeimportdatetime#加載數(shù)據(jù)defparse(x):returndatetime.strptime(x,'%Y%m%d%H')dataset=read_csv('D:\\DLsample\\raw.csv',parse_dates=[['year','month','day','hour']],index_col=0,date_parser=parse)#丟棄數(shù)據(jù)序號(hào)列dataset.drop('No',axis=1,inplace=True)#指定列名dataset.columns=['pollution','dew','temp','press','wnd_dir','wnd_spd','snow','rain']='date'#將所有空值填充為0dataset['pollution'].fillna(0,inplace=True)#丟棄前24小時(shí)數(shù)據(jù)dataset=dataset[24:]#整合前5列。由圖5-15可以看出前5列為日期數(shù)據(jù)(年月日時(shí))。print(dataset.head(5))#保存新序列dataset.to_csv('D:\\DLsample\\newpollution.csv')現(xiàn)在的數(shù)據(jù)格式已經(jīng)更加適合處理,可以簡(jiǎn)單的對(duì)每列進(jìn)行繪圖。繪圖可由如下方法完成。#導(dǎo)入相應(yīng)的包frompandasimportread_csvfrommatplotlibimportpyplot#加載數(shù)據(jù)dataset=read_csv('D:\\newpollution.csv',header=0,index_col=0)values=dataset.values#指定需要繪制的列g(shù)roups=[0,1,2,3,5,6,7]i=1#繪制每一列pyplot.figure()forgroupingroups:pyplot.subplot(len(groups),1,i)pyplot.plot(values[:,group])pyplot.title(dataset.columns[group],y=0.5,loc='right')i+=1pyplot.show()這樣我們就可以得到根據(jù)時(shí)間繪制的不同類型數(shù)據(jù)的圖像,部分圖像如圖5-16所示:圖5-16根據(jù)時(shí)間繪制的不同類型數(shù)據(jù)的圖像下面是完整的代碼:#導(dǎo)入所需包fromnumpyimportconcatenatefrommatplotlibimportpyplotfrompandasimportread_csvfrompandasimportDataFramefrompandasimportconcatfromsklearn.preprocessingimportMinMaxScalerfromsklearn.preprocessingimportLabelEncoderfromsklearn.metricsimportmean_squared_errorfromkeras.modelsimportSequentialfromkeras.layersimportDensefromkeras.layersimportLSTM#轉(zhuǎn)換為有監(jiān)督學(xué)習(xí)defseries_to_supervised(data,n_in=1,n_out=1,dropnan=True):n_vars=1iftype(data)islistelsedata.shape[1]df=DataFrame(data)cols,names=list(),list()foriinrange(n_in,0,-1):cols.append(df.shift(i))names+=[('var%d(t-%d)'%(j+1,i))forjinrange(n_vars)]foriinrange(0,n_out):cols.append(df.shift(-i))ifi==0:names+=[('var%d(t)'%(j+1))forjinrange(n_vars)]else:names+=[('var%d(t+%d)'%(j+1,i))forjinrange(n_vars)]agg=concat(cols,axis=1)agg.columns=namesifdropnan:agg.dropna(inplace=True)returnagg#讀取數(shù)據(jù)dataset=read_csv('D:\\newpollution.csv',header=0,index_col=0)values=dataset.values#整合數(shù)據(jù)encoder=LabelEncoder()values[:,4]=encoder.fit_transform(values[:,4])values=values.astype('float32')#歸一化數(shù)據(jù)scaler=MinMaxScaler(feature_range=(0,1))scaled=scaler.fit_transform(values)reframed=series_to_supervised(scaled,1,1)#丟棄無(wú)用數(shù)據(jù)reframed.drop(reframed.columns[[9,10,11,12,13,14,15]],axis=1,inplace=True)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論