一漏峰、從人腦神經元到人工神經網絡
仿生學是通過分析生物系統(tǒng)的特質,再通過工程技術進行實現并有效利用生物功能的一門學科,例如:蝙蝠-雷達砾嫉。
樹突用來接受信息的輸入,一個神經元有多個樹突窒篱,經過細胞核處理加工后焕刮,得出的結果通過軸突,突觸輸出墙杯,只有一個軸突配并,多個突觸。當神經元與其他神經元相連高镐,當它興奮時溉旋,就會向相連的神經元發(fā)送化學物質,從而改變這些神經元的電位嫉髓,當電位超過了一個閾值观腊,那么它就會被激活,即興奮算行,傳遞化學物質梧油。
經過加法器,接收到總輸入值州邢,與神經元的閾值進行比較婶溯,然后通過激活函數處理以闡述神經元的輸出。
輸入層只負責接收信息偷霉,一般3個x迄委,加上一個常數項,輸出層一般有2個節(jié)點类少,如果沒有隱藏層叙身,則為感知機。
把神經元的輸入向前傳遞獲得輸出的過程稱為前饋(feedforward)硫狞。
二信轿、感知機
感知機是神經網絡和支持向量機的基礎,支持向量機對分離超平面增加約束條件残吩,即間隔最大财忽,和核技巧。而神經網絡是增加了隱藏層泣侮。
激活函數的作用是將無限制的輸入轉換為可預測形式的輸出即彪。感知機的激活函數是階躍函數。一般常見的還有sigmod函數,將可能在較大范圍內變化的輸入值擠壓到(0活尊,1)輸出值范圍內隶校。也稱為擠壓函數漏益。
三、bp神經網絡
在感知機的基礎上加入隱藏層深胳,構造多個超平面绰疤,可以解決非線性可分問題。隱藏層和輸出層神經元都是擁有激活函數的功能神經元舞终。
神經網絡的學習過程轻庆,就是根據訓練數據萊調整神經元之間的連接權和每個功能神經元的閾值。
簡單來講敛劝,“神經網絡”就是通過輸入多個非線性模型以及不同模型之間的加權互聯(lián)(加權的過程在隱蔽層完成)榨了,最終得到一個輸出模型。其中攘蔽,隱蔽層所包含的就是非線性函數。
由于“神經網絡”擁有特有的大規(guī)模并行結構和信息的并行處理等特點呐粘,因此它具有良好的自適應性满俗、自組織性和高容錯性,并且具有較強的學習作岖、記憶和識別功能唆垃。目前神經網絡已經在信號處理、模式識別痘儡、專家系統(tǒng)辕万、預測系統(tǒng)等眾多領域中得到廣泛的應用。
“神經網絡”的主要缺點就是其知識和結果的不可解釋性沉删,沒有人知道隱蔽層里的非線性函數到底是如何處理自變量的渐尿,“神經網絡”應用中的產出物在很多時候讓人看不清其中的邏輯關系。但是矾瑰,它的這個缺點并沒有影響該技術在數據化運營中的廣泛應用砖茸,甚至可以這樣認為,正是因為其結果具有不可解釋性殴穴,反而更有可能促使我們發(fā)現新的沒有認識到的規(guī)律和關系凉夯。
四、訓練神經網絡
學習如何訓練它采幌,其實這就是一個優(yōu)化的過程劲够。假設有一個數據集,包含4個人的身高休傍、體重和性別:
現在我們的目標是訓練一個網絡征绎,根據體重和身高來推測某人的性別。為了簡便起見磨取,我們將每個人的身高炒瘸、體重減去一個固定數值淤堵,把性別男定義為1、性別女定義為0顷扩。
在訓練神經網絡之前拐邪,我們需要有一個標準定義它到底好不好,以便我們進行改進隘截,這就是損失(loss)扎阶。比如用均方誤差(MSE)來定義損失:
n是樣本的數量,在上面的數據集中是4婶芭;y代表人的性別东臀,男性是1,女性是0犀农;ytrue是變量的真實值惰赋,ypred是變量的預測值。顧名思義呵哨,均方誤差就是所有數據方差的平均值赁濒,我們不妨就把它定義為損失函數。預測結果越好孟害,損失就越低拒炎,訓練神經網絡就是將損失最小化。
如果上面網絡的輸出一直是0挨务,也就是預測所有人都是男性击你,那么損失是:
MSE= 1/4 (1+0+0+1)= 0.5
五、減少神經網絡損失
這個神經網絡不夠好谎柄,還要不斷優(yōu)化丁侄,盡量減少損失。我們知道朝巫,改變網絡的權重和偏置可以影響預測值绒障,但我們應該怎么做呢?
為了簡單起見捍歪,我們把數據集縮減到只包含Alice一個人的數據户辱。于是損失函數就剩下Alice一個人的方差:
預測值是由一系列網絡權重和偏置計算出來的:
所以損失函數實際上是包含多個權重、偏置的多元函數:
如果調整一下w1糙臼,損失函數是會變大還是變新洹?我們需要知道偏導數?L/?w1是正是負才能回答這個問題变逃。
根據鏈式求導法則:
而L=(1-ypred)2必逆,可以求得第一項偏導數:
接下來我們要想辦法獲得ypred和w1的關系,我們已經知道神經元h1、h2和o1的數學運算規(guī)則:
實際上只有神經元h1中包含權重w1名眉,所以我們再次運用鏈式求導法則:
然后求?h1/?w1
我們在上面的計算中遇到了2次激活函數sigmoid的導數f′(x)粟矿,sigmoid函數的導數很容易求得:
總的鏈式求導公式:
這種向后計算偏導數的系統(tǒng)稱為反向傳播(backpropagation)。
上面的數學符號太多损拢,下面我們帶入實際數值來計算一下陌粹。h1、h2和o1
h1=f(x1?w1+x2?w2+b1)=0.0474
h2=f(w3?x3+w4?x4+b2)=0.0474
o1=f(w5?h1+w6?h2+b3)=f(0.0474+0.0474+0)=f(0.0948)=0.524
神經網絡的輸出y=0.524福压,沒有顯示出強烈的是男(1)是女(0)的證據√椭龋現在的預測效果還很不好。
我們再計算一下當前網絡的偏導數?L/?w1:
這個結果告訴我們:如果增大w1荆姆,損失函數L會有一個非常小的增長蒙幻。
改進:隨機梯度下降
下面將使用一種稱為隨機梯度下降(SGD)的優(yōu)化算法,來訓練網絡胆筒。
經過前面的運算邮破,我們已經有了訓練神經網絡所有數據。但是該如何操作仆救?SGD定義了改變權重和偏置的方法:
η是一個常數抒和,稱為學習率(learning rate),它決定了我們訓練網絡速率的快慢派桩。將w1減去η·?L/?w1,就等到了新的權重w1蚌斩。
當?L/?w1是正數時铆惑,w1會變小送膳;當?L/?w1是負數 時员魏,w1會變大。
如果我們用這種方法去逐步改變網絡的權重w和偏置b叠聋,損失函數會緩慢地降低撕阎,從而改進我們的神經網絡。
訓練流程如下:
1碌补、從數據集中選擇一個樣本虏束;
2、計算損失函數對所有權重和偏置的偏導數厦章;
3镇匀、使用更新公式更新每個權重和偏置;
4袜啃、回到第1步汗侵。
(轉自:https://mp.weixin.qq.com/s/JrLcPFVX6_uui-bfLHRefg,內含代碼)