《Python人工智能》第5章-深度學習與神經(jīng)網(wǎng)絡_第1頁
《Python人工智能》第5章-深度學習與神經(jīng)網(wǎng)絡_第2頁
《Python人工智能》第5章-深度學習與神經(jīng)網(wǎng)絡_第3頁
《Python人工智能》第5章-深度學習與神經(jīng)網(wǎng)絡_第4頁
《Python人工智能》第5章-深度學習與神經(jīng)網(wǎng)絡_第5頁
已閱讀5頁,還剩135頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

《Python人工智能》第5章深度學習與神經(jīng)網(wǎng)絡第5章深度學習與神經(jīng)網(wǎng)絡自從2016年基于“深度學習”工作原理的人工智能機器人—阿爾法狗(AlphaGo)第一次在圍棋領域擊敗人類圍棋世界冠軍以來,深度學習算法聲名鵲起,極大地推動了人工智能領域的研究進程,并迅速滲透各行各業(yè),同時帶動了一大批新興產(chǎn)業(yè)。本章以深度學習為背景,重點介紹卷積神經(jīng)網(wǎng)絡(CNN)、循環(huán)神經(jīng)網(wǎng)絡(RNN)、長短時記憶網(wǎng)絡(LSTM)等深度學習模型的原理、結(jié)構(gòu)與計算方法,并對每個模型給出詳細的理論推導和基于Python的代碼實現(xiàn)。5.1深度學習01PART神經(jīng)網(wǎng)絡與深度學習神經(jīng)元模型神經(jīng)網(wǎng)絡與深度學習人工神經(jīng)網(wǎng)絡神模型?

神經(jīng)網(wǎng)絡通常被比喻成一塊有很多層的三明治,每層都有人工神經(jīng)元也就是微小的計算單元。神經(jīng)網(wǎng)絡與深度學習人工神經(jīng)網(wǎng)絡神模型神經(jīng)網(wǎng)絡與深度學習杰弗里?辛頓(GEOFFRREYHINTON)?1986年的一篇闡述多層神經(jīng)網(wǎng)絡的誤差反向傳播訓練方法的論文,為人工智能的發(fā)展奠定了基礎。31歲的辛頓(圖右)神經(jīng)網(wǎng)絡與深度學習神經(jīng)網(wǎng)絡可以用來做什么?原始數(shù)據(jù)對數(shù)據(jù)的理解(表示)判斷(分類)0.970.010.02catdogother神經(jīng)網(wǎng)絡與深度學習機器學習

機器學習是神經(jīng)網(wǎng)絡應用的重要方向。

專門研究計算機怎樣模擬或?qū)崿F(xiàn)人類的學習行為,以獲取新的知識或技能,重新組織已有的知識結(jié)構(gòu)使之不斷改善自身的性能。神經(jīng)網(wǎng)絡與深度學習淺層學習的困境

20世紀80年代末期,人工神經(jīng)網(wǎng)絡從大量訓練樣本中學習統(tǒng)計規(guī)律,從而對未知事件做預測。

20世紀90年代,各種各樣的淺層機器學習模型相繼被提出,如支撐向量機(SVM)。理論分析的難度大,訓練方法又需要很多經(jīng)驗和技巧,實用性不強,大量學者轉(zhuǎn)移研究方向。1997年Hinton再婚神經(jīng)網(wǎng)絡與深度學習視覺生理1981年的諾貝爾醫(yī)學獎頒發(fā)給了神經(jīng)生物學家DavidHubel和TorstenWiesel。其主要貢獻是發(fā)現(xiàn)了視覺系統(tǒng)的信息處理:可視皮層是分級的。神經(jīng)網(wǎng)絡與深度學習小貓的實驗1958年,DavidHubel和TorstenWiesel在JoohnHopkinsUniversity,研究瞳孔區(qū)域與大腦皮層神經(jīng)元的對應關系。最終發(fā)現(xiàn)了一種被稱為“方向選擇性細胞”的神經(jīng)元細胞。當小貓瞳孔發(fā)現(xiàn)了眼前的物體的邊緣,而且這個邊緣指向某個方向時,這種神經(jīng)元細胞就會活躍。神經(jīng)‐中樞‐大腦的工作過程,或許是一個不斷迭代、不斷抽象的過程神經(jīng)網(wǎng)絡與深度學習分級視覺系統(tǒng)原始信號攝入:瞳孔攝入像素預處理:大腦皮層某些細胞發(fā)現(xiàn)邊緣和方向抽象:大腦判定,眼前的物體的形狀進一步抽象:大腦進一步判定該物體是什么神經(jīng)網(wǎng)絡與深度學習深度學習

2006年,Hinton在《科學》刊文:(1)多隱層的人工神經(jīng)網(wǎng)絡學習得到的特征對數(shù)據(jù)有更本質(zhì)的刻畫,從而有利于可視化或分類;(2)深度神經(jīng)網(wǎng)絡在訓練上的難度,可以通過“逐層初始化”來有效克服,且逐層初始化是通過無監(jiān)督學習實現(xiàn)的。神經(jīng)網(wǎng)絡與深度學習深度學習

2012年6月,《紐約時報》披露了GoogleBrain項目。這個項目是由斯坦福大學教授AndrewNg(吳恩達)和在大規(guī)模計算機系統(tǒng)方面的世界頂尖專家JeffDean共同主導,用16000個CPUCore的并行計算平臺訓練一種稱為“深度神經(jīng)網(wǎng)絡”的機器學習模型(有10億個節(jié)點),在語音識別和圖像內(nèi)部共識別等領域獲得了巨大的成功。神經(jīng)網(wǎng)絡與深度學習深度神經(jīng)網(wǎng)絡模型傳統(tǒng)神經(jīng)網(wǎng)絡深度神經(jīng)網(wǎng)絡神經(jīng)網(wǎng)絡與深度學習深度學習的基本應用分類檢索神經(jīng)網(wǎng)絡與深度學習深度學習的基本應用檢測分割神經(jīng)網(wǎng)絡與深度學習19561970198220061990History·······低谷1970-1980大規(guī)模數(shù)據(jù)和復雜任務不能完成,計算能力無法突破專家系統(tǒng)1982年后神經(jīng)網(wǎng)路+5代計算機深度學習2006年-至今突破性進展進入發(fā)展熱潮1957年Perception感知神經(jīng)網(wǎng)絡的發(fā)明1986年BP神經(jīng)網(wǎng)絡算法的發(fā)明和應用低谷1990-2000DARPA無法實現(xiàn),政府投入縮減AI誕生1956年達特茅斯會議神經(jīng)網(wǎng)絡與深度學習理想的堅持!我始終堅持做神經(jīng)網(wǎng)絡的研究!神經(jīng)網(wǎng)絡與深度學習2019年圖靈獎2019年3月27日ACM宣布,深度學習的三位創(chuàng)造者YoshuaBengio(本杰明),YannLeCun(勒昆)以及GeoffreyHinton(辛頓)獲得了2019年的圖靈獎。神經(jīng)網(wǎng)絡與深度學習仍在繼續(xù)…...膠囊網(wǎng)絡(Capsule)

深度學習能用某種方式人腦行為,只是不具備思維能力的模式識別機。

Hinton注意到,目前大多數(shù)神經(jīng)解剖學研究都支持(大部分哺乳類,特別是靈長類)大腦皮層中大量存在柱狀結(jié)構(gòu)(皮層微柱),其內(nèi)部含有上百個神經(jīng)元,并存在內(nèi)部分層。這意味著人腦中的一層并不是類似現(xiàn)在神經(jīng)網(wǎng)絡的一層,而是有復雜的內(nèi)部結(jié)構(gòu)。5.2人工神經(jīng)網(wǎng)絡基礎02PART2024/12/6241.神經(jīng)元與感知器

主要內(nèi)容:感知器與人工神經(jīng)網(wǎng)絡的早期發(fā)展;線性可分問題與線性不可分問題;Hebb學習律;Delta規(guī)則;感知器的訓練算法。重點:感知器的結(jié)構(gòu)、表達能力、學習算法難點:感知器的表達能力

2024/12/625感知器與ANN的早期發(fā)展McCulloch和Pitts1943年,發(fā)表第一個系統(tǒng)的ANN研究——閾值加權(quán)和(M-P)數(shù)學模型。1947年,開發(fā)出感知器。1949年,提出Hebb學習律。單輸出的感知器(M-P模型)x2x1oxn…2024/12/626感知器與ANN的早期發(fā)展1962年,Rosenblatt宣布:人工神經(jīng)網(wǎng)絡可以學會它能表示的任何東西

o1多輸出感知器x1x2o2omxn…

………輸入層輸出層2024/12/627線性不可分問題

異或(Exclusive–OR)問題

g(x,y)y01x0011102024/12/628用于求解XOR的單神經(jīng)元感知器

xyo單神經(jīng)元感知器的圖像ax+by=θ1yx1(0,0)(1,1)2024/12/629線性不可分函數(shù)變量函數(shù)及其值xyf1f2f3f4f5f6f7f8f9f10f11f12f13f14f15f160000000000111111110100001111000011111000110011001100111101010101010101012024/12/630線性不可分函數(shù)R.O.Windner1960年

自變量個數(shù)函數(shù)的個數(shù)線性可分函數(shù)的個數(shù)144216143256104465,536188254.3*10994,57261.8*10195,028,1342024/12/631線性不可分問題的克服

用多個單級網(wǎng)組合在一起,并用其中的一個去綜合其它單級網(wǎng)的結(jié)果,我們就可以構(gòu)成一個兩級網(wǎng)絡,該網(wǎng)絡可以被用來在平面上劃分出一個封閉或者開放的凸域來一個非凸域可以拆分成多個凸域。按照這一思路,三級網(wǎng)將會更一般一些,我們可以用它去識別出一些非凸域來。解決好隱藏層的聯(lián)接權(quán)的調(diào)整問題是非常關鍵的

2024/12/632兩級單輸出網(wǎng)在n維空間中劃分出m邊凸域

…x1ANmAN1ANoxn…o2024/12/6331、BP算法的出現(xiàn)非循環(huán)多級網(wǎng)絡的訓練算法UCSDPDP小組的Rumelhart、Hinton和Williams1986年獨立地給出了BP算法清楚而簡單的描述1982年,Paker就完成了相似的工作1974年,Werbos已提出了該方法2、弱點:訓練速度慢、局部極小點逃離問題、算法不一定收斂。3、優(yōu)點:廣泛的適應性和有效性。2024/12/634基本BP算法

4.2.1網(wǎng)絡的構(gòu)成

神經(jīng)元的網(wǎng)絡輸入:

neti=x1w1i+x2w2i+…+xnwni神經(jīng)元的輸出:2024/12/635輸出函數(shù)分析應該將net的值盡量控制在收斂比較快的范圍內(nèi)可以用其它的函數(shù)作為激活函數(shù),只要該函數(shù)是處處可導的

0.5f′(net)0.25o01

1(0,0.5)

net(0,0)o2024/12/636網(wǎng)絡的拓撲結(jié)構(gòu)x1o1輸出層隱藏層輸入層x2o2omxn…………………W(1)W(2)W(3)W(L)2024/12/637網(wǎng)絡的拓撲結(jié)構(gòu)

BP網(wǎng)的結(jié)構(gòu)輸入向量、輸出向量的維數(shù)、網(wǎng)絡隱藏層的層數(shù)和各個隱藏層神經(jīng)元的個數(shù)的決定實驗:增加隱藏層的層數(shù)和隱藏層神經(jīng)元個數(shù)不一定總能夠提高網(wǎng)絡精度和表達能力。BP網(wǎng)一般都選用二級網(wǎng)絡。2024/12/638網(wǎng)絡的拓撲結(jié)構(gòu)x1o1輸出層隱藏層輸入層x2o2omxn…………WV2024/12/639BP算法訓練過程概述

樣本:(輸入向量,理想輸出向量)權(quán)初始化:“小隨機數(shù)”與飽和狀態(tài);“不同”保證網(wǎng)絡可以學。1、向前傳播階段:(1)從樣本集中取一個樣本(Xp,Yp),將Xp輸入網(wǎng)絡;(2)計算相應的實際輸出Op:

Op=Fl(…(F2(F1(XpW(1))W(2))…)W(L))2024/12/640BP算法訓練過程概述

2、向后傳播階段——誤差傳播階段:(1)計算實際輸出Op與相應的理想輸出Yp的差;(2)按極小化誤差的方式調(diào)整權(quán)矩陣。(3)網(wǎng)絡關于第p個樣本的誤差測度:(4)網(wǎng)絡關于整個樣本集的誤差測度:2024/12/641誤差傳播分析

1、輸出層權(quán)的調(diào)整wpq=wpq+?wpq?wpq=αδqop

=αfn′(netq)(yq-oq)op =αoq(1-oq)(yq-oq)op

wpqANpANq第L-1層第L層?wpq2024/12/642隱藏層權(quán)的調(diào)整

ANpANqANhvhp δpk-1δ1kwp1wpqδqkwpmδmk第k-2層第k層第k-1層……2024/12/643隱藏層權(quán)的調(diào)整δpk-1的值和δ1k,δ2k,…,δmk

有關不妨認為δpk-1通過權(quán)wp1對δ1k做出貢獻,通過權(quán)wp2對δ2k做出貢獻,……通過權(quán)wpm對δmk做出貢獻。δpk-1=fk-1′(netp)(wp1δ1k+wp2δ2k+…+wpmδmk)2024/12/644隱藏層權(quán)的調(diào)整vhp=vhp+?vhp

?vhp=αδpk-1ohk-2 =αfk-1′(netp)(wp1δ1k+wp2δ2k+…+wpmδmk)ohk-2 =αopk-1(1-opk-1)(wp1δ1k+wp2δ2k+…+wpmδmk)ohk-2ANpANqANhvhp δpk-1δ1kwp1wpmδqkwpqδmk第k-2層第k層第k-1層……2024/12/645基本的BP算法

樣本集:S={(X1,Y1),(X2,Y2),…,(Xs,Ys)}

基本思想:逐一地根據(jù)樣本集中的樣本(Xk,Yk)計算出實際輸出Ok和誤差測度E1,對W(1)

,W(2)

,…,W(L)各做一次調(diào)整,重復這個循環(huán),直到∑Ep<ε。用輸出層的誤差調(diào)整輸出層權(quán)矩陣,并用此誤差估計輸出層的直接前導層的誤差,再用輸出層前導層誤差估計更前一層的誤差。如此獲得所有其它各層的誤差估計,并用這些估計實現(xiàn)對權(quán)矩陣的修改。形成將輸出端表現(xiàn)出的誤差沿著與輸入信號相反的方向逐級向輸入端傳遞的過程。

2024/12/646基本BP算法

1fork=1toLdo 1.1初始化W(k);2初始化精度控制參數(shù)ε;3E=ε+1;4whileE>εdo

4.1E=0;

4.2對S中的每一個樣本(Xp,Yp):4.2.1計算出Xp對應的實際輸出Op;4.2.2計算出Ep;4.2.3E=E+Ep;4.2.4根據(jù)相應式子調(diào)整W(L);4.2.5k=L-1;4.2.6whilek≠0do

根據(jù)相應式子調(diào)整W(k);k=k-1

4.3E=E/2.0

從廣義上說深度學習的網(wǎng)絡結(jié)構(gòu)也是多層神經(jīng)網(wǎng)絡的一種。傳統(tǒng)意義上的多層神經(jīng)網(wǎng)絡是只有輸入層、隱藏層、輸出層。其中隱藏層的層數(shù)根據(jù)需要而定,沒有明確的理論推導來說明到底多少層合適。而深度學習中最著名的卷積神經(jīng)網(wǎng)絡CNN,在原來多層神經(jīng)網(wǎng)絡的基礎上,加入了特征學習部分,這部分是模仿人腦對信號處理上的分級的。具體操作就是在原來的全連接的層前面加入了部分連接的卷積層與降維層,而且加入的是一個層級。輸入層-卷積層-降維層-卷積層-降維層--....--隱藏層-輸出層簡單來說,原來多層神經(jīng)網(wǎng)絡做的步驟是:特征映射到值。特征是人工挑選。深度學習做的步驟是信號->特征->值。特征是由網(wǎng)絡自己選擇。2024/12/648深度學習算法的理論基礎基本假設網(wǎng)絡含有L層聯(lián)接矩陣:W(1)

,W(2)

,…,W(L)第k層的神經(jīng)元:Hk個自變量數(shù):n*H1+H1*H2+H2*H3+…+HL*m樣本集:S={(X1,Y1),(X2,Y2),…,(Xs,Ys)}

誤差測度: 2024/12/649用E代表EP,用(X,Y)代表(XP,YP)

X=(x1,x2,…,xn) Y=(y1,y2,…,ym)該樣本對應的實際輸出為

O=(o1,o2,…,om)誤差測度2024/12/650誤差測度用理想輸出與實際輸出的方差作為相應的誤差測度2024/12/651最速下降法,要求E的極小點

wijE>0,此時Δwij<0取E<0,此時Δwij>0wij2024/12/652而其中的

所以,

最速下降法,要求E的極小點2024/12/653令所以Δwij=αδjoiα為學習率最速下降法,要求E的極小點2024/12/654ANj為輸出層神經(jīng)元

oj=f(netj)

容易得到

從而

2024/12/655ANj為輸出層神經(jīng)元2024/12/656所以,故,當ANj為輸出層的神經(jīng)元時,它對應的聯(lián)接權(quán)wij應該按照下列公式進行調(diào)整:ANj為輸出層神經(jīng)元2024/12/657ANj為隱藏層神經(jīng)元

函數(shù)2024/12/658ANj為隱藏層神經(jīng)元netk=oj…o2o1oHhnetk是oj下一級的神經(jīng)元的網(wǎng)絡輸入2024/12/659ANj為隱藏層神經(jīng)元2024/12/660ANj為隱藏層神經(jīng)元2024/12/661ANj為隱藏層神經(jīng)元1)使用自下上升非監(jiān)督學習(就是從底層開始,一層一層的往頂層訓練)采用無標定數(shù)據(jù)(有標定數(shù)據(jù)也可)分層訓練各層參數(shù),這一步可以看作是一個無監(jiān)督訓練過程,是和傳統(tǒng)神經(jīng)網(wǎng)絡區(qū)別最大的部分(這個過程可以看作是featurelearning過程):具體的,先用無標定數(shù)據(jù)訓練第一層,訓練時先學習第一層的參數(shù)(這一層可以看作是得到一個使得輸出和輸入差別最小的三層神經(jīng)網(wǎng)絡的隱層),由于模型capacity的限制以及稀疏性約束,使得得到的模型能夠?qū)W習到數(shù)據(jù)本身的結(jié)構(gòu),從而得到比輸入更具有表示能力的特征;在學習得到第n-1層后,將n-1層的輸出作為第n層的輸入,訓練第n層,由此分別得到各層的參數(shù);深度學習訓練過程深度學習訓練過程2)自頂向下的監(jiān)督學習(就是通過帶標簽的數(shù)據(jù)去訓練,誤差自頂向下傳輸,對網(wǎng)絡進行微調(diào))基于第一步得到的各層參數(shù)進一步fine-tune整個多層模型的參數(shù),這一步是一個有監(jiān)督訓練過程;第一步類似神經(jīng)網(wǎng)絡的隨機初始化初值過程,由于DL的第一步不是隨機初始化,而是通過學習輸入數(shù)據(jù)的結(jié)構(gòu)得到的,因而這個初值更接近全局最優(yōu),從而能夠取得更好的效果;所以deeplearning效果好很大程度上歸功于第一步的featurelearning過程。5.3卷積神經(jīng)網(wǎng)絡CNN03PART卷積神經(jīng)網(wǎng)絡CNN簡介什么是神經(jīng)網(wǎng)絡人工神經(jīng)網(wǎng)絡(ArtificialNeuralNetwork)簡稱神經(jīng)網(wǎng)絡(NN)神經(jīng)網(wǎng)絡其實就是按照一定規(guī)則連接起來的多個神經(jīng)元神經(jīng)元:f是激活函數(shù)每個連接都有一個權(quán)值卷積神經(jīng)網(wǎng)絡CNN簡介卷積神經(jīng)網(wǎng)絡(ConvolutionalNeuralNetwork,CNN)沿用了普通的神經(jīng)元網(wǎng)絡即多層感知器的結(jié)構(gòu),是一種前饋神經(jīng)網(wǎng)絡它的人工神經(jīng)元可以響應一部分覆蓋范圍內(nèi)的周圍單元,對于大型圖像處理有出色表現(xiàn)。卷積神經(jīng)網(wǎng)絡CNN簡介CNN基本結(jié)構(gòu)CNN的基本體系結(jié)構(gòu)通常由三種層構(gòu)成,分別是卷積層(Convolutionallayer)、池化層(Poolinglayer)和全連接層(Fully-connectedlayer)。不同類型操作在卷積神經(jīng)網(wǎng)絡中一般稱作“層”:卷積操作對應“卷積層”,匯合操作對應“匯合層”等CNN的最后一層將其目標任務(分類、回歸等)形式化為目標函數(shù)。卷積神經(jīng)網(wǎng)絡CNN簡介輸入層卷積層全連接層CNN處理圖片的優(yōu)勢在傳統(tǒng)神經(jīng)網(wǎng)絡中處理圖像時,第一層完全連接層的網(wǎng)絡將非常大這種連接方式是必須的嗎?可以簡化全連接網(wǎng)絡嗎?CNN處理圖片的優(yōu)勢因為圖像本身具有“二維空間特征”,通俗點說就是局部特性??匆粡堌埖膱D片,可能看到貓的眼鏡或者嘴巴就知道這是張貓片,如果可以用某種方式對一張圖片的某個典型特征識別,那么這張圖片的類別也就知道了。這個時候就產(chǎn)生了卷積的概念。CNN處理圖片的優(yōu)勢有些圖案比整個圖像小很多神經(jīng)元不必看到整個圖像。只需用用較少的參數(shù)連接到小區(qū)域即可發(fā)現(xiàn)目標。比如從圖中檢測“喙”--“喙”檢測器CNN處理圖片的優(yōu)勢當相同的模式出現(xiàn)在不同的區(qū)域時,可以使用相同的參數(shù)集來進行檢測。CNN處理圖片的優(yōu)勢對像素進行二次采樣不會改變目標對象??梢酝ㄟ^二次采樣使圖像變得更小使用更少的參數(shù)來處理圖像深度學習步驟深度學習就是如此簡單第一步卷積神經(jīng)網(wǎng)絡第二步改善性能第三步選擇最佳性能CNN結(jié)構(gòu)CNN結(jié)構(gòu)卷積層卷積的主要作用是抽取特征,使網(wǎng)絡具有一定轉(zhuǎn)移不變性,也有一定降維作用。在圖像處理中,卷積需要三個參數(shù):一個輸入圖像;將應用到圖像上的核矩陣;存儲卷積后的輸出結(jié)果的輸出圖像。卷積操作卷積層局部感知局部感知野是卷積神經(jīng)網(wǎng)絡可以降低參數(shù)數(shù)目的兩大神器之一全連接局部連接卷積層卷積核卷積層的參數(shù)包含一系列過濾器,即卷積核。每個過濾器訓練一個深度,有幾個過濾器輸出單元就具有多少深度。輸入單元大小是32×32×3,輸出單元的深度是5,輸入單元輸出單元過濾器(卷積核)卷積層卷積計算每個輸出單元只是連接輸入的一部分,但是值的計算方法是沒有變的,都是權(quán)重和輸入的點積,然后加上偏置。x=w=hj=f(卷積層權(quán)值共享如果經(jīng)過局部感知后參數(shù)仍然過多,那么就啟動第二級神器,即權(quán)值共享。權(quán)值共享是從一個局部區(qū)域?qū)W習到的信息,應用到圖像的其它地方去,即用一個相同的卷積核去卷積整幅圖像,相當于對圖像做一個全圖濾波。

卷積層權(quán)值共享

一個激活函數(shù)A需要檢測圖像左側(cè)有沒有鳥嘴,另外一個激活函數(shù)B需要檢測另外一張圖像中間有沒有類似的鳥嘴。卷積層權(quán)值共享

鳥嘴都可能具有同樣的特征,只需要一個激活函數(shù)C就可以了,這個時候,就可以共享同樣的權(quán)值參數(shù)(也就是卷積核)。卷積層多核卷積特征提取是不充分時,我們可以添加多個卷積核比如32個卷積核,可以學習32種特征。。

四個通道上的卷積操作兩個卷積核卷積層激活函數(shù)為解決線性不可分,在所有的隱層和輸出層加一個激活函數(shù)

Sigmoid函數(shù)卷積層激活函數(shù)為解決線性不可分,在所有的隱層和輸出層加一個激活函數(shù)

tanh函數(shù)Relu函數(shù)Elu函數(shù)池化層通過池化來降低卷積層輸出的特征向量,起到降維作用,同時改善結(jié)果(不易出現(xiàn)過擬合)分最大池化或平均池化。最大池化全連接層起“分類器”的作用幾個卷積和池化層之后,通常有一個或多個全連接層。它們將前一層所有的神經(jīng)元與當前層的每個神經(jīng)元相連接,即與標準神經(jīng)網(wǎng)絡各層之間的連接相同,在全連接層不保存空間信息。全連接圖全連接層全連接層可由卷積操作實現(xiàn)推導過程全連接網(wǎng)絡圖全連接層全連接層反向傳播一次訓練16張圖片,即batch_size=16,則我們可以把計算轉(zhuǎn)化為如下矩陣形式。反向傳播計算轉(zhuǎn)換權(quán)重求導偏置求導經(jīng)典CNN模型AlexNet2012年由Hinton學生Alex提出,是Lenet加寬版。引用了relu、dropout和lrn等trick,首次采用gpu加速。其包含65萬神經(jīng)元,5個卷積層,三個后面帶有池化池,最后用了三個全鏈接。經(jīng)典CNN模型VGGNet探索了卷積神經(jīng)網(wǎng)絡的深度與其性能之間的關系,反復堆疊3*3的小型卷積核與2*2的最大池化,構(gòu)建了16-19層深度的卷積神經(jīng)網(wǎng)絡。經(jīng)典CNN模型Googleinceptionnet1、去掉了最后的全聯(lián)接層,采用全局平均池化。2、精心設計了inceptionmodule提高了參數(shù)利用率。經(jīng)典CNN模型ResNet深度殘差網(wǎng)絡,它允許網(wǎng)絡盡可能的加深。identitymapping,指的就是圖中“彎彎的曲線”,residualmapping,指的就是除了”彎彎的曲線“那部分,輸出是y=F(x)+x。CNN應用場景計算機視覺圖像分類對象追蹤行為識別場景標記自然語言處理詞向量文本分類語音識別語音時頻譜CLDNN5.4循環(huán)神經(jīng)網(wǎng)絡RNN04PART5.4循環(huán)神經(jīng)網(wǎng)絡循環(huán)神經(jīng)網(wǎng)絡(RecurrentNeuralNetwork,RNN)是一類以序列(sequence)數(shù)據(jù)為輸入,在序列的演進方向進行遞歸(recursion)且所有節(jié)點(循環(huán)單元)按鏈式連接的遞歸神經(jīng)網(wǎng)絡(RecursiveNeuralNetwork),循環(huán)神經(jīng)網(wǎng)絡和遞歸神經(jīng)網(wǎng)絡都有同樣一個英文簡稱RNN。本節(jié)首先引入遞歸神經(jīng)網(wǎng)絡與循環(huán)神經(jīng)網(wǎng)絡的概念,接著詳細介紹了循環(huán)神經(jīng)網(wǎng)絡的前向計算方法和其重要的改進算法LSTM和Seq2Seq模型,并在此基礎上配套典型的實踐案例,并輔以可靠的數(shù)據(jù)源和完整的程序代碼,在最后一節(jié)介紹了遞歸神經(jīng)網(wǎng)絡的計算方法。5.1循環(huán)神經(jīng)網(wǎng)絡簡介遞歸神經(jīng)網(wǎng)絡(RNN)是兩種人工神經(jīng)網(wǎng)絡的總稱,一種是時間遞歸神經(jīng)網(wǎng)絡(RecurrentNeuralNetwork),另一種是結(jié)構(gòu)遞歸神經(jīng)網(wǎng)絡(RecursiveNeuralNetwork)[1]。現(xiàn)在大多數(shù)人把RecurrentNeuralNetwork稱作循環(huán)神經(jīng)網(wǎng)絡,一般RNNs都指循環(huán)神經(jīng)網(wǎng)絡。循環(huán)神經(jīng)網(wǎng)絡經(jīng)典結(jié)構(gòu)示意圖循環(huán)神經(jīng)網(wǎng)絡按時間展開循環(huán)神經(jīng)網(wǎng)絡對長度為N的序列展開后,可以視為一個有N個中間層的前饋神經(jīng)網(wǎng)絡。這個前饋神經(jīng)網(wǎng)絡沒有循環(huán)鏈接,因此可以直接使用反向傳播算法進行訓練,而不需要任何特別的優(yōu)化算法。這樣的訓練方法稱為“沿時間反向傳播”,是訓練循環(huán)神經(jīng)網(wǎng)絡最常見的方法。5.2循環(huán)神經(jīng)網(wǎng)絡前向計算遞歸神經(jīng)網(wǎng)絡的原始結(jié)構(gòu),可以簡單的看成是“輸入層=>隱藏層=>輸出層”的三層結(jié)構(gòu),加入了一個閉環(huán)。使用單層全連接神經(jīng)網(wǎng)絡作為循環(huán)體的循環(huán)神經(jīng)網(wǎng)絡結(jié)構(gòu)圖簡單的循環(huán)神經(jīng)網(wǎng)絡前向傳播importnumpyasnpX=[1,2]state=[0.0,0.0]#分開定義不同輸入部分的權(quán)重以方便操作w_cell_state=np.asarray([[0.1,0.2],[0.3,0.4]])w_cell_input=np.asarray([0.5,0.6])b_cell=np.asarray([0.1,-0.1])#定義用于輸出的全連接層參數(shù)w_output=np.asarray([[1.0],[2.0]])b_output=0.1簡單的循環(huán)神經(jīng)網(wǎng)絡前向傳播importnumpyasnpX=[1,2]state=[0.0,0.0]#分開定義不同輸入部分的權(quán)重以方便操作w_cell_state=np.asarray([[0.1,0.2],[0.3,0.4]])w_cell_input=np.asarray([0.5,0.6])b_cell=np.asarray([0.1,-0.1])#定義用于輸出的全連接層參數(shù)w_output=np.asarray([[1.0],[2.0]])b_output=0.1簡單的循環(huán)神經(jīng)網(wǎng)絡前向傳播(續(xù))#按照時間順序執(zhí)行循環(huán)神經(jīng)網(wǎng)絡的前向傳播過程foriinrange(len(X)):#計算循環(huán)體中的全連接層神經(jīng)網(wǎng)絡before_activation=np.dot(state,w_cell_state)+X[i]*w_cell_input+b_cellstate=np.tanh(before_activation)#根據(jù)當前時刻狀態(tài)計算最終輸出final_output=np.dot(state,w_output)+b_output#輸出每個時刻的信息print("beforeactivation:%f"%before_activation)print("state:%f"%state)print("output:%f"%final_output)注意事項理論上循環(huán)神經(jīng)網(wǎng)絡可以支持任意長度的序列,然而在實際訓練過程中,如果序列過長,一方面會導致訓練時出現(xiàn)梯度消失和梯度爆炸的問題;另一方面,展開后的循環(huán)神經(jīng)網(wǎng)絡會占用過過大的內(nèi)存,所以實際中會規(guī)定一個最大長度,當序列長度超過規(guī)定長度后會對序列進行截斷。遞歸神經(jīng)網(wǎng)絡遞歸神經(jīng)網(wǎng)絡(RecursiveNeuralNetwork),遞歸神經(jīng)網(wǎng)絡的縮寫和循環(huán)神經(jīng)網(wǎng)絡一樣,也是RNN因為神經(jīng)網(wǎng)絡的輸入層單元個數(shù)是固定的,因此必須用循環(huán)或者遞歸的方式來處理長度可變的輸入。循環(huán)神經(jīng)網(wǎng)絡實現(xiàn)了前者,通過將長度不定的輸入分割為等長度的小塊,然后再依次輸入到網(wǎng)絡中,從而實現(xiàn)了神經(jīng)網(wǎng)絡對變長輸入的處理。有時候把句子看作是詞的序列是不夠的該圖顯示了這句話的兩個不同的語法解析樹,可以看出來這句話有歧義,不同的語法解析樹則對應了不同的意思。遞歸神經(jīng)網(wǎng)絡的作用為了能夠讓模型區(qū)分出兩個不同的意思,我們的模型必須能夠按照樹結(jié)構(gòu)去處理信息,而不是序列,這就是遞歸神經(jīng)網(wǎng)絡的作用。這個語義向量空間滿足某類性質(zhì),比如語義相似的向量距離更近。也就是說,如果兩句話(盡管內(nèi)容不同)它的意思是相似的,那么把它們分別編碼后的兩個向量的距離也相近;反之,如果兩句話的意思截然不同,那么編碼后向量的距離則很遠。利用遞歸神經(jīng)網(wǎng)絡做情感分析遞歸神經(jīng)網(wǎng)絡在做情感分析時,可以比較好的處理否定句,這是勝過其他一些模型的遞歸神經(jīng)網(wǎng)絡的前向計算全連接神經(jīng)網(wǎng)絡tanh是激活函數(shù)(當然也可以用其它的激活函數(shù)),是偏置項,它也是一個維度為d的向量。如果讀過前面的章節(jié),相信大家已經(jīng)非常熟悉這些計算了,在此不做過多的解釋了。遞歸神經(jīng)網(wǎng)絡表示為樹形結(jié)構(gòu)然后,我們把產(chǎn)生的父節(jié)點的向量和其他子節(jié)點的向量再次作為網(wǎng)絡的輸入,再次產(chǎn)生它們的父節(jié)點。如此遞歸下去,直至整棵樹處理完畢。遞歸神經(jīng)網(wǎng)絡表示的不同含義句子的樹形結(jié)構(gòu)遞歸神經(jīng)網(wǎng)絡的訓練先推導將誤差從父節(jié)點傳遞到子節(jié)點的公式netp是父節(jié)點的加權(quán)輸入,則:展開式:反向誤差傳遞求誤差函數(shù)E對cjk的導數(shù)將誤差項從父節(jié)點傳遞到其子節(jié)點的公式有了傳遞一層的公式,我們就不難寫出逐層傳遞的公式。反向誤差傳遞全景圖權(quán)重梯度的計算及權(quán)重更新如果使用梯度下降優(yōu)化算法,那么權(quán)重更新公式為:同理,偏置項的更新公式為:5.5長短時記憶網(wǎng)絡LSTM05PART當前預測位置和相關信息之間的文本間隔不斷增大時,簡單循環(huán)神經(jīng)網(wǎng)絡有可能會喪失學習到距離如此遠的信息的能力,或者在復雜語言場景中,有用信息的間隔有大有小、長短不一,循環(huán)神經(jīng)網(wǎng)絡的性能也會受到限制。LSTM是擁有三個“門”結(jié)構(gòu)的特殊網(wǎng)絡結(jié)構(gòu)。圖5-4LSTM單元結(jié)構(gòu)示意圖上圖中“遺忘門”和“輸入門”可以使神經(jīng)網(wǎng)更有效的保存長期記憶?!斑z忘門”的作用是讓循環(huán)神經(jīng)網(wǎng)絡忘記之前沒有用的信息。5.5長短時記憶網(wǎng)絡LSTM前向計算LSTM每個“門”的公式具體定義如下:輸入值:輸入門:遺忘門:輸出門:新狀態(tài):輸出:其中

是4個維度為[2n,n]的參數(shù)矩陣。TensorFlow中實現(xiàn)使用LSTM結(jié)構(gòu)的循環(huán)神經(jīng)網(wǎng)絡的前向傳播#定義一個LSTM結(jié)構(gòu)。在Tensorflow中通過一句簡單的命令就可以實現(xiàn)一個完整的LSTM結(jié)構(gòu)。LSTM中使用的變量也會在該函數(shù)中自動被聲明。lstm=tf.nn.rnn.cell.BasicLSTMCell(lstm_hidden_size)#將LSTM中的狀態(tài)初始化為全0數(shù)組。BasicLSTMCell類提供了zero_state函數(shù)來生成全0初始狀態(tài)。state是一個包含兩個張量的LSTMStateTuple類,其中state.c和state.h分別對應了上述c狀態(tài)和h狀態(tài)。和其他神經(jīng)網(wǎng)絡類似,在優(yōu)化循環(huán)神經(jīng)網(wǎng)絡時,每次也會使用一個batch的訓練樣本。在以下代碼中,batch_size給出了一個batch的大小。state=lstm.zero_state(batch_size,tf.float32)#定義損失函數(shù)loss=0.0TensorFlow中實現(xiàn)使用LSTM結(jié)構(gòu)的循環(huán)神經(jīng)網(wǎng)絡的前向傳播#雖然在測試時循環(huán)神經(jīng)網(wǎng)絡可以處理任意長度的序列,但是在訓練中為了將循環(huán)神經(jīng)網(wǎng)絡展開成前饋神經(jīng)網(wǎng)絡,我們需要知道訓練數(shù)據(jù)的序列長度。在以下代碼中,用num_steps來表示這個長度。后面會介紹使用dynamic_rnn動態(tài)處理變長序列的方法。foriinrange(num_steps):#在第一時刻聲明LSTM結(jié)構(gòu)中使用的變量,在之后的時刻都需要復用之前定義好的變量。ifi>0:tf.get_variable_scpoe.reuse_variables()TensorFlow中實現(xiàn)使用LSTM結(jié)構(gòu)的循環(huán)神經(jīng)網(wǎng)絡的前向傳播#每一步處理時間序列中的一個時刻。將當前輸入current_input和前一時刻狀態(tài)state(h_t-1和c_t-1)傳入定義的LSTM結(jié)構(gòu)可以得到當前LSTM的輸出lstm_output(ht)和更新后狀態(tài)state(ht和ct)。lstm_output用于輸出。#給其他層,state用于輸出給下一時刻,他們在dropout等方面可以有不同的處理方式。lstm_output,state=lstm(current_input,state)#將當前時刻LSTM結(jié)構(gòu)的輸出傳入一個全連接層,得到最后的輸出。final_output=fully_connected(lstm_output)#計算當前時刻輸出的損失。loss+=calc_loss(final_output,expected_output)#使用常規(guī)神經(jīng)網(wǎng)絡的方法訓練模型。5.3.3實驗:利用LSTM模型生成古詩1.實驗內(nèi)容介紹基于TensoFlow構(gòu)建兩層的RNN,采用4萬多首唐詩作為訓練數(shù)據(jù),實現(xiàn)可以寫古詩的AIdemo。2.實驗步驟古詩清洗、過濾較長或較短古詩、過濾即非五言也非七言古詩、為每個字生成唯一的數(shù)字ID、每首古詩用數(shù)字ID表示兩層RNN網(wǎng)絡模型,采用LSTM模型;訓練LSTM模型;生成古詩,隨機取一個漢字,根據(jù)該漢字生成一首古詩。5.3.3實驗:利用LSTM模型生成古詩實驗文件及代碼1)清洗數(shù)據(jù):generate_poetry.py直接從該網(wǎng)址下載訓練數(shù)據(jù):/poetry/poetry數(shù)據(jù)中的每首唐詩以[開頭、]結(jié)尾,后續(xù)生成古詩時,根據(jù)[隨機取一個字,根據(jù)]判斷是否結(jié)束。兩種詞袋:“漢字=>數(shù)字”、“數(shù)字=>漢字”,根據(jù)第一個詞袋將每首古詩轉(zhuǎn)化為數(shù)字表示。詩歌的生成是根據(jù)上一個漢字生成下一個漢字,所以x_batch和y_batch的shape是相同的,y_batch是x_batch中每一位向前循環(huán)移動一位。前面介紹每首唐詩[開頭、]結(jié)尾,在這里也體現(xiàn)出好處,]下一個一定是[(即一首詩結(jié)束下一首詩開始)數(shù)據(jù)預處理的基本思路logo數(shù)據(jù)預處理的舉例具體可以看下面例子:x_batch:['[',12,23,34,45,56,67,78,']']y_batch:[12,23,34,45,56,67,78,']','[']在/home/ubuntu目錄下創(chuàng)建源文件generate_poetry.py,文件詳細編碼可在此地址下載:/zlanngao/deeplearning/blob/master/5.3.3/generate_poetry.py操作過程在終端執(zhí)行:啟動python:python構(gòu)建數(shù)據(jù):fromgenerate_poetryimportPoetryp=Poetry()查看第一首唐詩數(shù)字表示([查看輸出]):print(p.poetry_vectors[0])根據(jù)ID查看對應的漢字([查看輸出]):print(p.id_to_word[1101])根據(jù)漢字查看對應的數(shù)字([查看輸出]):print(p.word_to_id[u"寒"])查看x_batch、y_batch([查看輸出]):x_batch,y_batch=p.next_batch(1)x_batchy_batch22)LSTM模型學習—poetry_model.py在模型訓練過程中,需要對每個字進行向量化,Embedding的作用按照inputs順序返回embedding中的對應行,類似:importnumpyasnpembedding=np.random.random([100,10])inputs=np.array([7,17,27,37])print(embedding[inputs])在/home/ubuntu目錄下創(chuàng)建源文件poetry_model.py,文件詳細編碼可在此地址下載:/zlanngao/deeplearning/blob/master/5.3.3/poetry_model.py23)訓練LSTM模型—poetry_model.py每批次采用50首唐詩訓練,訓練40000次后,損失函數(shù)基本保持不變,GPU大概需要2個小時左右。當然也可以調(diào)整循環(huán)次數(shù),節(jié)省訓練時間,或者直接下載已經(jīng)訓練好的模型。wget/poetry/poetry_model.zipunzippoetry_model.zip在/home/ubuntu目錄下創(chuàng)建源文件train_poetry.py,文件詳細編碼可在此地址下載:/zlanngao/deeplearning/blob/master/5.3.3/train_poetry.py然后執(zhí)行(如果已下載模型,可以省略此步驟):cd/home/ubuntu;pythontrain_poetry.py24)模型測試—predict_poetry.py根據(jù)[隨機取一個漢字,作為生成古詩的第一個字,遇到]結(jié)束生成古詩。在/home/ubuntu目錄下創(chuàng)建源文件predict_poetry.py,文件詳細編碼可在此地址下載:/zlanngao/deeplearning/blob/master/5.3.3/predict_poetry.py然后執(zhí)行:cd/home/ubuntu;pythonpredict_poetry.py執(zhí)行結(jié)果:風雨滿風吹日夜,不同秋草不歸情。山風欲見寒山水,山外寒流雨半風。夜日春光猶見遠,一時相思獨傷情。自應未肯為心客,獨與江南去故鄉(xiāng)。5.4循環(huán)神經(jīng)網(wǎng)絡其他變形及應用5.4.1GRU單元GRU通過引入重置門和遺忘門來解決長期依賴問題,相對于LSTM有更少參數(shù)并且在某些問題上,效果好于LSTM。重置門如果重置門關閉,會忽略掉歷史狀態(tài),即將歷史不相干的信息不會影響未來的輸出。遺忘門遺忘門能夠控制歷史信息對當前輸出的影響,如果遺忘門接近1,此時會把歷史信息傳遞下去。節(jié)點狀態(tài)輸出5.4.1GRU單元5.4.2序列到序列模型序列到序列模型(Seq2Seq)是循環(huán)神經(jīng)網(wǎng)絡的升級版,其聯(lián)合了兩個循環(huán)神經(jīng)網(wǎng)絡。一個神經(jīng)網(wǎng)絡負責接收源句子;另一個循環(huán)神經(jīng)網(wǎng)絡負責將句子輸出成翻譯的語言。翻譯的每句話的輸入長度和輸出長度一般來講都是不同的,而序列到序列的網(wǎng)絡結(jié)構(gòu)的優(yōu)勢在于不同長度的輸入序列能夠能到任意長度的輸出序列。Seq2Seq可以解決很多不定長輸入到輸出的變換問題,等價于編碼和解碼模型,即編碼階段將不定長輸入編碼成定長向量;解碼階段對輸出進行解碼。其中序列是輸入序列,WXYZ是輸出序列,EOS是結(jié)束符號。模型分為兩個階段編碼encode階段解碼decode階段編碼過程,可以使用標準的RNN模型,最后輸出一個向量C解碼過程,也可以使用一個標準的RNN模型進行解碼解析:序列到序列模型5.4.3實驗:基于Seq2Seq模型的聊天機器人1.實驗內(nèi)容介紹基于TensoFlow構(gòu)建Seq2Seq模型,并加入Attention機制,encoder和decoder為3層的RNN網(wǎng)絡[8]。2.實驗步驟清洗數(shù)據(jù)、提取ask數(shù)據(jù)和answer數(shù)據(jù)、提取詞典、為每個字生成唯一的數(shù)字ID、ask和answer用數(shù)字ID表示;TensorFlow中TranslateDemo,由于出現(xiàn)deepcopy錯誤,這里對Seq2Seq稍微改動了;訓練Seq2Seq模型;進行聊天。5.4.3實驗:基于Seq2Seq模型的聊天機器人3.實驗文件及代碼1)清洗數(shù)據(jù):genera

溫馨提示

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

評論

0/150

提交評論