bp神经网络训练_数据分析模型6——神经网络基础(人工智能的底层模型)
未經許可請勿轉載
更多數據分析內容參看這里
今天我們來學習人工智能的底層模型——神經網絡(NEURAL NETWORKS),現在比較熱門的一個模型是深度學習,深度學習的基礎也是神經網絡,要學好深度學習,神經網絡不了解基本是不可能的。
一、神經網絡概述
首先我們來看一下生物的神經構造,因為神經網絡就是從生物的神經構造得到的靈感。在生物的神經構造中,下圖中圓形的是細胞本體(細胞核),神經網絡中稱之為神經元,人具有
個神經元。神經元根神經元之間是通過軸突來溝通的,在靠近細胞本體的地方比較粗,末端比較細,稱之為樹狀突。樹狀突和樹狀突會碰觸在一起稱之為突觸,神經網絡中稱為神經鍵。細胞核就是通過神經鍵來互相溝通協調決策的,人有 個神經鍵,因為不是每個神經元之間都有連接的。數學家在看過生物的神經構造后,就想通過數學模型來模仿。下圖是一個非常有名的神經網絡,一般人們談到神經網絡指的就是它,全稱是Backpropagation(BP) Neural Networks,翻譯過來就是倒傳遞神經網絡,也有的人稱之為多層感知機(Multi-Layer Perceptrons)。在BP神經網絡中,神經元被分為三個層次,有輸入層,隱藏層以及輸出層。輸入層的神經元負責接收外來的輸入和刺激,它是用于數據收集用。輸出層又稱決策層,它的每個神經元在做一個決策,如果有五個決策就需要五個輸出層神經元。中間的隱藏層神經元負責增加計算能力,當問題比較復雜時,需要隱藏層的輔助使得問題解決比較順利,當然隱藏層的神經元不能過多,否則會造成記憶效應,即會把所有訓練數據的輸入和結果記錄下來,以致于輸入訓練集中的一筆數據進入時它的答案會十分正確(類似背書),但是遇到沒有見過的數據時就表現很差,也就是存在overfitting(過度擬合)問題。
在上圖中,輸入層會跟隱藏層的所有神經元做連接,連接的部分就稱之為神經鍵。隱藏層會跟輸出層的所有神經元做連接,但是跨層之間是不會連接的,這就是BP神經網絡的一個構造。如此前所述,這邊展示的是一層的隱藏層,但是隱藏層也可以多層,雖然隱藏層不能過多避免出現記憶效應,但是隱藏層也不能過少甚至沒有,否則計算能力不足,預測結果也會不如預期。
上圖是一個多層隱藏層,隱藏層的節點個數不必一樣多,也不需要同輸入層一樣多。輸入層會跟第一層隱藏層的神經元做一個完全連接,第一層隱藏層跟第二層隱藏層的神經元做一個完全連接,第二層隱藏層會跟輸出層的神經元完全連接,這邊輸出層只有一個節點,代表其只要做一個決策。
二、不同形式的神經網絡
當然神經網絡的構造還有可以其它形式,比如下面是一個兩層的神經網絡,只有一個輸出節點,且沒有隱藏層,這種神經網絡用來處理比較簡單的單個決策問題。
再來看一個帶有隱藏層的三層神經網絡,它可以處理比較復雜的一個決策問題。
下面是輸出層有多個節點的三層神經網絡,可以處理復雜的n個決策問題。我們需要根據要處理的問題復雜程度考慮是否要有隱藏層,并根據要決策的問題個數來決定輸出層的構造。
三、神經網絡實例
我們來看一個雜志喜好預測的實例。
因為這家公司同時發行五種雜志,所以一次要做五個決策(是否對我們的汽車、房屋、運動、音樂、漫畫雜志),所以輸出層的決策節點有五個。我們使用年齡,是否擁有房屋,是否擁有汽車,和所住區域四個輸入字段來判斷。
需要指出的是,神經網絡中只允許數值型的輸入數據,類似KNN。在本例子中,年齡(age)被離散化成三段(<30, 30-50,>50),不再是數值型,因此需要進行攤平處理(轉換為啞變量)才能輸入。實際上神經網絡中只能輸入0到1之間的數據,而不能輸入一萬這樣的數,也必須像KNN一樣做極值正規化。
本例中,選擇了四個神經元作為隱藏層的個數,前面提到隱藏層的神經元不能過多,那到底要多少神經元個數呢?那就需要根據處理事務的復雜度來決定,在實際中有個不成文的做法,
,即使用輸入層的神經元個數乘以輸出層的神經元個數,然后開根號,這代表了所處理問題的復雜度。以此為基礎去調整隱藏層的神經元個數,在效能相同的情況下,神經元個數越少越好。在本例中, ,我們就以6個神經元為基礎,通常往下調整,6,5,4各跑一下結果,在結果差不多的情況下盡可能選擇少的神經元。最終該神經網絡輸出就是對于各種雜志喜好的概率,Feedforword指的是數據從左往右運行。但是在訓練神經網絡時,順序是相反的,backforward,這也是BP神經網絡名稱的由來。
我們再來看另一個手寫數字識別的例子。
要做手寫數字的識別,首先我們需要對一張數字影像進行切割,按照單個的數字區分開來。分割完成之后,再對每個數字做辨識,此處我們假設單張數字照片是28*28的點陣,每一個點如果對應的黑色字跡就標位1,否則就為0。
為了解決識別數字這個問題,我們構造一個三層的BP神經網絡,輸入節點有784個(28*28),輸出節點就是0,1,2,3,4,5,6,7,8,9這十個數字的概率,而隱藏層的個數,就是根據
去做調整,最終將其定在15,此時數字的識別率已經達到90%以上,為了避免過擬合的問題,15是一個比較合適的數字。四、BP神經網絡的訓練
要訓練一個BP神經網絡,我們首先需要構建一個網絡,這涉及到兩件事,一是輸入數據的表示方式(數值型數據是做極值正規化Minmax normalization,還是離散化后攤平處理),這會影響輸入層節點個數,當然輸入屬性的個數也會影響。二是要考慮做一個決策,兩個決策還是多個決策,這會影響輸出節點的個數,以及問題的復雜度,如果問題復雜還必須要有隱藏層。輸入和輸出層必須要有,你唯一可以選擇的就是隱藏層要不要有,要有幾層,以及隱藏層上的節點個數。就層數而言,深度學習就是具有多層隱藏層的神經網絡,所以它可以處理比較復雜的類似下圍棋這樣的問題。
在網絡建立后,就要用訓練數據去訓練網絡。如果是一個分類問題,我們的目標就是獲得一組所謂的權重,即神經鍵上面的值,使得訓練集中案例進入神經網絡后都能做正確的分類。網絡訓練好后,就可以去解釋結果。
假設我們的訓練已經完成,就會生成以下的神經網絡。當具備特定特征的一個人進入網絡時,就會生成其喜歡各種雜志的概率,從結果中我們可以看出這個人對汽車雜志和漫畫是有興趣的,因此可以向其推銷這兩種雜志。
但是這個神經網絡是怎么訓練出來的?我們仍未解決。要給出這個神經網絡,我們就需要知道神經元的具體構造。對于輸入層來說,神經元是沒有構造的,它只做數據的轉發,但是隱藏層和輸出層是有結構的。有一個好消息是,隱藏層和輸出層的每一個神經元的構造都是一樣的。
上圖就是單個神經元的構造,左側的X1,X2,Xn是該神經元前一次傳遞過來的數值,我們會對每一個Xi乘以一個權重,加總后作為上一層傳遞過來的信息總和。比如要決定是否要去看一部電影,我們會去咨詢別人的意見,小張可能給出來一個很高的分數,但是考慮到他的意見經常和我相左,我可能會乘以一個負的權重,小李給出了一個一般的分數,他的意見和我經常一致,因此我會乘以一個高的權重,我們可能還要考慮天氣的因素才能決定是否要去看。在方框內部,有一個Bias(偏見),這個指的其實是我自己對于這部電影的意見。因此是否要去看電影的信息總量
。最后在輸出是否要看電影時,我們還需要通過一個激發函數(Activation Function)把NET值壓制在0-1之間。下圖中的Sigmoid function就是激發函數,Sigmoid函數又叫Logistic函數,它在機器學習領域有極其重要的地位,函數的基本性質:定義域:(?∞,+∞)(?∞,+∞),值域:(?1,1)(?1,1),函數在定義域內為連續和光滑函數,處處可導,導數為:f′(x)=f(x)(1?f(x))。Sigmoid函數之所以叫Sigmoid,是因為函數的圖像很想一個字母S。這個函數是一個很有意思的函數,從圖像上我們可以觀察到一些直觀的特性:函數的取值在0-1之間,且在0.5處為中心對稱,并且越靠近x=0的取值斜率越大。也就是說當我們的信息輸入為0的時候,輸出的概率是0.5,當信息輸入>0時,輸出的概率在0-1之間,當信息輸入<0時i,輸出的概率在0-0.5之間。
我們具體來計算一個例子。下圖中時一個BP神經網絡,對于X=(1,0,1)需要預測其概率,真實的數據標簽是1。在初始狀況下,會隨機生成各個神經鍵的權重(在-1到1之間),如下表所示,也會隨機生成各個神經元的偏見。
通過計算,我們得出X輸入的輸出為0.474,這與實際情況1不符。這就告訴我們,由于一開始神經網絡的權重值和偏見值都是隨機產生的,因此其結果也是無法預測的。所以我們的目標就是,能否生成一組權重值和偏見值,使得收入(1,0,1)的時候輸出結果非常接近1。
在雜志喜好預測例子中,也涉及逆向權重及偏移值的修正,因為初始跑出來結果和實際不符。要修正權重值,必然要解決怎么計算誤差這個問題。誤差= 期望輸出 - 實際輸出=
,這邊使用的是平方誤差,可做微分,對后面權重的調整是有幫助的。我們希望得到一組最佳的權重值和偏移值,去最小化誤差。那對于上面的誤差函數,要取到極值,就是要對這個函數偏微分,根據偏微分的結果取到最佳的權重值和偏移值。
對于上圖中的神經網絡,要使得最終輸出節點的誤差最小,我們根據偏微分可以得出權重和偏差值調整的公式,此處我們略過的微分的部分。要調整權重值和θ值,我們要計算6號、4號和5號的節點誤差,如下表所示(這部分公式就是微分的結果)。基本上同一層的誤差公式時一樣的,不同層會不相同,從下表的公式可以看出6號的誤差會影響4號和5號,4號和5號的誤差會影響1號、2號和3號,這就是BP神經網絡被稱為倒傳遞網絡的原因。
接下來,我們利用4,5,6這三個節點的節點誤差來調整權重值和θ值,下表中
的權重調整公式就是4的輸出乘以6的誤差,新的值就是原來的權重加上調整值,下邊(0.9)指的是學習速率(Learning rate)。根據上面重新生成一組權重值和θ值,我們把101那筆數據重新喂入,但是不會立刻就到1,而是會到0.5多,所以修正一次后還要修正第二次以及第三次等,這就是神經網絡學習的過程。在解釋一下learning rate的概念,假設-0.3是初始的權重,-0.25是最佳權重,在第一次調整時系統覺得太大可能會調到-0.2,第二次調整時覺得太小可能又會調回-0.3,如此循環始終無法達到最佳的-0.25, 所以我們設置一個限制雖然可以調整-0.1,但每次只允許調整其中的(0.9)比例,當然這個比例可以調整,比如設成0.1,每次進行微調處理。Learning rate設的大,很快就會收斂,但是error降不下來,Learning rate設的小,訓練的回合數就比較多,運行效率慢。
如果誤差函數比較復雜,神經網絡中就有區域最佳的概念,如果初始權重在左側,權重值就會收斂到左側的最低點,效果就一般。如果初始權重在右側,權重值就會收斂到右側的最低點,這時候誤差就比較低。所以在神經網絡中,起始的權重值也比較重要,在實際中,我們會用不同的隨機種子設置多次不同的起始權重,找一次誤差比較低的那一次,當做我們神經網絡的初始結果。
總結一下,初始權重和θ值, learning rate ,隱藏層的神經元個數都是可以調整的。
關注我的公眾號:nxiaoyou總結
以上是生活随笔為你收集整理的bp神经网络训练_数据分析模型6——神经网络基础(人工智能的底层模型)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 为什么动态语言图片_聊聊动
- 下一篇: 如何设置Mac苹果电脑的触发角锁屏方式