Python數(shù)據(jù)挖掘算法與應(yīng)用 課件 第10章 深度學(xué)習(xí)簡介_第1頁
Python數(shù)據(jù)挖掘算法與應(yīng)用 課件 第10章 深度學(xué)習(xí)簡介_第2頁
Python數(shù)據(jù)挖掘算法與應(yīng)用 課件 第10章 深度學(xué)習(xí)簡介_第3頁
Python數(shù)據(jù)挖掘算法與應(yīng)用 課件 第10章 深度學(xué)習(xí)簡介_第4頁
Python數(shù)據(jù)挖掘算法與應(yīng)用 課件 第10章 深度學(xué)習(xí)簡介_第5頁
已閱讀5頁,還剩78頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第10章

深度學(xué)習(xí)簡介IntroductiontoDeepLearning深度學(xué)習(xí)概述10.2學(xué)習(xí)目標(biāo)10.110.310.4感知機前饋神經(jīng)網(wǎng)絡(luò)反向傳播算法10.5卷積神經(jīng)網(wǎng)絡(luò)10.6循環(huán)神經(jīng)網(wǎng)絡(luò)10.7生成對抗網(wǎng)絡(luò)1深度學(xué)習(xí)概述OverviewofPredictiveModelsChapter01基本概念深度學(xué)習(xí)(DL,DeepLearning)是機器學(xué)習(xí)(ML,MachineLearning)領(lǐng)域中一個新的研究方向,它被引入機器學(xué)習(xí)使其更接近于最初的目標(biāo)——人工智能(AI,ArtificialIntelligence)。[1]深度學(xué)習(xí)是學(xué)習(xí)樣本數(shù)據(jù)的內(nèi)在規(guī)律和表示層次,這些學(xué)習(xí)過程中獲得的信息對諸如文字、圖像和聲音等數(shù)據(jù)的解釋有很大的幫助。它的最終目標(biāo)是讓機器能夠像人一樣具有分析學(xué)習(xí)能力,能夠識別文字、圖像和聲音等數(shù)據(jù)。深度學(xué)習(xí)是一個復(fù)雜的機器學(xué)習(xí)算法,在語音和圖像識別方面取得的效果,遠遠超過先前相關(guān)技術(shù)。人工智能、機器學(xué)習(xí)和深度學(xué)習(xí)的關(guān)系2016年年初,由DeepMind公司研發(fā)的AlphaGo以4:1的成績擊敗了曾18次榮獲世界冠軍的圍棋選手李世石(LeeSedol)。AlphaGo聲名鵑起,一時間“人工智能”、“機器學(xué)習(xí)”、“深度神經(jīng)網(wǎng)絡(luò)”和“深度學(xué)習(xí)”的報道在媒體鋪天蓋地般的宣傳下席卷了全球,那么“人工智能”、“機器學(xué)習(xí)”、“深度神經(jīng)網(wǎng)絡(luò)”和“深度學(xué)習(xí)”之間有怎么樣的關(guān)系呢?人工智能自20世紀(jì)50年代提出以來,經(jīng)過幾十年的發(fā)展,目前研究的問題包括知識表現(xiàn)、智能搜索、推理、規(guī)劃、機器學(xué)習(xí)與知識獲取、組合調(diào)度問題、感知問題、模式識別、邏輯程序設(shè)計軟計算、不精確和不確定的管理等。人工智能包括機器學(xué)習(xí),機器學(xué)習(xí)主要解決的問題為分類、回歸和關(guān)聯(lián),其中最具代表性的有支持向量機、決策樹、邏輯回歸、樸素貝葉斯等算法。人工智能、機器學(xué)習(xí)和深度學(xué)習(xí)的關(guān)系深度學(xué)習(xí)是機器學(xué)習(xí)中的重要分支,由神經(jīng)網(wǎng)絡(luò)深化而來,如圖10.1所示。人工智能

知識表現(xiàn)智能搜索推理規(guī)劃機器學(xué)習(xí)與知識獲取組合調(diào)度問題感知問題模式識別邏輯程序設(shè)計軟計算不精確不確定的管理機器學(xué)習(xí)

分類回歸關(guān)聯(lián)深度學(xué)習(xí)

深度神經(jīng)網(wǎng)絡(luò)深度置信網(wǎng)絡(luò)深度強化學(xué)習(xí)圖10.1人工智能、機器學(xué)習(xí)、深度神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)之間的關(guān)系深度學(xué)習(xí)發(fā)展歷程早期絕大多數(shù)機器學(xué)習(xí)與信號處理技術(shù)都使用淺層結(jié)構(gòu),在這些淺層結(jié)構(gòu)中一般含有一到兩層非線性特征變換,常見的淺層結(jié)構(gòu)包括支持向量機、高斯混合模型、條件隨機場、邏輯回歸等。但研究已經(jīng)證明,淺層結(jié)構(gòu)在解決大多數(shù)簡單問題或者有較多限制條件的問題上效果明顯,但是受制于有限的建模和表示能力,在遇到一些復(fù)雜的涉及自然信號的問題(如人類語言、聲音、圖像與視覺場景等)時就會陷入困境。受人類信息處理機制的啟發(fā),研究者們開始模仿視覺和聽覺等系統(tǒng)中的深度層次化結(jié)構(gòu)、從豐富的感官輸入信號中提取復(fù)雜結(jié)構(gòu)并構(gòu)建內(nèi)部表示,提出了更高效的深度學(xué)習(xí)方法。追測到20世紀(jì)40年代、美國著名的控制論學(xué)家WarrenMaculloach和邏輯學(xué)家WalterPitts在分析與總結(jié)了生物神經(jīng)元的基本特征后,設(shè)計了一種人工神經(jīng)元模型,并指出了它們運行簡單邏輯運算的機制,這種簡單的神經(jīng)元被稱為M-P神經(jīng)元。20世紀(jì)40年代末,心理學(xué)家DonaldHebbian在生物神經(jīng)可塑性機制的基礎(chǔ)上提出了一種無監(jiān)督學(xué)習(xí)規(guī)則,稱為Hebbian學(xué)習(xí),同期AlanTuring的論文中描述了一種“B型圖靈機”,之后,研究人員將Hebbian學(xué)習(xí)的思想應(yīng)用到“B型圖靈機”上。到了1958年,Rosenblatt提出可以模擬人類感知能力的神經(jīng)網(wǎng)絡(luò)模型——稱之為感知機(Perceptron),并提出了一種接近于人類學(xué)習(xí)過程的學(xué)習(xí)算法,通過迭代、試錯使得模型逼近正解。深度學(xué)習(xí)發(fā)展歷程在這一時期,神經(jīng)網(wǎng)絡(luò)在自動控制、模式識別等眾多應(yīng)用領(lǐng)域取得了顯著的成效,大量的神經(jīng)網(wǎng)絡(luò)計算器也在科學(xué)家們的努力中問世,神經(jīng)網(wǎng)絡(luò)從萌芽期進入第一個發(fā)展高潮。但是,好景不長,1969年Minsky和Papert指出了感知機網(wǎng)絡(luò)的兩個關(guān)鍵缺陷:第一個是感知機無法處理異或回路問題;第二個是當(dāng)時的計算資源嚴(yán)重制約了大型神經(jīng)網(wǎng)絡(luò)所需要的計算。以上兩大缺陷使得大批研究人員對神經(jīng)網(wǎng)絡(luò)失去了信心,神經(jīng)網(wǎng)絡(luò)的研究進入了十多年的“冰河期”。1975年Werbos博士在論文中發(fā)表了反向傳播算法,使得訓(xùn)練多層神經(jīng)網(wǎng)絡(luò)模型成為現(xiàn)實。1983年JohnHopfield提出了一種用于聯(lián)想記憶和優(yōu)化計算的神經(jīng)網(wǎng)絡(luò)、稱為Hopfield網(wǎng)絡(luò),在旅行商問題上獲得了突破。受此啟發(fā),GeoffreyHinton于1984年提出了一種隨機化版本的Hopfield網(wǎng)絡(luò)——玻爾茲曼機。1989年YannLecun將反向傳播算法應(yīng)用到卷積神經(jīng)網(wǎng)絡(luò),用于識別郵政手寫數(shù)字并投入真實應(yīng)用。深度學(xué)習(xí)發(fā)展歷程神經(jīng)網(wǎng)絡(luò)的研究熱潮剛起,支持向量機和其它機器學(xué)習(xí)算法卻更快地流行起來,神經(jīng)網(wǎng)絡(luò)雖然構(gòu)建簡單,通過增加神經(jīng)元數(shù)量、堆疊網(wǎng)絡(luò)層就可以增強網(wǎng)絡(luò)的能力、但是付出的代價是指數(shù)級增長的計算量。20世紀(jì)末期的計算機性能和數(shù)據(jù)規(guī)模不足以支持訓(xùn)練大規(guī)模的神經(jīng)網(wǎng)絡(luò),相比之下Vapnik基于統(tǒng)計學(xué)習(xí)理論提出了支持向量機(SupportVectorMachine,SVM),通過核(kernel)技巧把非線性問題轉(zhuǎn)換成線性問題,其理論基礎(chǔ)清晰、證明完備,具有較好的可解釋性,得到了廣泛認同。同時,統(tǒng)計機器學(xué)習(xí)專家從理論角度懷疑神經(jīng)網(wǎng)絡(luò)的泛化能力,使得神經(jīng)網(wǎng)絡(luò)的研究又一次陷入了低潮。2006年Hinton等人提出用限制玻爾茲曼機(RestrietedBoltzamannMachine)通過非監(jiān)督學(xué)習(xí)的方式建模神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu),再由反向傳播算法學(xué)習(xí)網(wǎng)絡(luò)內(nèi)部的參數(shù),使用逐層預(yù)訓(xùn)練的方法提取數(shù)據(jù)的高維特征。逐層預(yù)訓(xùn)練的技巧后來被推廣到不同的神經(jīng)網(wǎng)絡(luò)架構(gòu)上,極大地提高了神經(jīng)網(wǎng)絡(luò)的泛化能力。而隨著計算機硬件能力的提高,特別是圖形處理器(GraphiesProcessingUnit,GPU)強大的并行計算能力非常適合神經(jīng)網(wǎng)絡(luò)運行時的矩陣運算,計算機硬件平臺可以為更多層的神經(jīng)網(wǎng)絡(luò)提供足夠的算力支持,使得神經(jīng)網(wǎng)絡(luò)的層數(shù)不斷加深,因此以Hinton為代表的研究人員將不斷變深的神經(jīng)網(wǎng)絡(luò)重新定義為深度學(xué)習(xí)。深度學(xué)習(xí)發(fā)展歷程2012年,Hinton的學(xué)生AlexKrizhevsky在計算機視覺領(lǐng)域聞名的ImageNet分類比賽中脫穎而出,以高出第二名10個百分點的成績震驚四座。而發(fā)展到現(xiàn)在,隨著深度神經(jīng)網(wǎng)絡(luò)不斷加深,能力不斷加強,其對照片的分類能力已經(jīng)超過人類,2010-2016年的ImageNet分類錯誤率從0.28%降到了0.03%;物體識別的平均準(zhǔn)確率從0.23%上升到了0.66%。深度學(xué)習(xí)方法不僅在計算機領(lǐng)域大放異彩,也在無人駕駛、自然語言處理、語音識別與金融大數(shù)據(jù)分析方面都有廣泛應(yīng)用。2感知機RegressionAnalysisPredictionModelChapter02感知機的起源感知機算法是由美國科學(xué)家FrankRosenblatt在1957年提出的,它是一種十分簡單易實現(xiàn)的機器學(xué)習(xí)方法,但它也是很多知名方法的起源,由此揭開了人工神經(jīng)網(wǎng)絡(luò)研究的序幕。感知機接收多個輸入信號,輸出一個信號,如圖10.2所示。x2x1x3yw1w2w3圖10.2接收三個輸入信號的感知機感知機的起源圖10.2中感知機接收三個信號,其結(jié)構(gòu)非常簡單,x1、x2、x3代表人們選擇的輸入信號(Input),y為輸出信號(Output),w1、w2、w3為感知機內(nèi)部的參數(shù),稱為權(quán)重(Weight),圖中的○通常稱為“神經(jīng)元”或者“節(jié)點”。輸入信號與權(quán)重相乘后求和,與一個閾值θ比較輸出0或1,用數(shù)學(xué)式來表達為:(10-1)感知機的多個輸入信號都有各自的權(quán)重,權(quán)重越大,對應(yīng)信號的重要性就越高。為了表達簡潔,我們用向量的形式重寫上式,其中w和x都是向量,向量中的元素分別代表權(quán)重與輸入,并使用偏置(Bias)代表閾值,令b=-θ,則有:(10-2)感知機的起源當(dāng)輸出1時,稱此神經(jīng)元被激活。其中權(quán)重w是體現(xiàn)輸入信號重要性的參數(shù),而偏置b是調(diào)整神經(jīng)元被激活容易程度的參數(shù),此處我們稱w為權(quán)重,稱b為偏置,但參照上下文有時也會將w、b統(tǒng)稱為權(quán)重。用感知機解決一個簡單的問題:使用感知機來實現(xiàn)含有兩個輸入的與門(ANDgate)。由與門的真值表y1(表10.1)可以知道,與門僅在兩個輸入為1時輸出1,否則輸出0。表10.1二輸入與門、與非門、或門真值表x1x2y1y2y3y4000100010111100111111010感知機的起源使用感知機來表示這個與門y1需要做的就是設(shè)置感知機中的參數(shù),設(shè)置參數(shù)w=[1,1]和b=-1,可以驗證,感知機滿足表10.1第3欄y1的條件;設(shè)置參數(shù)w=[0.5,0.5]和b=―0.6也可以滿足表10.1第3欄y1的條件。實際上,滿足表10.1第3欄y1的條件的參數(shù)有無數(shù)多個。那么對于含有兩個輸入的與非門(NANDgate)呢?對照與非門的真值表y2,設(shè)置參數(shù)w=[-0.2,-0.2],b=0.3可以讓感知機表達與非門y2;設(shè)置參數(shù)w=[0.4,0.5],b=-0.3可以讓感知機表達或門(ORgate)y3,真值表如表10.1第四欄y2和第五欄y3所示。感知機的起源如上,我們已經(jīng)使用感知機表達了與門、與非門、或門,而其中重要的一點是我們使用的感知機的形式是相同的,只有參數(shù)的權(quán)重與閾值不同。而這里決定感知機參數(shù)的不是計算機而是人,對權(quán)重和偏置賦予了不同值而讓感知機實現(xiàn)了不同的功能??雌饋砀兄獧C只不過是一種新的邏輯門,沒有特別之處。但是,我們可以設(shè)計學(xué)習(xí)算法(LearningAlgorithm),使得計算機能夠自動地調(diào)整感知的權(quán)重和偏移,而不需要人的直接干預(yù)。這些學(xué)習(xí)算法使得我們能夠用一種根本上區(qū)別于傳統(tǒng)邏輯門的方法使用感知機,不需要手工設(shè)置參數(shù),也無須顯式地排布邏輯門組成電路,取而代之地,可以通過簡單的學(xué)習(xí)來解決問題。感知機的局限性

感知機所面臨的問題主要分為兩個方面,一方面是這類算法只能處理線性可分的問題,即它只能表示由一條直線分割的空間,對于線性不可分的問題,簡單的單層感知機沒有可行解,一個代表性的例子就是感知機的異或門(XORGate)問題,如表10.1第六欄y4所示。我們已經(jīng)使用感知機來表示與門、與非門和或門,但是對于這種邏輯電路門,找不出一組合適的參數(shù)w和b來滿足表10.1第六欄y4的條件。將或門和異或門的響應(yīng)可視化,如圖10.3所示。圖10.3感知機局限性示意圖-0.50-0.500.000.000.501.001.500.501.001.50-0.50-0.500.000.000.501.001.500.501.001.50ORgateXORgate感知機的局限性

對于圖10.3中左側(cè)的或門,對應(yīng)的感知機表示如下:上式所示的感知機會生成由直線x1+x2-0.5=0分割開的兩個空間,其中一個空間輸出1,另一個空間輸出0,或門在(x1,x2)=(0.0)處輸出0,在(x1,x2)處為(0,1)、(1,0)和(1,1)處輸出1,而直線x1+x2-0.5=0正確地分割開了這四個點。而對于異或門,想用一條直線將不同標(biāo)記的點分開是不可能做到的。感知機需要人工選擇特定的特征作為輸入,這就意味著很多的問題被轉(zhuǎn)移到了如何提取特征,使得特征的線性關(guān)系得以解決,對于這樣的特征,還是需要人來提取,感知機愛莫能助,這就極大地限制了感知機的應(yīng)用,而對于研究者而言,最緊迫的任務(wù)是如何自動提取這些復(fù)雜的特征,然而當(dāng)研究者找到自動提取特征的方法時,感知機已經(jīng)陷入了寒冬二十余年。1975年,Werbos博士在其論文中證明將多層感知機堆疊成神經(jīng)網(wǎng)絡(luò)、并利用反向傳播算法訓(xùn)練神經(jīng)網(wǎng)絡(luò)自動學(xué)習(xí)參數(shù)、解決了“異或門”等問題,圖10.4給出了多層感知機對于“異或門“的可行解。感知機的局限性

對于圖10.3中左側(cè)的或門,對應(yīng)的感知機表示如下:上式所示的感知機會生成由直線x1+x2-0.5=0分割開的兩個空間,其中一個空間輸出1,另一個空間輸出0,或門在(x1,x2)=(0.0)處輸出0,在(x1,x2)處為(0,1)、(1,0)和(1,1)處輸出1,而直線x1+x2-0.5=0正確地分割開了這四個點。而對于異或門,想用一條直線將不同標(biāo)記的點分開是不可能做到的。感知機需要人工選擇特定的特征作為輸入,這就意味著很多的問題被轉(zhuǎn)移到了如何提取特征,使得特征的線性關(guān)系得以解決,對于這樣的特征,還是需要人來提取,感知機愛莫能助,這就極大地限制了感知機的應(yīng)用,而對于研究者而言,最緊迫的任務(wù)是如何自動提取這些復(fù)雜的特征,然而當(dāng)研究者找到自動提取特征的方法時,感知機已經(jīng)陷入了寒冬二十余年。1975年,Werbos博士在其論文中證明將多層感知機堆疊成神經(jīng)網(wǎng)絡(luò)、并利用反向傳播算法訓(xùn)練神經(jīng)網(wǎng)絡(luò)自動學(xué)習(xí)參數(shù)、解決了“異或門”等問題,圖10.4給出了多層感知機對于“異或門“的可行解。感知機的局限性

圖10.4多層感知機y1y3y2x1x2使用三個簡單感知機y1、y2、y3,組成一個兩層的感知機,可以滿足表10.1中的異或門y4響應(yīng)條件,感知機y1、y2、y3的形式如下面3個式子所示。不難驗證這個兩層的感知機對輸入信號的響應(yīng)與異或門一致。3前饋神經(jīng)網(wǎng)絡(luò)OverviewofPredictiveModelsChapter03前饋神經(jīng)網(wǎng)絡(luò)

解決感知機困境的方法就是將感知機堆疊,進而形成多層神經(jīng)網(wǎng)絡(luò),研究者們也稱為深度神經(jīng)網(wǎng)絡(luò)(DeepNeuralNetwork,DNN)。神經(jīng)元

神經(jīng)元(Neuron)是構(gòu)成神經(jīng)網(wǎng)絡(luò)的基本單元,它主要是模擬生物神經(jīng)元的結(jié)構(gòu)和特性,接受一組輸入信號并產(chǎn)生輸出?,F(xiàn)代人工神經(jīng)元模型由連接、求和節(jié)點和激活函數(shù)組起,如圖10.5所示。Σf()x1x2xn...圖10.5人工神經(jīng)元結(jié)構(gòu)示意圖圖10.5中Σ表示求和,f()表示激活函數(shù)。神經(jīng)元

神經(jīng)元接受n個輸入信號x1,x2,…,xn,用向量x=[x1,x2,…,xn]表示,神經(jīng)元中的加權(quán)和稱為凈輸入(NetInput)。(10-3)回顧一下感知機的表達式:并將其形式改寫成:y=f(x),在引入了函數(shù)f(x)后,感知機就可以寫成神經(jīng)元的形式,輸入信號會被f(x)轉(zhuǎn)換,轉(zhuǎn)換后的值就是輸出y。這種將輸入信號的總和轉(zhuǎn)換為輸出信號的函數(shù)稱為激活函數(shù)(ActivationFunction)。f(x)表示的激活函數(shù)以閾值為界,一旦輸入超過閥值就切換輸出,這樣的函數(shù)稱為階躍函數(shù)(StepFunction),可以說感知機是使用階躍函數(shù)作為激活函數(shù)。實際上,當(dāng)我們將階躍函數(shù)換作其它的激活函數(shù)時,就開始進入神經(jīng)網(wǎng)絡(luò)的世界了,那么為什么需要使用激活函數(shù)呢?又有哪些激活函數(shù)可供使用呢?神經(jīng)元

首先討論第一個問題,之前介紹的感知機無法解決線性不可分的問題,是因為這類線性模型的表達力不夠,從輸入到加權(quán)求和都是線性運算,而激活函數(shù)一般是非線性的,為神經(jīng)網(wǎng)絡(luò)引入了非線性因素,這樣才能逼近更復(fù)雜的數(shù)據(jù)分布,激活函數(shù)也限制了輸出的范圍,控制該神經(jīng)元是否激活。激活函數(shù)對于神經(jīng)網(wǎng)絡(luò)有非常重要的意義,它提升非線性表達能力,緩解梯度消失問題,將特征圖映射到新的特征空間以加速網(wǎng)絡(luò)收斂等。不同的激活函數(shù)對神經(jīng)網(wǎng)絡(luò)的訓(xùn)練與預(yù)測都有不同的影響,接下來討論第二個問題,詳細介紹神經(jīng)網(wǎng)絡(luò)中經(jīng)常使用的激活函數(shù)及它們的特點。神經(jīng)元1.sigmoidsigmoid函數(shù)是一個在生物學(xué)中常見的S型函數(shù),也稱為S型生長曲線,在信息學(xué)科中也稱為Logistic函數(shù)。sigmoid函數(shù)可以使輸出平滑面連續(xù)地限制在0~1,在0附近表現(xiàn)為近似線性函數(shù),而遠離0的區(qū)域表現(xiàn)出非線性,輸入越小,越接近于0;輸入越大,越接近于1。sigmoid函數(shù)的數(shù)學(xué)表達式為:(10-4)其函數(shù)圖像如圖10.6所示。圖10.6sigmoid函數(shù)與感知機使用的階躍激活函數(shù)相比,sigmoid函數(shù)是連續(xù)可導(dǎo)的,其數(shù)學(xué)性質(zhì)更好。sigmoid函數(shù)的導(dǎo)數(shù)如下:

1-1xy0神經(jīng)元1.sigmoidsigmoid函數(shù)的導(dǎo)數(shù)可直接用函數(shù)的輸出計算,簡單高效,但sigmoid函數(shù)的輸出恒大于0。非零中心化的輸出會使得其后一層的神經(jīng)元的輸入發(fā)生偏置偏移,可能導(dǎo)致梯度下降的收斂速度變慢。另一個缺點是sigmoid函數(shù)導(dǎo)致的梯度消失問題,由上面sigmoid函數(shù)的導(dǎo)數(shù)表達式可知在遠離0的兩端,導(dǎo)數(shù)值趨于0,梯度也趨于0,此時神經(jīng)元的權(quán)重?zé)o法再更新,神經(jīng)網(wǎng)絡(luò)的訓(xùn)練變得困難。

神經(jīng)元2.tanhtanh函數(shù)繼承自sigmoid函數(shù),改進了sigmoid變化過于平緩的問題,它將輸入平滑地限制在-1~1的范圍內(nèi)。tanh函數(shù)的數(shù)學(xué)表達式為:

即(10-5)其函數(shù)圖像如圖10.7所示。圖10.7tanh函數(shù)tanh函數(shù)的導(dǎo)數(shù)為:對比tanh函數(shù)和sigmoid函數(shù)圖像以及式(10-5)可以看出,其實tanh函數(shù)就是sigmoid函數(shù)的縮放平移版。tanh函數(shù)的輸出是以零為中心的,解決了sigmoid函數(shù)的偏置偏移問題,而且tanh在線性區(qū)的樣度更大,能加快神經(jīng)網(wǎng)絡(luò)的收斂,但是在tanh函數(shù)兩端的梯度也趨于零,梯度消失問題依然沒有解決。還有其它的一些激活函數(shù),如rectifier函數(shù)等,這里不再贅述。

-11xy0前饋神經(jīng)網(wǎng)絡(luò)單一神經(jīng)元的功能是有限的,需要很多神經(jīng)元連接在一起傳遞信息來協(xié)作完成復(fù)雜的功能,這就是神經(jīng)網(wǎng)絡(luò)。按神經(jīng)網(wǎng)絡(luò)的拓撲結(jié)構(gòu)可以分為前饋神經(jīng)網(wǎng)絡(luò)(FeedforwardNeuralNetwork)、反饋神經(jīng)網(wǎng)絡(luò)(RecurrentNeuralNetwork)和圖網(wǎng)絡(luò)(GraphNeuralNetwork),本部分重點討論前饋神經(jīng)網(wǎng)絡(luò)。在前饋神經(jīng)網(wǎng)絡(luò)中,神經(jīng)元按信息先后進行分組,每組構(gòu)成神經(jīng)網(wǎng)絡(luò)的一層,下一層的接入僅來自上一層的輸入,不存在回環(huán),信息總是向前傳播,沒有反向回饋,網(wǎng)絡(luò)結(jié)構(gòu)可以用一個有向無環(huán)圖來表示。如圖10.8所示。圖10.8前饋神經(jīng)網(wǎng)絡(luò)示意圖圖10.8網(wǎng)絡(luò)中最左邊的一層被稱作輸入層,其中的神經(jīng)元被稱為輸入神經(jīng)元。最右邊的一層是輸出層,包含的神經(jīng)元被稱為輸出神經(jīng)元。本圖中,輸入層有2個神經(jīng)元x1,x2,輸出層有1個神經(jīng)元y。網(wǎng)絡(luò)中處于輸入層與輸出層之間的層被稱作隱層,一個網(wǎng)絡(luò)中往往有多個隱層。

x2x1a11a12a13yw1w2w3w4w5w6w11w12w13前饋神經(jīng)網(wǎng)絡(luò)例10.1圖10.8是一個簡單的前饋神經(jīng)網(wǎng)絡(luò)圖,該圖中有3層結(jié)構(gòu),第一層為輸入層,第二層為隱藏層,第三層則為輸出層,假設(shè)圖中的x1=0.7、x2=0.9、w1=0.2、w2=0.3、w3=0.4、w4=0.3、w5=-0.5、w6=0.2、w11=0.6、w12=0.1、

w13=-0.2為連接邊的權(quán)值。下面利用該圖說明前饋神經(jīng)網(wǎng)絡(luò)的計算過程。(1)利用輸入層計算隱藏層的權(quán)重(2)利用隱藏層計算輸出層的權(quán)值由于最終y的值大于0,因此y的結(jié)果為正類。觀察上圖,輸入為x1和x2,將輸入轉(zhuǎn)化為矩陣表示X=[x1,x2],權(quán)值W為如下所示,隱藏層的a表示如下所示。

,a=[a11a12a22],X=[x1x2],由輸入層計算的隱藏層又進一步計算的輸出層轉(zhuǎn)化為矩陣表示為:

前饋神經(jīng)網(wǎng)絡(luò)上述的前饋神經(jīng)網(wǎng)絡(luò)只是簡單的實現(xiàn)了神經(jīng)網(wǎng)絡(luò)的計算過程(網(wǎng)絡(luò)中的權(quán)值都是預(yù)先設(shè)置好的),而神經(jīng)網(wǎng)絡(luò)的優(yōu)化過程就是優(yōu)化神經(jīng)元中參數(shù)取值的過程。

訓(xùn)練與預(yù)測神經(jīng)網(wǎng)絡(luò)訓(xùn)練其實就是從數(shù)據(jù)中學(xué)習(xí),通過不斷地修改網(wǎng)絡(luò)中所有權(quán)值W和偏置b,使得神經(jīng)網(wǎng)絡(luò)的輸出盡可能地逼近真實模型的輸出。在神經(jīng)網(wǎng)絡(luò)中,衡量網(wǎng)絡(luò)預(yù)測結(jié)果-F(x)與真實值y之間差別的指標(biāo)稱為損失函數(shù)(LossFunction),損失函數(shù)值越小,表示神經(jīng)網(wǎng)絡(luò)的預(yù)測結(jié)果越接近真實值。大多數(shù)情況下,對權(quán)重W和偏置b做出的微小變動并不會使得神經(jīng)網(wǎng)絡(luò)輸出所期望的結(jié)果,這導(dǎo)致我們很難去刻畫如何優(yōu)化權(quán)重和偏置。因此,需要代價函數(shù)來更好地指導(dǎo)我們?nèi)绾稳ジ淖儥?quán)重和偏置以達到更好的效果。神經(jīng)網(wǎng)絡(luò)的訓(xùn)練就是調(diào)整權(quán)重W和偏置b使得損失函數(shù)值盡可能的小,在訓(xùn)練過程中,將損失函數(shù)值逐漸收斂,當(dāng)其小于設(shè)定閾值時訓(xùn)練停止,得到一組使得神經(jīng)網(wǎng)絡(luò)擬合真實模型的權(quán)重W和偏置b。具體來說,對于一個神經(jīng)網(wǎng)絡(luò)F,其權(quán)重W和偏置b(用隨機值來初始化),給定一個樣本(x,y),將x輸入到神經(jīng)網(wǎng)絡(luò)F,經(jīng)過一次前饋網(wǎng)絡(luò)計算出預(yù)測結(jié)果=F(x)。計算損失值loss=L(,y),要使得神經(jīng)網(wǎng)絡(luò)的預(yù)測結(jié)果盡可能的接近真實值,就要讓損失值盡可能小,于是神經(jīng)網(wǎng)絡(luò)的訓(xùn)練問題演化為一個優(yōu)化問題,如下式:(10-6)神經(jīng)網(wǎng)絡(luò)需要解決的問題主要為分類和回歸問題。分類是輸出變量為有限個離散變量的預(yù)測問題,目的是尋找決策邊界。例如,判斷手寫郵編是不是6,判斷結(jié)果“是”與“不是”,這是個二分類問題;判斷一個動物是貓、是狗還是其他,這是個多分類問題?;貧w問題是輸入變量與輸出變量均為連續(xù)變量的預(yù)測問題,目的是找到最優(yōu)擬合方法。例如預(yù)測明天的股市指數(shù)就是個大家都希望結(jié)果能夠準(zhǔn)確的回歸問題。

訓(xùn)練與預(yù)測1.損失函數(shù)神經(jīng)網(wǎng)絡(luò)進行分類和回歸任務(wù)時會使用不同的損失函數(shù),下面列出一些常用的分類損失和回歸損失。(1)分類損失函數(shù)Logistic損失:

(10-7)負對數(shù)似然損失:

(10-8)交叉熵損失:

(10-9)Logistic損失用于解決每個類別的二分類問題,為了方便數(shù)據(jù)集把最大似然轉(zhuǎn)化為負對數(shù)似然,而得到負對數(shù)似然損失,交叉熵損失是從兩個類別擴展到M個類別,交叉熵損失在二分類時應(yīng)當(dāng)是負對數(shù)似然損失。

訓(xùn)練與預(yù)測1.損失函數(shù)(2)回歸損失函數(shù)均方誤差(L2損失):

(10-10)平均絕對誤差(L1損失):

(10-11)均方對數(shù)差損失:

(10-12)Huber損失:

(10-13)L2損失是使用最廣泛的損失函數(shù),在優(yōu)化過程中更為穩(wěn)定和準(zhǔn)確,但是對于局外點敏感。L1損失會比較有效地懲罰局外點,但它的導(dǎo)數(shù)不連續(xù)使得尋找最優(yōu)解的過程低效。Huber損失由L2損失與L1損失合成,當(dāng)δ趨于0時退化成了L1損失,當(dāng)δ趨于無窮時則退化為L2損失。δ決定了模型處理局外點的行為,當(dāng)殘差大于δ時使用L1損失,很小時則使用更為合適的L2損失來進行優(yōu)化。Huber損失函數(shù)克服了Ll損失和L2損失的缺點,不僅可以保持損失函數(shù)具有連續(xù)的導(dǎo)數(shù),同時可以利用L2損失梯度隨誤差減小的特性來得到更精確的最小值,也對局外點具有更好的魯棒性。但Huber損失函數(shù)的良好表現(xiàn)得益于精心訓(xùn)練的超參數(shù)δ。

訓(xùn)練與預(yù)測2.參數(shù)學(xué)習(xí)參數(shù)學(xué)習(xí)是神經(jīng)網(wǎng)絡(luò)的關(guān)鍵,神經(jīng)網(wǎng)絡(luò)使用參數(shù)學(xué)習(xí)算法把從數(shù)據(jù)中學(xué)習(xí)到的“知識”保存在參數(shù)里面。對于訓(xùn)練集中的每一個樣本(x,y)計算其損失(如均方誤差損失),那么在整個訓(xùn)練集上的損失為:

,其中,是標(biāo)簽y對應(yīng)的向量表示,有了目標(biāo)函數(shù)和訓(xùn)練樣本,可以通過梯度下降算法來學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)的參數(shù)。使用梯度下降法求神經(jīng)網(wǎng)絡(luò)的參數(shù),需要計算損失函數(shù)對參數(shù)的偏導(dǎo)數(shù),直接使用鏈?zhǔn)椒▽γ總€參數(shù)逐一求偏導(dǎo)效率很低,計算量大,而在20世紀(jì)90年代計算機能力還不足以為龐大的神經(jīng)網(wǎng)絡(luò)提供足夠的算力支持,這也是當(dāng)時神經(jīng)網(wǎng)絡(luò)陷入低潮的原因之一。

4反向傳播算法OverviewofPredictiveModelsChapter04反向傳播算法

反向傳播算法(BackpropagationLearning,BP算法)在1970年代由Werbos博士提出,但是直到1986年DavidRumelhart、GeoffreyHinton和RonaldWilliams發(fā)表的論文中才說明反向傳播算法能更快地計算神經(jīng)網(wǎng)絡(luò)中各層參數(shù)的梯度,解決了參數(shù)逐一求偏導(dǎo)效率低下的問題,使得神經(jīng)網(wǎng)絡(luò)能應(yīng)用到一些原來不能解決的問題上。

反向傳播學(xué)習(xí)算法

反向傳播學(xué)習(xí)是前饋神經(jīng)網(wǎng)絡(luò)的有指導(dǎo)學(xué)習(xí)方法,和所有的有指導(dǎo)學(xué)習(xí)過程一樣,它包括訓(xùn)練和檢驗兩個階段。在訓(xùn)練階段中,訓(xùn)練實例重復(fù)通過網(wǎng)絡(luò)。對于每個訓(xùn)練實例,計算網(wǎng)絡(luò)輸出值,根據(jù)輸出值修改各個權(quán)值。這個權(quán)值的修改方向是從輸出層開始,反向移動到隱層,改變權(quán)值的目的是訓(xùn)練集的最小化錯誤率。訓(xùn)練過程是個迭代過程,網(wǎng)絡(luò)訓(xùn)練直到滿足一個特定的終止條件為止。終止條件可以是網(wǎng)絡(luò)收斂到最小的錯誤值,也可以是一個訓(xùn)練時間標(biāo)準(zhǔn),也可以是最大迭代次數(shù)。反向傳播學(xué)習(xí)算法

,例10.2利用圖10.9所示的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)和輸入實例說明反向傳播學(xué)習(xí)方法。x3x1a1a2a3ow11w12w13w21w31w32w1ow2ow3ox2w22w23w33圖10.9神經(jīng)網(wǎng)絡(luò)示意圖輸入向量:[0.8,1.0,0.4]。目標(biāo):描述使用BP學(xué)習(xí)算法訓(xùn)練前饋神經(jīng)網(wǎng)絡(luò)的過程(一次迭代過程)。方法:使用圖10.9所示的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)、輸入向量,表10.2中的初始權(quán)值和式(10-4)的sigmoid函數(shù)。假設(shè)與圖10.9所示的輸入向量相關(guān)的目標(biāo)輸出值為0.67,該輸入的計算輸出與目標(biāo)值之間存在誤差。假設(shè)該誤差與輸出節(jié)點相關(guān)的所有網(wǎng)絡(luò)連接都有關(guān),故需從輸出層開始到輸入層,逐層修正輸出層與隱層、隱層之間和隱層與輸入層之間的權(quán)值。即將節(jié)點o的輸出誤差反向傳播到網(wǎng)絡(luò)中,修改所有12個相關(guān)的網(wǎng)絡(luò)權(quán)重值,每個連接權(quán)重的修改量使用公式計算得出。該公式利用節(jié)點o的輸出誤差、各個節(jié)點的輸出值和sigmoid函數(shù)的導(dǎo)數(shù)推導(dǎo)出,且公式具備平滑實際誤差和避免對訓(xùn)練實例矯枉過正的能力。反向傳播學(xué)習(xí)算法

表10.2圖10.9所示的神經(jīng)網(wǎng)絡(luò)的初始權(quán)值步驟1:計算節(jié)點a1、a2、a3和o的輸入和輸出值。(1)節(jié)點a1的輸入=0.1×0.8+0.2×1.0+0.3×0.4=0.4(2)節(jié)點a1的輸出=f(0.4)=0.599(3)節(jié)點a2的輸入=(-0.2)×0.8+(-0.1)×1.0+0.1×0.4=-0.22(4)節(jié)點a2的輸出=f(-0.22)=0.445(5)節(jié)點a3的輸入=0.1×0.8+(-0.1)×1.0+0.2×0.4=0.06(6)節(jié)點a3的輸出=f(0.06)=0.515(7)節(jié)點o的輸入=0.3×0.599+0.5×0.445+0.4×0.515=0.608(8)節(jié)點o的輸出=f(0.608)=0.648

標(biāo)記w11w21w31w12w22w32w13w23w33w1ow2ow3o權(quán)值0.100.200.30-0.20-0.100.100.10-0.100.200.30.50.4反向傳播學(xué)習(xí)算法步驟2:計算輸出層和隱層的誤差,公式如式(10-14)、式(10-15)和式(10-16)所示。Loss(o)=(y-oy)[f’(xo)](10-14)其中y為目標(biāo)輸出oy即節(jié)點o的計算輸出;(y-oy)為實際輸出誤差;f’(xo)為sigmoid函數(shù)的一階導(dǎo)數(shù):xo為sigmoid函數(shù)在節(jié)點o處的輸入。式(10-14)表示實際輸出誤差與sigmoid函數(shù)的一階導(dǎo)數(shù)相乘,sigmoid函數(shù)在xo處的導(dǎo)數(shù)可簡單地計算為oy(1-oy)。則有:Loss(o)=(y-oy)oy(1-oy)(10-15)隱層節(jié)點的輸出誤差的一般公式為:(10-16)其中l(wèi)oss(o)表示節(jié)點o的計算輸出誤差;wio表示節(jié)點ai與輸出節(jié)點o之間的連接權(quán)重;表示sigmoid函數(shù)的一階導(dǎo)數(shù);xi表示節(jié)點ai處的sigmoid函數(shù)的輸入。依據(jù)式(10-15),。再由題目假設(shè)目標(biāo)輸出值為0.67,從而有:loss(o)=(0.67-0.648)×0.648×(1-0.648)=0.005

loss(a1)=0.005×0.3×0.599×(1-0.599)=0.00036loss(a2)=0.005×0.5×0.445×(1-0.445)=0.000617

loss(a3)=0.005×0.4×0.515×(1-0.515)=0.0005

反向傳播學(xué)習(xí)算法步驟3:更新12個權(quán)重值。反向傳播過程的最后一步是使用梯度下降法(Delta法則)進行權(quán)重校正,更新與輸出節(jié)點連接相關(guān)的權(quán)重,目標(biāo)是最小化平方誤差和,該誤差被定義為計算輸出和實際輸出之間的歐式距離。權(quán)重校正公式如下:(10-17)其中Δwio為加到當(dāng)前權(quán)值上的增量值,Δwio的計算公式為:o其中:r為學(xué)習(xí)率參數(shù),1>r>0,本例中取r=0.3;loss(o)為節(jié)點o的計算誤差;Oi為節(jié)點ai的輸出值。Δw1o=0.3×0.005×0.599=0.0009,w1o的校正值=0.3+0.0009=0.3009Δw2o=0.3×0.005×0.445=0.0007,w2o的校正值=0.5+0.0007=0.5007Δw3o=0.3×0.005×0.515=0.0007,w3o的校正值=0.4+0.0007=0.40007Δw11=0.3×0.00036×0.8=0.0000864,w11的校正值=0.1+0.0000864=0.1000864Δw21=0.3×0.00036×1.0=0.000108,w21的校正值=0.2+0.000108=0.200108Δw31=0.3×0.00036×0.4=0.0000432,w31的校正值=0.3+0.0000432=0.3000432

反向傳播學(xué)習(xí)算法Δw12=0.3×0.000617×0.8=0.000148,w12的校正值=-0.2+0.000148=-0.19985Δw22=0.3×0.000617×1.0=0.000185,w22的校正值=-0.1+0.000185=-0.09982Δw32=0.3×0.000617×0.4=0.000074,w32的校正值=0.1+0.000074=0.100074Δw13=0.3×0.0005×0.8=0.00012,w13的校正值=0.1+0.00012=0.10012Δw23=0.3×0.0005×1.0=0.00015,w23的校正值=-0.1+0.00015=-0.09985Δw33=0.3×0.0005×0.4=0.00006,w33的校正值=0.2+0.00006=0.20006至此,一次迭代過程結(jié)束,校正的所有權(quán)值如表10.3所示。表10.3第一次迭代后圖10.9所示的神經(jīng)網(wǎng)絡(luò)的權(quán)值

w11w21w31w12w22w320.10008640.2001080.3000432-0.19985-0.099820.100074

w13w23w33w1ow2ow3o0.10012-0.099850.200060.30090.50070.40007反向傳播學(xué)習(xí)算法總結(jié)上述過程,得到反向?qū)W習(xí)傳播算法描述如下:算法描述:step1初始化網(wǎng)絡(luò);step1-1若有必要,變換輸入屬性值為[0,1]區(qū)間的數(shù)值數(shù)據(jù),確定輸出屬性格式;step1-2通過選擇輸入層、隱層和輸出層的節(jié)點個數(shù),來創(chuàng)建神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu);step1-3將所有連接的權(quán)重初始化為[-1.0,1.0]區(qū)間的隨機值;step1-4為學(xué)習(xí)參數(shù)選擇一個[0,1]區(qū)間的值;step1-5選取一個終止條件;step2對于所有訓(xùn)練集實例:step2-1讓訓(xùn)練實例通過神經(jīng)網(wǎng)絡(luò);step2-2確定輸出誤差;step2-3使用Delta法則更新網(wǎng)絡(luò)權(quán)重;

反向傳播學(xué)習(xí)算法step3如果不滿足終止條件,重復(fù)步驟step2;step4在檢驗數(shù)據(jù)集上檢測網(wǎng)絡(luò)的準(zhǔn)確度,如果準(zhǔn)確度不是最理想的,改變一個或多個網(wǎng)絡(luò)參數(shù),從step1開始??梢栽诰W(wǎng)絡(luò)訓(xùn)練達到一定的總周期數(shù),或是目標(biāo)輸出與計算輸出之間的均方根誤差rms(表示網(wǎng)絡(luò)訓(xùn)練的程度)達到一定標(biāo)準(zhǔn)時,終止網(wǎng)絡(luò)訓(xùn)練。通常的標(biāo)準(zhǔn)是當(dāng)rms低于0.10時,終止反向傳播學(xué)習(xí)。往往假設(shè)在進行了充分的迭代后,反向?qū)W習(xí)技術(shù)一定收斂。然而不能保證收斂是最理想的,所以可能需要使用多種神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)算法,以反復(fù)實驗才能得到理想的結(jié)果。

反向傳播學(xué)習(xí)的Python實現(xiàn)例10.3用Python實現(xiàn)BP神經(jīng)網(wǎng)絡(luò)示例。importnumpyasnpfromsklearn.datasetsimportload_digitsfromsklearn.preprocessingimportLabelBinarizer#標(biāo)簽二值化fromsklearn.model_selectionimporttrain_test_split#切割數(shù)據(jù),交叉驗證法defsigmoid(x):return1/(1+np.exp(-x))defdsigmoid(x):returnx*(1-x)classNeuralNetwork:def__init__(self,layers):#(64,100,10)#權(quán)重的初始化,范圍-1到1:+1的一列是偏置值self.V=np.random.random((layers[0]+1,layers[1]+1))*2-1self.W=np.random.random((layers[1]+1,layers[2]))*2-1deftrain(self,X,y,lr=0.11,epochs=10000):

反向傳播學(xué)習(xí)的Python實現(xiàn)#添加偏置值:最后一列全是1temp=np.ones([X.shape[0],X.shape[1]+1])temp[:,0:-1]=XX=tempforninrange(epochs+1):#在訓(xùn)練集中隨機選取一行(一個數(shù)據(jù)):randint()在范圍內(nèi)隨機生成一個int類型i=np.random.randint(X.shape[0])x=[X[i]]#轉(zhuǎn)為二維數(shù)據(jù):由一維一行轉(zhuǎn)為二維一行x=np.atleast_2d(x)#L1:輸入層傳遞給隱藏層的值;輸入層64個節(jié)點,隱藏層100個節(jié)點#L2:隱藏層傳遞到輸出層的值;輸出層10個節(jié)點L1=sigmoid(np.dot(x,self.V))L2=sigmoid(np.dot(L1,self.W))

反向傳播學(xué)習(xí)的Python實現(xiàn)#L2_delta:輸出層對隱藏層的誤差改變量#L1_delta:隱藏層對輸入層的誤差改變量L2_delta=(y[i]-L2)*dsigmoid(L2)L1_delta=L2_delta.dot(self.W.T)*dsigmoid(L1)#計算改變后的新權(quán)重self.W+=lr*L1.T.dot(L2_delta)self.V+=lr*x.T.dot(L1_delta)#每訓(xùn)練1000次輸出一次準(zhǔn)確率ifn%1000==0:predictions=[]forjinrange(X_test.shape[0]):#獲取預(yù)測結(jié)果:返回與十個標(biāo)簽值逼近的距離,數(shù)值最大的選為本次的預(yù)測值o=self.predict(X_test[j])#將最大的數(shù)值所對應(yīng)的標(biāo)簽返回

反向傳播學(xué)習(xí)的Python實現(xiàn)predictions.append(np.argmax(o))#np.equal():相同返回true,不同返回falseaccuracy=np.mean(np.equal(predictions,y_test))print('迭代次數(shù):',n,'準(zhǔn)確率:',accuracy)defpredict(self,x):#添加偏置值:最后一列全是1temp=np.ones([x.shape[0]+1])temp[0:-1]=xx=temp#轉(zhuǎn)為二維數(shù)據(jù):由一維一行轉(zhuǎn)為二維一行x=np.atleast_2d(x)#L1:輸入層傳遞給隱藏層的值;輸入層64個節(jié)點,隱藏層100個節(jié)點#L2:隱藏層傳遞到輸出層的值;輸出層10個節(jié)點L1=sigmoid(np.dot(x,self.V))L2=sigmoid(np.dot(L1,self.W))returnL2

反向傳播學(xué)習(xí)的Python實現(xiàn)#載入數(shù)據(jù):8*8的數(shù)據(jù)集digits=load_digits()X=digits.dataY=digits.target#輸入數(shù)據(jù)歸一化:當(dāng)數(shù)據(jù)集數(shù)值過大,乘以較小的權(quán)重后還是很大的數(shù),代入sigmoid激活函數(shù)就趨近于1,不利于學(xué)習(xí)X-=X.min()X/=X.max()NN=NeuralNetwork([64,100,10])#sklearn切分數(shù)據(jù)X_train,X_test,y_train,y_test=train_test_split(X,Y)#標(biāo)簽二值化:將原始標(biāo)簽(十進制)轉(zhuǎn)為新標(biāo)簽(二進制)labels_train=LabelBinarizer().fit_transform(y_train)labels_test=LabelBinarizer().fit_transform(y_test)print('開始訓(xùn)練')NN.train(X_train,labels_train,epochs=20000)print('訓(xùn)練結(jié)束')

反向傳播學(xué)習(xí)的Python實現(xiàn)程序運行結(jié)果如圖10.10所示。

圖10.10例10.3程序運行結(jié)果反向傳播學(xué)習(xí)的Python實現(xiàn)

Sklearn中神經(jīng)網(wǎng)絡(luò)API中含有多層感知機分類器MLPClassifier()和神經(jīng)網(wǎng)絡(luò)回歸預(yù)測函數(shù)LPRegressor()。MLPClassifier()常用形式如下:MLPClassifier(hidden_layer_sizes=(100,),activation=’relu’,solver=’adam’,alpha=0.0001,learning_rate_init=0.001,max_iter=200,momentum=0.9)參數(shù)說明:(1)hidden_??layer_sizes:tuple,默認值(100,)。第i個元素表示第i個隱藏層中的神經(jīng)元數(shù)量。(2)activation:激活函數(shù)。取值{’identity’,’logistic’,’tanh’,’relu’},默認’relu’。’identity’:隱藏層的激活函數(shù),返回f(x)=x;’logistic’:sigmoid函數(shù),返回f(x)=1/(1+exp(-x));’tanh’:雙曲tan函數(shù),返回f(x)=tanh(x);’relu’:整流后的線性單位函數(shù),返回f(x)=max(x)。(3)slover:取值{’lbfgs’,’sgd’,’adam’},默認’adam’。權(quán)重優(yōu)化的求解器:’lbfgs’是準(zhǔn)牛頓方法族的優(yōu)化器;’sgd’是隨機梯度下降;’adam’由Kingma、Diederik和JimmyBa提出的基于隨機梯度的優(yōu)化器。注意:默認優(yōu)化器’adam’相對較大的數(shù)據(jù)集(包含數(shù)千個訓(xùn)練樣本或更多)方面在訓(xùn)練時間和驗證分數(shù)方面都有很好的表現(xiàn)。但是,對于小型數(shù)據(jù)集,’lbfgs’可以更快地收斂并且表現(xiàn)更好。反向傳播學(xué)習(xí)的Python實現(xiàn)

(4)alpha:float,可選,默認為0.0001。L2懲罰(正則化項)參數(shù)。(5)learning_rate_init:double,可選,默認為0.001。使用初始學(xué)習(xí)率。它控制更新權(quán)重的步長。僅在solver=’sgd’或’adam’時使用。(6)max_iter:int,optional,默認值200。最大迭代次數(shù)。(7)momentum:float,默認0.9,梯度下降更新的動量,應(yīng)該在0和1之間。僅在solver='sgd’時使用。使用sklearn庫構(gòu)建BP神經(jīng)網(wǎng)絡(luò),只需構(gòu)建多層感知機分類器MLPClassifier,輸入神經(jīng)網(wǎng)絡(luò)隱藏層的神經(jīng)單元個數(shù),并通過fit()方法進行訓(xùn)練,訓(xùn)練完成后通過predict()方法進行預(yù)測即可。對識別手寫數(shù)字來說,測試結(jié)果準(zhǔn)確率較高,能達到98%。反向傳播學(xué)習(xí)的Python實現(xiàn)

例10.4MLPClassifier()應(yīng)用示例。fromsklearn.neural_networkimportMLPClassifierfromsklearn.datasetsimportload_digitsfromsklearn.model_selectionimporttrain_test_splitfromsklearn.metricsimportclassification_reportimportmatplotlib.pyplotaspltdigits=load_digits()x_data=digits.datay_data=digits.targetprint(x_data.shape)print(y_data.shape)#數(shù)據(jù)拆分x_train,x_test,y_train,y_test=train_test_split(x_data,y_data)反向傳播學(xué)習(xí)的Python實現(xiàn)

#構(gòu)建模型,2個隱藏層,第一個隱藏層有100個神經(jīng)元,第2隱藏層50個神經(jīng)元,訓(xùn)練500周期mlp=MLPClassifier(hidden_layer_sizes=(100,50),max_iter=500)mlp.fit(x_train,y_train)#測試集準(zhǔn)確率的評估predictions=mlp.predict(x_test)print(classification_report(y_test,predictions))程序運行結(jié)果如圖10.11所示。圖10.11例10.4程序運行結(jié)果5卷積神經(jīng)網(wǎng)絡(luò)OverviewofPredictiveModelsChapter05卷積神經(jīng)網(wǎng)絡(luò)

卷積神經(jīng)網(wǎng)絡(luò)(ConvolutionalNeuralNetwork,CNN)是多層感知機的變種,由生物學(xué)家休博爾和維瑟爾在早期關(guān)于貓視覺皮層的研究發(fā)展而來,視覺皮層的細胞存在一個復(fù)雜的構(gòu)造,這些細胞對視覺輸入空間的子區(qū)域非常敏感,稱之為感受野(ReceptiveField)。卷積神經(jīng)網(wǎng)絡(luò)概述卷積神經(jīng)網(wǎng)絡(luò)是一種具有局部連接、權(quán)重共享等特性的前饋神經(jīng)網(wǎng)絡(luò),它是由多層感知機(MLP)演變而來,由于其具有局部區(qū)域連接、權(quán)值共享、降采樣的結(jié)構(gòu)特點,使得卷積神經(jīng)網(wǎng)絡(luò)在圖像處理領(lǐng)域表現(xiàn)出色,廣泛應(yīng)用于人臉識別、物品識別、醫(yī)學(xué)影像和遙感科學(xué)等領(lǐng)域。對卷積神經(jīng)網(wǎng)絡(luò)的研究可追溯至日本學(xué)者福島邦彥(KunihikoFukushima)提出的neocognition模型,他仿造生物的視覺皮層(visualcortex)設(shè)計了以“neocognition”命名的神經(jīng)網(wǎng)絡(luò),這是一個具有深度結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),也是最早被提出的深度學(xué)習(xí)算法之一。WeiZhang于1988年提出了一個基于二維卷積的“平移不變?nèi)斯ど窠?jīng)網(wǎng)絡(luò)”用于檢測醫(yī)學(xué)影像。1989年,YannLeCun等對權(quán)重進行隨機初始化后使用了隨機梯度下降進行訓(xùn)練,并首次使用了“卷積”一詞,“卷積神經(jīng)網(wǎng)絡(luò)”因此得名。1998年,YannLeCun等人在之前卷積神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上構(gòu)建了更加完備的卷積神經(jīng)網(wǎng)絡(luò)LeNet-5,并在手寫數(shù)字的識別問題上取得了很好的效果,LeNet-5的結(jié)構(gòu)也成為現(xiàn)代卷積神經(jīng)網(wǎng)絡(luò)的基礎(chǔ),這種卷積層、池化層堆疊的結(jié)構(gòu)可以保持輸入圖像的平移不變性,自動提取圖像特征。近些年來,研究者們通過逐層訓(xùn)練參數(shù)與預(yù)訓(xùn)練的方法使得卷積神經(jīng)網(wǎng)絡(luò)可以設(shè)計得更復(fù)雜,訓(xùn)練效果更好。卷積神經(jīng)網(wǎng)絡(luò)快速的發(fā)展,在各大研究領(lǐng)域取得了較好的成績,特別是在圖像分類、目標(biāo)檢測和語義分割等任務(wù)上不斷突破。

卷積神經(jīng)網(wǎng)絡(luò)整體結(jié)構(gòu)1.卷積層卷積層會對輸入的特征(或原始數(shù)據(jù))進行卷積操作,輸出卷積后產(chǎn)生特征圖。卷積層是卷積神經(jīng)網(wǎng)絡(luò)的核心部分,卷積層的加入使得神經(jīng)網(wǎng)絡(luò)能夠共享權(quán)重,能夠進行局部感知,并開始層次化地對圖像進行抽象理解。CNN中所用到的卷積是離散卷積。離散卷積本質(zhì)上是一種加權(quán)求和,所以CNN中的卷積本質(zhì)上就是利用一個共享參數(shù)的過濾器,通過計算中心點以及相鄰像素點的加權(quán)求和來構(gòu)成特征圖,實現(xiàn)空間特征的提取。先來看一個一維卷積的例子,如圖10.12所示。

卷積神經(jīng)網(wǎng)絡(luò)主要由卷積層(ConvolutionalLayer)、池化層(PoolingLayer)和全連接層(Full-connectedLayer)三種網(wǎng)絡(luò)層構(gòu)成,在卷積層與全連接層后通常會連接激活函數(shù),與之前介紹的前饋神經(jīng)網(wǎng)絡(luò)一樣,卷積神經(jīng)網(wǎng)絡(luò)也可以像搭積木一樣通過組裝層來組裝。圖10.12一維卷積運算卷積神經(jīng)網(wǎng)絡(luò)整體結(jié)構(gòu)

其中xi是輸入信號,wk是卷積核(也稱濾波器),如圖10.11所示,隨著卷積核[-1,0,1]滑過輸入信號,對應(yīng)位置的元素相乘并計算出的總和(也稱乘加運算)作為相應(yīng)窗口位置的輸出,一般情況下卷積核的長度n遠小于輸入信號序列長度。輸入信號xi與卷積核wk的一堆卷積操作可以寫為:

,也可以寫成Y=W

?X,其中代表卷積運算。相比于一維卷積,二維卷積在兩個維度上以一定的間隔帶動二維濾波窗口,并在窗口內(nèi)進行乘加運算,如圖10.12所示,對于一個(4,4)的輸入,卷積核的大小是(3,3),輸出大小是(2,2)。當(dāng)卷積核窗口滑過輸入時,卷積核與窗口內(nèi)(圖中陰影部分)的輸入元素作乘加運算,并將結(jié)果保存到輸出對應(yīng)的位置,當(dāng)卷積核窗口滑過所有位置后二維卷積操作完成。卷積神經(jīng)網(wǎng)絡(luò)整體結(jié)構(gòu)

如圖10.13所示。圖10.13二維卷積卷積神經(jīng)網(wǎng)絡(luò)整體結(jié)構(gòu)對于輸入信號X∈RH×W與卷積核W∈Rh×w的二維卷積操作Y=W

?X,表達式為:

卷積神經(jīng)網(wǎng)絡(luò)整體結(jié)構(gòu)例10.5離散型卷積的Python實現(xiàn)。asrray=[[40,24,135],[200,239,238],[90,34,94],[100,100,100]]kernel=[[0.0,0.6],[0.1,0.3]]k=2defmy_conv(input,kernel,size):out_h=(len(input)-len(kernel)+1)out_w=(len(input[0])-len(kernel)+1)out=[[0foriinrange(out_w)]forjinrange(out_h)]foriinrange(out_h):forjinrange(out_w):out[i][j]=compute_conv(input,kernel,i,j,size)returnoutdefcompute_conv(input,kernel,i,j,size):#定義卷積操作

res=0forkkinrange(size):forkinrange(size):res+=input[i+kk][j+k]*kernel[kk][k]returnint(res)result=my_conv(asrray,kernel,k)foriinrange(len(result)):print(''.join(map(str,result[i])))卷積神經(jīng)網(wǎng)絡(luò)整體結(jié)構(gòu)2.池化層池化層的引入是仿照人的視覺系統(tǒng)對視覺輸入對象進行降維和抽象,它實際上是一種形式的降采樣。有多種不同形式的非線性池化函數(shù),而其中“最大池化(Maxpooling)”是最為常見的,它是將輸入的圖像劃分為若干個矩形區(qū)域,對每個子區(qū)域輸出最大值。直覺上,這種機制能夠有效地原因在于,在發(fā)現(xiàn)一個特征之后,它的精確位置遠不及它和其它特征相對位置的關(guān)系重要。池化層會不斷地減小數(shù)據(jù)的空間大小,因此參數(shù)的數(shù)量和計算量也會下降,這在一定程度上也控制了過擬合。池化層濾波器大小一般為(2,2),類似于卷積運算,隨著濾波器的移動,依次選擇窗口內(nèi)的最大值作為輸出,結(jié)果如圖10.14所示。

圖10.14池化操作卷積神經(jīng)網(wǎng)絡(luò)整體結(jié)構(gòu)2.池化層池化操作后的結(jié)果相比其輸入縮小了。在卷積神經(jīng)網(wǎng)絡(luò)的工作中,池化層有如下主要作用:(1)特征不變性:池化操作使模型更加關(guān)注是否存在某些特征而不是特征具體的位置。其中不變形性包括,平移不變性、旋轉(zhuǎn)不變性和尺度不變性。平移不變性是指輸出結(jié)果對輸入對小量平移基本保持不變,例如,輸入為(1,3),最大池化將會取3,如果將輸入右移一位得到(3,-1),輸出的結(jié)果仍將為3。對伸縮的不變形,如果原先的神經(jīng)元在最大池化操作后輸出3,那么經(jīng)過伸縮(尺度變換)后,最大池化操作在該神經(jīng)元上很大概率的輸出仍是3。(2)特征降維(下采樣):池化相當(dāng)于在空間范圍內(nèi)做了維度約減,從而使模型可以抽取更加廣范圍的特征。同時減小了下一層的輸入,進而減少計算量和參數(shù)個數(shù)。(3)在一定程度上防止過擬合,更方便優(yōu)化。

卷積神經(jīng)網(wǎng)絡(luò)整體結(jié)構(gòu)3.全連接層前面介紹了使用全連接層堆疊的方式構(gòu)造前饋神經(jīng)網(wǎng)絡(luò)模型,前一層的神經(jīng)元與后一層的神經(jīng)元全部相連,這種連接方式有什么問題呢?首先,使用全連接層構(gòu)造的前饋神經(jīng)網(wǎng)絡(luò)模型需要大量的參數(shù),以常見的單通道640×480的圖像為例,圖像輸入時需要640×480=307200個節(jié)點,假設(shè)網(wǎng)絡(luò)有三個隱層,每層100個結(jié)點,則需要640×480×100+100×100+100×100=3.074×107個連接,這樣的計算資源消耗是難以接受的。其次,輸入數(shù)據(jù)的形狀被“忽略”了,所有輸入到全連接層的數(shù)據(jù)被拉平成了一堆數(shù)據(jù),例如輸入圖像時,輸入數(shù)據(jù)是在高、寬、通道方向上的三維數(shù)據(jù),這個形狀中包含重要的空間信息。一般來說空間上鄰近的像素會是相似的值,各通道之間的像素值有密切的關(guān)聯(lián),而相距較遠像素之間關(guān)聯(lián)性較少,三維形狀中可能含有值得提取的本質(zhì)模式。而在全連接層,圖像被平整成一堆數(shù)據(jù)后,一個像素點對應(yīng)一個神經(jīng)元,圖像相鄰像素間的關(guān)聯(lián)被破壞,無法利用與形狀相關(guān)的信息。

卷積神經(jīng)網(wǎng)絡(luò)整體結(jié)構(gòu)3.全連接層在全連接構(gòu)成的前饋神經(jīng)網(wǎng)絡(luò)中,網(wǎng)絡(luò)的參數(shù)除了權(quán)重還有偏置,在卷積神經(jīng)網(wǎng)絡(luò)中卷積核的參數(shù)對應(yīng)全連接的權(quán)重,同時在卷積神經(jīng)網(wǎng)絡(luò)中也存在偏置,如圖10.15所示.

圖10.15卷積運算偏置卷積層中參數(shù)的數(shù)量是所有卷積核中參數(shù)的總和,相較于全接連的方式,極大地減少了參數(shù)的數(shù)量,而且卷積層可以保持數(shù)據(jù)的形狀不變,圖像數(shù)據(jù)輸入卷積層時,卷積層以三維數(shù)據(jù)的形式接收,經(jīng)過卷積操作后同樣以三維數(shù)據(jù)的形式輸出至少一層,保留了空間信息。6循環(huán)神經(jīng)網(wǎng)絡(luò)OverviewofPredictiveModelsChapter06循環(huán)神經(jīng)網(wǎng)絡(luò)

循環(huán)神經(jīng)網(wǎng)絡(luò)(RerrentNeuralNetwork,RNN)出現(xiàn)于20世紀(jì)80年代,其雛形見于美國物理學(xué)家J.J.Hopfield于1982年提出的可用作聯(lián)想存儲器的互聯(lián)網(wǎng)絡(luò)——Hopfield神經(jīng)網(wǎng)絡(luò)模型。卷積神經(jīng)網(wǎng)絡(luò)擅長處理大小可變的圖像,而循環(huán)神經(jīng)網(wǎng)絡(luò)則對可變長度的序列數(shù)據(jù)有較強的處理能力。循環(huán)神經(jīng)網(wǎng)絡(luò)概述循環(huán)神經(jīng)網(wǎng)絡(luò)用于解決訓(xùn)練樣本輸入是連續(xù)的序列,且序列的長短不一的問題,比如基于時間序列的問題。基礎(chǔ)的神經(jīng)網(wǎng)絡(luò)只在層與層之間建立了權(quán)連接,循環(huán)神經(jīng)網(wǎng)絡(luò)最大的不同之處就是在層之間的神經(jīng)元之間也建立了權(quán)連接。循環(huán)網(wǎng)絡(luò)在每一個時間點都有一個單獨的參數(shù),可以在時間上共享不同序列長度或序列不同位置的統(tǒng)計強度,并使得模型能夠擴展到應(yīng)用于不同形式的樣本。簡單循環(huán)網(wǎng)絡(luò)結(jié)構(gòu)示意圖如圖10.16所示。

圖10.16結(jié)構(gòu)示意圖循環(huán)神經(jīng)網(wǎng)絡(luò)概述在t時刻,H會讀取輸入層的輸入x(t),并輸出一個值o(t),同時H的狀態(tài)值會從當(dāng)前步傳遞到下一步。也就是說,H的輸入除了來自輸入層的輸入數(shù)據(jù)x(t),還來自于上一時刻H的輸出。這樣就不難理解循環(huán)神經(jīng)網(wǎng)絡(luò)的工作過程了。理論上來講,一個完整的循環(huán)神經(jīng)網(wǎng)絡(luò)可以看作是同一網(wǎng)絡(luò)結(jié)構(gòu)被無限運行的結(jié)果(一些存在的客觀原因使得無限運行無法真正地完成)。循環(huán)神經(jīng)網(wǎng)絡(luò)在每一個時刻會有一個輸入x(t),H根據(jù)x(t)和上一個H的結(jié)果提供一個輸出o(t)。將循環(huán)神經(jīng)網(wǎng)絡(luò)的計算圖按時間先后展開后如圖10.17所示。

圖10.16結(jié)構(gòu)示意圖循環(huán)神經(jīng)網(wǎng)絡(luò)的設(shè)計模式

循環(huán)神經(jīng)網(wǎng)絡(luò)要求每一個時刻都有一個輸入,但是不一定每個時刻都需要有輸出。這涉及了循環(huán)神經(jīng)網(wǎng)絡(luò)的不同設(shè)計模式。最簡單循環(huán)體結(jié)構(gòu)的循環(huán)神經(jīng)網(wǎng)絡(luò)如圖10.18所示。圖10.18在循環(huán)網(wǎng)絡(luò)中使用單層全連結(jié)構(gòu)作為循環(huán)體(隱藏層)循環(huán)神經(jīng)網(wǎng)絡(luò)運算

對于簡單循環(huán)網(wǎng)絡(luò)計算圖,輸入層到隱藏層的參數(shù)為權(quán)重矩陣U,隱藏層到輸出層的參數(shù)為權(quán)重矩陣V,隱藏層到隱藏層的反饋連接參數(shù)為權(quán)重矩陣W,該循環(huán)神經(jīng)網(wǎng)絡(luò)的前向傳播插值公式為:其中的網(wǎng)絡(luò)參數(shù)為三個權(quán)重矩陣U、V和W以及兩個偏置向量b和c。該循環(huán)神經(jīng)網(wǎng)絡(luò)將一個輸入序列映射為相同長度的輸出序列。對于分類任務(wù),我們可以將輸出層的神經(jīng)元分別通過softmax分類層(主要作用是輸出各個類的概率)進行分類;對于回歸任務(wù),我們可以直接將輸出層神經(jīng)元的信息作為需要使用的回歸值。一個循環(huán)神經(jīng)網(wǎng)絡(luò)前向傳播的具體計

溫馨提示

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

評論

0/150

提交評論