《機器學習-Python實戰(微課版)》課件 第十二章 神經網絡_第1頁
《機器學習-Python實戰(微課版)》課件 第十二章 神經網絡_第2頁
《機器學習-Python實戰(微課版)》課件 第十二章 神經網絡_第3頁
《機器學習-Python實戰(微課版)》課件 第十二章 神經網絡_第4頁
《機器學習-Python實戰(微課版)》課件 第十二章 神經網絡_第5頁
已閱讀5頁,還剩74頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

第十二章:神經網絡學習目標通過本章的學習,你將能夠:掌握神經網絡算法的基本概念;掌握主要神經網絡算法模型;掌握數字數據的神經網絡評價與預測。

1.神經網絡入門2.

神經網絡基本理論3.

BP神經網絡算法4.神經網絡的Python實現5.從人工神經網絡到深度學習神經網絡(1)從人類神經元到神經網絡神經網絡(2)目前,關于神經網絡的定義尚不統一,按美國神經網絡學家HechtNielsen的觀點,神經網絡的定義是:“神經網絡是由多個非常簡單的處理單元彼此按某種方式相互連接而形成的計算機系統,該系統靠其狀態對外部輸入信息的動態響應來處理信息”。綜合神經網絡的來源、特點和各種解釋,它可簡單地表述為:人工神經網絡是一種旨在模仿人腦結構及其功能的信息處理系統。人工神經網絡(簡稱神經網絡):是由人工神經元互連組成的網絡,它是從微觀結構和功能上對人腦的抽象、簡化,是模擬人類智能的一條重要途徑,反映了人腦功能的若干基本特征,如并行信息處理、學習、聯想、模式分類、記憶等。神經網絡入門(1)

輸入可以類比為神經元的樹突,而輸出可以類比為神經元的軸突,計算則可以類比為細胞核。包含有3個輸入,1個輸出,以及2個計算功能,中間的箭頭線這些線稱為“連接”每,個上有一個“權值”。神經網絡入門(2)

感知器模型,在原來MP模型的“輸入”位置添加神經元節點,標志其為“輸入單元”。其余不變,我們將權值w1,w2,w3寫到“連接線”的中間。神經網絡入門(3)輸入層里的輸入單元只負責傳輸數據,不做計算;輸出層里的輸出單元則需要對前面一層的輸入進行計算。把需要計算的層次稱之為計算層,并把擁有一個計算層的網絡稱之為單層神經網絡。神經網絡入門(4)假如我們要預測的目標不再是一個值,而是一個向量,例如[2,3]。那么可以在輸出層再增加一個輸出單元。神經網絡入門(5)可以看到,z1的計算跟原先的z并沒有區別,我們已知一個神經元的輸出可以向多個神經元傳遞,因此z2的計算公式如圖所示:神經網絡入門(6)可以看到,z2的計算中除了三個新的權值:w4,w5,w6以外,其他與z1是一樣的。整個網絡的輸出如圖所示。神經網絡入門(7)W1,2代表后一層的第1個神經元與前一層的第2個神經元的連接的權值。根據以上方法標記,如圖所示:神經網絡入門(8)上面的決策過程,使用數學表達如下:1.神經網絡入門2.

神經網絡基本理論3.

BP神經網絡算法4.神經網絡的Python實現5.從人工神經網絡到深度學習激活函數

激活函數(Activationfunctions)對于神經網絡模型去學習、理解非常復雜和非線性的函數來說具有十分重要的作用,激活函數的存在將非線性特性引入到我們的網絡中。如果我們不運用激活函數,則輸出信號將僅僅是一個簡單的線性函數。線性函數的復雜性有限,從數據中學習復雜函數映射的能力更小。Sigmoid函數tanh函數sigmoid函數和tanh函數都存在一個問題:當神經網絡的層數增多的時候,由于在進行反向傳播的時候,鏈式求導,多項相乘,函數進入飽和區(導數接近于零的地方)就會逐層傳遞,這種現象被稱為梯度消失。RectifiedLinearUnit(ReLU)函數

映射區間:[0,+∞),雖然ReLU函數大于零的部分和小于零的部分分別都是線性函數,但是整體并不是線性函數,所以仍然可以做為激活函數,ReLU函數其實是分段線性函數,把所有的負值都變為0,而正值不變,這種操作被成為單側抑制。ReLU函數優點

大腦方面的研究表明生物神經元的信息編碼通常是比較分散及稀疏的。通常情況下,大腦中在同一時間大概只有1%-4%的神經元處于活躍狀態。使用線性修正以及正則化(regularization)可以對機器神經網絡中神經元的活躍度(即輸出為正值)進行調試;相比之下,邏輯函數在輸入為0時達到1/2,即已經是半飽和的穩定狀態,不夠符合實際生物學對模擬神經網絡的期望。不過需要指出的是,一般情況下,在一個使用修正線性單元(即線性整流)的神經網絡中大概有50%的神經元處于激活態;Softmax函數Softmax函數體:Softmax函數的功能就是將一個K維的任意實數向量映射成另一個K維的實數向量,其中向量中的每個元素取值都介于(0,1)之間。新的向量所有維度模長之和為1。Softmax函數經常用作多分類任務的輸出層。梯度下降與損失函數損失函數的極值深度學習中常用的損失函數二次代價函數:交叉熵代價函數:交叉熵誤差刻畫了兩個概率分布之間的距離,是分類問題中使用較多的一種損失函數。一般二次代價函數更多得用于回歸問題,而交叉熵誤差更多的用于分類問題。全局梯度下降算法(BGD)隨機梯度下降算法(SGD)小批量梯度下降(MBGD)梯度下降與損失函數更加有效率的梯度下降以及反向傳播:避免了梯度爆炸和梯度消失問題;簡化計算過程:沒有了其他復雜激活函數中諸如指數函數的影響;同時活躍度的分散性使得神經網絡整體計算成本下降。因為線性模型的表達能力不夠,引入激活函數是為了添加非線性因素;然后發展出了很多的激活函數適用于各種模型的訓練;RELU函數的引入給神經網絡增加了生物學特性,可以稱為靈魂激活函數。全連接網絡(Fully-ConnectedNetwork)簡寫為FCN,但很容易和全卷積網絡(Fully-ConvolutionalNetwork)的簡寫搞混,要注意,結構如圖所示:神經網絡的基本結構-全連接網絡(1)

神經網絡的基本結構-全連接網絡(2)

如果增加hiddenlayer的層數,就能使它成為深度全連接神經網絡:每相鄰兩層之間,每個神經元的輸入都是將前一層的輸出按照連邊的權值加權求和。輸入層往往是例外,輸入層各神經元是直接將輸入作為神經元的輸出。神經網絡的基本結構-卷積神經網絡卷積神經網絡(ConvolutionalNeuralNetwork,CNN)

用卷積、池化操作代替加權求和,是卷積神經網絡對全連接網絡的一個改進。由于權值共享,降低了參數數量,縮小了解空間,有利于提取泛化特征,有效緩解了過擬合。神經網絡的基本結構-循環神經網絡

循環神經網絡(RecurrentNeuralNetwork,RNN)它不僅有層間連接,還有層內連接。而這個層內連接的權值也是共享的,用于提取序列信息,有一定的記憶功能。在自然語言處理等領域有應用。神經網絡的主要類型-前饋神經網絡

前饋神經網絡是指神經元分層排列,分別組成輸入層、中間層和輸出層。每一層的神經元只接受來自前一層神經元的輸入,后面的層對前面層沒有信號反饋。輸入模式經過各層的順序傳播,最后在輸出層上得到輸出。這類網絡結構通常適于預測、模式識別及非線性函數逼近,一般典型的前向神經網絡基于梯度算法的神經網絡如BP網絡,最優正則化方法如SVM,徑向基神經網絡和極限學習機神經網絡。神經網絡的主要類型-反饋網絡

反饋網絡,又稱回歸網絡,輸入信號決定反饋系統的初始狀態,系統經過一系列狀態轉移后逐漸收斂于平衡狀態,因此,穩定性是反饋網絡最重要的指標之一,比較典型的是感知器網絡、Hopfield神經網絡、海明祌經網絡、小波神經網絡雙向聯系存儲網絡(BAM)、波耳茲曼機。自組織神經網絡是無教師學習網絡,它模擬人腦行為,根據過去經驗自動適應無法預測的環境變化,由于無教師信號,這類網絡通常采用競爭原則進行網絡學習。神經網絡的特點(1)人工神經網絡特點:(1)人工神經網絡(ANN)為廣泛連接的巨型系統。神經科學研究表明,人類中樞神經的主要部分大腦皮層由數百億個神經元組成,每個神經元共有若干個突觸,突觸為神經元之間的結合部,決定神經元之間的連接強度與性質。這表明大腦皮層是一個廣泛連接的巨型復雜系統,ANN的連接機制模仿了人腦的這一特性。(2)人工神經網絡(ANN)有其并行結構和并行處理機制。ANN不但結構上是并行的,它的處理順序也是并行的和同時的。在同一層內處理單元都是同時操作的,即神經網絡的計算功能分布在多個處理單元上。神經網絡的特點(2)(3)人工神經網絡(ANN)的分布式結構使其具有和人腦一樣的容錯性和聯想能力。大腦具有很強的容錯能力。我們知道,每天都有大腦細胞死去,但并沒有影響人們的記憶和思考能力。這正是因為大腦對信息的存儲是通過改變突觸的功能實現的,信息存儲于神經元連接強度的分布上,存儲區和操作區合二為一,不同信息之間自然溝通,其處理也為大規模連續時間模式。而存儲知識的獲得采用“聯想”的辦法。這類似人類和動物的聯想記憶,當一個神經網絡輸入一個激勵時,它要在已存儲的知識中尋找與輸入匹配最好的存儲知識為其解。神經網絡的特點(3)(4)人工神經網絡(ANN)具有自學習、自組織、自適應能力。大腦功能受先天因素的制約,但后天因素(如經歷、學習和訓練等)也起著重要作用。ANN很好地模擬了人腦的這一特性。如果最后的輸出不正確,系統可以調整加到每個輸入上去的權重以產生一個新的結果,這可以通過一定的訓練算法來實現。訓練過程是復雜的,通過網絡進行重復地輸入數據,且每次都調整權重以改善結果,最終達到所希望的輸出。在訓練過程中網絡便得到了經驗。理論研究表明,選擇合適的ANN能夠實現任何連續映射,通過對樣本的學習,ANN表現出分類、概括和聯想的能力。1.神經網絡入門2.

神經網絡基本理論3.

BP神經網絡算法4.神經網絡的Python實現5.從人工神經網絡到深度學習BP神經網絡算法

BP神經網絡(backpropagationneuralnetwork)是神經網絡的一種經典結構,因為其結構和訓練相對簡單,是我們學習神經網絡時的入門算法。BP神經網絡包含了特定的模型和特定的訓練算法。BP算法的網絡結構與訓練方式(1)采用非線性激活函數,Sigmoid函數。三個層次分別是:輸入層(InputLayer),隱藏層(HiddenLayer)和輸出層(Outputlayer),就好比神經網絡的各個神經元具有不同功能一樣。輸入層:負責接收外界刺激,即外部數據。隱藏層:又叫可多層,負責增加計算能力,以解決困難問題。但隱藏層神經元不能無限增加,否則會出現過擬合現象。輸出層:又稱為決策層,負責進行決策。BP算法的網絡結構與訓練方式(2)

一般來說,當數據和決策問題確定之后,輸入層和輸出層的節點個數是固定的,唯一可變的是隱藏層。層與層之間是通過神經鍵(權重)完成連接。訓練好之后的BP神經網路模型是前饋的(feedforward),但在進行模型訓練的時候是從輸出層到輸入層,是反饋的(即:TrainBackward),BP算法網絡結構如圖反向傳播算法(1)反向傳播算法(2)反向傳播算法(3)反向傳播算法(4)

BP神經網絡的學習流程

BP神經網絡學習的具體流程如下:(1)網絡初始化。對各連接權值和閾值分別賦予(0,1)區間的數值,設定誤差函數,給定計算精度值;(2)計算隱含層各神經節點的輸入和輸出;(3)計算輸出層各神經節點的輸入和輸出;(4)計算BP神經網絡連接到輸出層各神經元節點的權值誤差;(5)計算BP神經網絡連接到隱含層各神經元節點的權值誤差;(6)反向調整BP神經網絡各層的連接權值和閾值;(7)計算實際輸出值和期望輸出值的誤差,若滿足設定的精度值,則結束學習,否則繼續從步驟(2)逐步進行學習

BP算法的演示舉例(1)

典型的三層神經網絡的基本構成是輸入層、隱含層、輸出層,我們現在手里有一堆數據{x1,x2,x3,…,xn},輸出也是一堆數據{y1,y2,y3,…,yn},現在要他們在隱含層做某種變換,把數據灌進去后得到你期望的輸出。假設,你有這樣一個網絡層如圖所示:

BP算法的演示舉例(2)

第一層是輸入層,包含兩個神經元i1,i2,和截距項b1;第二層是隱含層,包含兩個神經元h1,h2和截距項b2,第三層是輸出o1,o2,每條線上標的wi是層與層之間連接的權重,激活函數我們默認為sigmoid函數?,F在對他們賦上初值如圖,所示:

BP算法的演示舉例(3)其中,輸入數據

i1=0.05,i2=0.10;輸出數據o1=0.01,o2=0.99;初始權重

w1=0.15,w2=0.20,w3=0.25,w4=0.30;

w5=0.40,w6=0.45,w7=0.50,w8=0.55目標:給出輸入數據i1,i2(0.05和0.10),使輸出盡可能與原始輸出o1,o2(0.01和0.99)接近。

BP算法的演示舉例(4)

BP算法的演示舉例(5)2.隱含層—->輸出層:計算輸出層神經元o1和o2的值:

BP算法的演示舉例(6)Step2反向傳播1.計算總誤差

BP算法的演示舉例(7)

BP算法的演示舉例(8)如圖所示可以更直觀的看清楚誤差是怎樣反向傳播的:

BP算法的演示舉例(9)

BP算法的演示舉例(10)

BP算法的演示舉例(11)

BP算法的演示舉例(12)

BP算法的演示舉例(13)3.隱含層—->隱含層的權值更新:方法其實與上面說的差不多,但是有個地方需要變一下,在上文計算總誤差對w5的偏導時,是從out(o1)—->net(o1)—->w5,但是在隱含層之間的權值更新時,是out(h1)—->net(h1)—->w1,而out(h1)會接受E(o1)和E(o2)兩個地方傳來的誤差,所以這個地方兩個都要計算,如圖所示。

BP算法的演示舉例(14)1.神經網絡入門2.

神經網絡基本理論3.

BP神經網絡算法4.神經網絡的Python實現5.從人工神經網絡到深度學習

神經網絡的Python實現(1)

#數據讀?。篸efloaddataset(filename):

fp=open(filename)

#存放數據:dataset=[]#存放標簽:labelset=[] foriinfp.readlines(): a=i.strip().split()

#每個數據行的最后一個是標簽:

dataset.append([float(j)forjina[:len(a)-1]]) labelset.append(int(float(a[-1]))) returndataset,labelset

神經網絡的Python實現(2)初始化各個參數:#x為輸入層神經元個數,y為隱層神經元個數,z輸出層神經元個數defparameter_initialization(x,y,z):#隱層閾值value1=np.random.randint(-5,5,(1,y)).astype(np.float64)

#輸出層閾值value2=np.random.randint(-5,5,(1,z)).astype(np.float64)

#輸入層與隱層的連接權重weight1=np.random.randint(-5,5,(x,y)).astype(np.float64)#隱層與輸出層的連接權重weight2=np.random.randint(-5,5,(y,z)).astype(np.float64)

returnweight1,weight2,value1,value2

神經網絡的Python實現(3)對數幾率函數(sigmoid函數):defsigmoid(z):

return1/(1+np.exp(-z))訓練過程(參數調整過程):weight1:輸入層與隱層的連接權重weight2:隱層與輸出層的連接權重value1:隱層閾值value2:輸出層閾值'''deftrainning(dataset,labelset,weight1,weight2,value1,value2): #x為步長 x=0.01 foriinrange(len(dataset)):

神經網絡的Python實現(4)#輸入數據 inputset=np.mat(dataset[i]).astype(np.float64) #數據標簽 outputset=np.mat(labelset[i]).astype(np.float64) #隱層輸入 input1=np.dot(inputset,weight1).astype(np.float64) #隱層輸出 output2=sigmoid(input1-value1).astype(np.float64) #輸出層輸入 input2=np.dot(output2,weight2).astype(np.float64)

神經網絡的Python實現(5)#輸出層輸出output3=sigmoid(input2-value2).astype(np.float64)#更新公式由矩陣運算表示 a=np.multiply(output3,1-output3) g=np.multiply(a,outputset-output3) b=np.dot(g,np.transpose(weight2)) c=np.multiply(output2,1-output2) e=np.multiply(b,c) value1_change=-x*e value2_change=-x*g

神經網絡的Python實現(6)weight1_change=x*np.dot(np.transpose(inputset),e)weight2_change=x*np.dot(np.transpose(output2),g)#更新參數 value1+=value1_change value2+=value2_change weight1+=weight1_change weight2+=weight2_change returnweight1,weight2,value1,value2

神經網絡的Python實現(7)

測試:deftesting(dataset,labelset,weight1,weight2,value1,value2): #記錄預測正確的個數rightcount=0foriinrange(len(dataset)):#計算每一個樣例通過該神經網路后的預測值 inputset=np.mat(dataset[i]).astype(np.float64) outputset=np.mat(labelset[i]).astype(np.float64)output2=sigmoid(np.dot(inputset,weight1)-value1) output3=sigmoid(np.dot(output2,weight2)-value2)

神經網絡的Python實現(8)#確定其預測標簽

ifoutput3>0.5:

flag=1

else:

flag=0

iflabelset[i]==flag:

rightcount+=1#輸出預測結果 print("預測為%d實際為%d"%(flag,labelset[i]))#返回正確率 returnrightcount/len(dataset)

神經網絡的Python實現(9)主函數:if__name__=='__main__': dataset,labelset=loaddataset('/horseColicTraining.txt') weight1,weight2,value1,value2=parameter_initialization(len(dataset[0]),len(dataset[0]),1) foriinrange(1500): weight1,weight2,value1,value2=trainning(dataset,labelset,weight1,weight2,value1,value2) rate=testing(dataset,labelset,weight1,weight2,value1,value2) print("正確率為%f"%(rate))

神經網絡的Python實現(10)

神經網絡的Python實現(11)運行后如圖所示:

神經網絡的Python實現(12)1.神經網絡入門2.

神經網絡基本理論3.

BP神經網絡算法4.神經網絡

溫馨提示

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

評論

0/150

提交評論