A Road to Deep Neural Networks
作????者:XU Ruilin
Master's degree candidate, major in pattern recognition and intelligent system.
(本文收錄于專(zhuān)題《神經(jīng)網(wǎng)絡(luò)擷英》)
導(dǎo)??語(yǔ):人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network, ANN)簡(jiǎn)稱(chēng)神經(jīng)網(wǎng)絡(luò)(Neural Network, NN)绿语,是一個(gè)大量簡(jiǎn)單元件相互連接而成的復(fù)雜網(wǎng)絡(luò)源内,具有高度的非線性系瓢,能夠進(jìn)行復(fù)雜的邏輯操作和非線性關(guān)系實(shí)現(xiàn)的系統(tǒng)。本文從淺層到深層對(duì)人工神經(jīng)網(wǎng)絡(luò)進(jìn)行了簡(jiǎn)要總結(jié)胖缤。主要內(nèi)容來(lái)自Andrew Ng的Coursera深度學(xué)習(xí)系列課程桥嗤,符號(hào)記法也采用Andrew Ng的記法。
1?從生物學(xué)而來(lái)的M-P神經(jīng)元模型
????在高中二年級(jí)的生物課上疚沐,我們學(xué)過(guò)神經(jīng)元是一個(gè)由“樹(shù)突——胞體——軸突——軸突末梢”組成的細(xì)胞(Fig.1)栽燕。1943年罕袋,Warren McCulloch和 Walter Pitts參考生物神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)改淑,提出了M-P神經(jīng)元模型碍岔。
????M-P神經(jīng)元模型的結(jié)構(gòu)如 Fig.2 所示,可以視作為神經(jīng)元樹(shù)突傳入的電信號(hào)朵夏,三個(gè)箭頭可以視作為樹(shù)突蔼啦,中間的圓圈可以視作為神經(jīng)元胞體,從圓圈出來(lái)的箭頭可以視作是軸突仰猖,可以視作為神經(jīng)元傳出的電信號(hào)(神經(jīng)沖動(dòng))捏肢。電信號(hào)在胞體中的單元進(jìn)行線性相加處理。
????初等數(shù)學(xué)告訴我們饥侵,在表達(dá)能力上鸵赫,有限次連續(xù)線性變換與一次線性變換相同 [注1] 。如果只進(jìn)行線性變換躏升,不管網(wǎng)絡(luò)的規(guī)模多模龐大辩棒,有多少個(gè)神經(jīng)元節(jié)點(diǎn),其表達(dá)能力與一個(gè)神經(jīng)元沒(méi)有區(qū)別膨疏。
注1?設(shè)有
????則??
??????????
??????????
????記??則
????同理一睁,遞歸到也是一個(gè)線性變換。
????因此佃却,在神經(jīng)元胞體中引入了非線性函數(shù)來(lái)進(jìn)行非線性變換者吁,用以解決更為復(fù)雜的非線性問(wèn)題。在M-P神經(jīng)元模型中饲帅,作者為了模擬神經(jīng)元的膜電位閾值被激活的過(guò)程复凳,使用符號(hào)函數(shù)作為非線性函數(shù)瘤泪,此處不做贅述。
2?單層神經(jīng)網(wǎng)絡(luò)
????在M-P神經(jīng)元中育八,顯然電信號(hào)刺激的強(qiáng)度是不同的均芽,在神經(jīng)網(wǎng)絡(luò)模型中,我們采用參數(shù)(parameters)來(lái)表示這種強(qiáng)度单鹿,代表權(quán)重(weights)掀宋。同時(shí),引入偏置(bias)項(xiàng)參數(shù)仲锄,來(lái)表示神經(jīng)元細(xì)胞膜電位閾值 [注2]劲妙。
注2?參數(shù)的意義是比較易于理解的,而關(guān)于偏置(在統(tǒng)計(jì)學(xué)中也稱(chēng)偏差)儒喊,分兩個(gè)角度解釋——
????從生物學(xué)角度看镣奋,在生物體中,神經(jīng)元的興奮程度超過(guò)了某個(gè)限度怀愧,也就是細(xì)胞膜去極化程度超過(guò)了某個(gè)閾值電位時(shí)侨颈,神經(jīng)元被激發(fā)而輸出神經(jīng)脈沖。人工神經(jīng)網(wǎng)絡(luò)借鑒了這種閾值特性芯义,神經(jīng)元激活與否取決于某一閾值哈垢,即只有其輸入綜合超過(guò)閾值時(shí),神經(jīng)元才會(huì)被激活扛拨,這個(gè)閾值體現(xiàn)在線性單元中耘分,就是偏置項(xiàng)
????從數(shù)學(xué)角度看,神經(jīng)網(wǎng)絡(luò)模型的初衷是解決分類(lèi)(Classification)問(wèn)題(當(dāng)然現(xiàn)在的神經(jīng)網(wǎng)絡(luò)也可以解決回歸/Regression問(wèn)題)绑警。以最簡(jiǎn)單的二分類(lèi)問(wèn)題為例求泰,就是用一條直線將兩類(lèi)樣本點(diǎn)分開(kāi),如果沒(méi)有偏置項(xiàng)计盒,那么用于分類(lèi)的所有直線都只能通過(guò)原點(diǎn)渴频,這顯然是不能很好地解決分類(lèi)問(wèn)題的(神經(jīng)網(wǎng)絡(luò)中的偏置項(xiàng)b到底是什么[EB/OL].(2018-07-05)[2020-02-19])。
????應(yīng)用新的參數(shù)表示法后北启,神經(jīng)網(wǎng)絡(luò)模型變成了如 Fig.3 所示的結(jié)構(gòu)卜朗,在一些文獻(xiàn)中稱(chēng)其為感知機(jī)(Preception)模型。若記暖庄,聊替,則線性單元可以表述為,是非線性函數(shù)培廓。
????觀察這個(gè)模型可以發(fā)現(xiàn)(如果有機(jī)器學(xué)習(xí)算法基礎(chǔ))惹悄,我們知道在分類(lèi)問(wèn)題中常用的邏輯斯蒂回歸(Logistic Regression)方法與上述模型具有相同的結(jié)構(gòu)。
2.1?從邏輯斯蒂回歸說(shuō)起
????我們以一個(gè)簡(jiǎn)單的二分類(lèi)問(wèn)題為例來(lái)介紹邏輯斯蒂回歸肩钠。假如要判斷是不是新型冠狀病毒COVID-19泣港,用表示“是”暂殖,表示“不是”,那么數(shù)據(jù)對(duì)就可以表示這個(gè)實(shí)例当纱。假設(shè)輸入的特征有共個(gè)呛每,分別表示種檢測(cè)方法測(cè)得的指標(biāo)值,記坡氯。我們對(duì)采納這種檢測(cè)方法的權(quán)重為晨横,記,樣本偏差為箫柳。輸出的結(jié)果記為手形,表示是新冠病毒的概率,用條件概率表達(dá)為悯恍。
????在經(jīng)過(guò)計(jì)算后库糠,由于并不一定收斂于區(qū)間內(nèi),因此要對(duì)進(jìn)行歸一化(Normalization)處理涮毫。在Logistic Regression中瞬欧,使用Sigmoid函數(shù)進(jìn)行歸一化。
????Sigmoid函數(shù)(Fig.4)定義為
????Sigmoid函數(shù)就是神經(jīng)網(wǎng)絡(luò)模型中非線性函數(shù)的一種罢防,在神經(jīng)網(wǎng)絡(luò)中艘虎,我們稱(chēng)這種非線性函數(shù)為激活函數(shù)(Activation Function),這樣篙梢,例子中的問(wèn)題就變成了 ????那么顷帖,我們?nèi)绾卧u(píng)價(jià)我們分類(lèi)模型的效果呢?在統(tǒng)計(jì)機(jī)器學(xué)習(xí)中渤滞,對(duì)于單個(gè)樣本數(shù)據(jù),我們常用損失函數(shù)(Loss Function)來(lái)評(píng)估機(jī)器學(xué)習(xí)算法榴嗅。在Logistic Regression中妄呕,LOSS函數(shù)為[注3][注4]
注3?在上式中,對(duì)數(shù)應(yīng)為以自然常數(shù)為底的自然對(duì)數(shù)嗽测,在數(shù)學(xué)教材中習(xí)慣記為
????此外绪励,關(guān)于未指明底數(shù)的用法,在數(shù)學(xué)中一般指常用對(duì)數(shù)(底為10)唠粥;在計(jì)算機(jī)科學(xué)中(如微機(jī)原理疏魏、數(shù)據(jù)結(jié)構(gòu)、算法等)一般指底為2的對(duì)數(shù)晤愧;在編程語(yǔ)言中一般指自然對(duì)數(shù)(奇怪的知識(shí)增加了大莫!)
注4?為什么損失函數(shù)長(zhǎng)這個(gè)樣子?
????在Logistic Regresion中官份,我們的目標(biāo)是要使盡可能地接近只厘。前面我們說(shuō)到烙丛,,那么
????由于這是一個(gè)二分類(lèi)問(wèn)題羔味,河咽,因此,經(jīng)過(guò)代數(shù)變幻的鬼斧神工我們將上述兩個(gè)條件概率合并成一個(gè)表達(dá)式????我們驗(yàn)證一下就可以知道赋元,當(dāng)時(shí)忘蟹,當(dāng)時(shí),
????由于(這里指)是嚴(yán)格單調(diào)遞增函數(shù)搁凸,則的單調(diào)性與完全一致寒瓦。
????又因?yàn)?img class="math-block" src="https://math.jianshu.com/math?formula=%5Clog%20P(y%7Cx)%3Dy%5Clog%20%5Chat%7By%7D%2B(1-y)%5Clog%20(1-%5Chat%7By%7D)" alt="\log P(y|x)=y\log \hat{y}+(1-y)\log (1-\hat{y})" mathimg="1">????要使最大,就是使損失(LOSS)最小坪仇,因此取負(fù)號(hào)得
2.2?用矩陣描述問(wèn)題
????如果要編程來(lái)實(shí)現(xiàn)前述的單樣本Logistic Regression問(wèn)題萝衩,我們要寫(xiě)一個(gè)for
循壞——
# Python 3
# input w,x,b
for i in range(n):
z += w[i]x[i]
z += b
????實(shí)際上,在之前的描述中臊泰,我們已經(jīng)采用了一種記法缔御,記,記皆刺,然后用來(lái)代替的過(guò)程少辣。在Python 3
中,我們通過(guò)調(diào)用第三方庫(kù)numpy
羡蛾,就可以用一行代碼z = np.dot(w.T,x) + b
解決上面的問(wèn)題漓帅。
????那么如果有份病毒樣本,這個(gè)檢測(cè)問(wèn)題又該如何表示痴怨?
????現(xiàn)有份病毒樣本忙干,其中每份病毒樣本的個(gè)特征為,上標(biāo)表示第份樣本浪藻,下標(biāo)表示第個(gè)特征捐迫,例如表示第3份病毒樣本的第1個(gè)特征。
????那么爱葵,我們的問(wèn)題變成了 ????也就是把一個(gè)樣本的Logistic Regression重復(fù)遍施戴。我們現(xiàn)在從編程的角度來(lái)思考一下,對(duì)于份萌丈,每份有個(gè)特征的樣本赞哗,要如何實(shí)現(xiàn)?
????顯然辆雾,我們要用2個(gè)for
循環(huán)才能實(shí)現(xiàn)個(gè)樣本肪笋,以及每個(gè)樣本個(gè)特征的線性計(jì)算。
# Python 3
import numpy as np
def sigmoid(x):
return 1/(1 + np.exp(-x))
# input: w,x,b
for i in range(m):
for j in range(n):
z += w[j] * x[i,j]
z += b
y_hat = sigmoid(z)
z = 0
????這種方法的時(shí)間復(fù)雜度為,是一個(gè)P問(wèn)題涂乌,還是過(guò)于復(fù)雜艺栈。我們考慮將前述的行向量乘列向量的做法推廣到個(gè)樣本的情況下——
????記(此時(shí)的權(quán)重還不會(huì)隨樣本變化,因此每個(gè)樣本在神經(jīng)網(wǎng)絡(luò)中施加的刺激強(qiáng)度都是同等的湾盒,等看完2.3節(jié)之后就知道權(quán)重變化時(shí)是什么情況了)湿右,記輸入為矩陣,為????我們用本科二年級(jí)學(xué)過(guò)的矩陣乘法就可以知道????也即????繼而 ????這在Python 3
中可以寫(xiě)成Z = np.dot(w.T,X) + b
[注5]罚勾。這種直接加常數(shù)的操作毅人,就是將reshape
到與之相加的矩陣維度再相加,Python
中稱(chēng)之為廣播(Broadcasting)尖殃。
注5?為什么
numpy
中應(yīng)用矩陣操作可以降低時(shí)間復(fù)雜度丈莺?
????實(shí)際上,在numpy
算法底層送丰,運(yùn)用了一種稱(chēng)為單指令多數(shù)據(jù)流(Single Instruction Multiple Data, SIMD)指令的操作缔俄,它使得多維數(shù)據(jù)可以在CPU中進(jìn)行并行計(jì)算,因此比for
循環(huán)低效占用CPU的計(jì)算效率更高器躏。
????這里對(duì)和在神經(jīng)網(wǎng)絡(luò)中的意義再作進(jìn)一步解釋?zhuān)?strong>是每個(gè)樣本的特征總數(shù)俐载,決定了我們的神經(jīng)網(wǎng)絡(luò)有多少個(gè)輸入。是樣本總數(shù)登失,決定了我們的神經(jīng)網(wǎng)絡(luò)要運(yùn)行多少次遏佣。
????到目前為止,我們?cè)谇拔乃龅墓ぷ骼空悖簿褪窃谏窠?jīng)網(wǎng)絡(luò)中進(jìn)行的從輸入到輸出的過(guò)程状婶,成為前向傳播(Forward Propagation)。
????這時(shí)馅巷,在個(gè)樣本的情況下膛虫,第個(gè)樣本的損失函數(shù)就變成了????我們用代價(jià)函數(shù)(Cost Function)來(lái)衡量共個(gè)樣本的效果,記????又令杈,而是樣本數(shù)據(jù)[注6]走敌,所以代價(jià)函數(shù)也可以改寫(xiě)為
注6?在算法中,學(xué)習(xí)者必須明確區(qū)分代數(shù)符號(hào)表述的對(duì)象是變量(Variable)還是參量/參數(shù)(Parameter)逗噩。實(shí)際上,變量和參量要根據(jù)面對(duì)的問(wèn)題進(jìn)行具體分析跌榔。例如上例中异雁,是參量,是變量僧须。
????讀者可以嘗試分析纲刀,在本文介紹邏輯斯蒂回歸和梯度下降兩個(gè)算法中所用的代數(shù)符號(hào),哪些是參量担平?那些是變量示绊?
2.3?讓模型不斷優(yōu)化
????我們之前已經(jīng)介紹了損失函數(shù)是對(duì)分類(lèi)結(jié)果的度量锭部。那么,如何讓LOSS盡可能的忻婧帧拌禾?也就是使更接近,即最大展哭?
2.3.1?一點(diǎn)數(shù)理統(tǒng)計(jì)和微分操作
????在本科二年級(jí)湃窍,我們?cè)跀?shù)理統(tǒng)計(jì)中的參數(shù)估計(jì)部分學(xué)過(guò)極大似然估計(jì)(log-likelihood)方法。我們先從一個(gè)樣本開(kāi)始——????在這個(gè)問(wèn)題中匪傍,我們估計(jì)的對(duì)象是您市,用極大似然估計(jì),求導(dǎo)有????接著令役衡,求使取極小的即可茵休。
????這種表達(dá)實(shí)際上與我們的本科數(shù)學(xué)知識(shí)不太一致,實(shí)際上手蝎,是關(guān)于的函數(shù)榕莺,那么我們將損失函數(shù)改寫(xiě)為,然后對(duì)兩個(gè)參數(shù)求偏導(dǎo)數(shù)柑船,然后采用同樣的極大似然估計(jì)方法帽撑,令——????接著取最優(yōu)估計(jì)的參數(shù)就完成了這個(gè)過(guò)程[注7]。
注7?本文中的都是向量鞍时,在數(shù)學(xué)上應(yīng)當(dāng)采用矢量運(yùn)算亏拉。本文的記法并不嚴(yán)格符合數(shù)學(xué)規(guī)則,僅說(shuō)理用逆巍。
2.3.2?梯度下降
????和對(duì)導(dǎo)數(shù)表爛熟于心的我們不同及塘,計(jì)算機(jī)對(duì),則這類(lèi)符號(hào)計(jì)算并不十分擅長(zhǎng)锐极。相反笙僚,計(jì)算機(jī)相比人腦在計(jì)算方面的最大優(yōu)勢(shì)在于數(shù)值計(jì)算,也就是說(shuō)灵再,在求導(dǎo)問(wèn)題上肋层,計(jì)算機(jī)更喜歡求函數(shù)在某一個(gè)點(diǎn)的導(dǎo)數(shù)值,而不是求導(dǎo)函數(shù)表達(dá)式翎迁。我們?cè)谇拔奶岬降囊粋€(gè)簡(jiǎn)單的求導(dǎo)(當(dāng)讓如果函數(shù)復(fù)雜來(lái)求顯式解析解可能也不那么簡(jiǎn)單)取0的步驟栋猖,在計(jì)算機(jī)中需要像微分的定義一樣一步步求一個(gè)精度閾值內(nèi)的近似解(閱讀參考)。
????在我們參數(shù)估計(jì)問(wèn)題中汪榔,計(jì)算機(jī)不能一步找到這個(gè)最優(yōu)的蒲拉,那么,有沒(méi)有一種辦法,可以讓計(jì)算機(jī)更快地找到雌团,更迅速地下降到的最低點(diǎn)呢燃领?
????如果我們對(duì)多元函數(shù)微分學(xué)還有那么一點(diǎn)殘存的記憶,那么我們可以知道锦援,函數(shù)的方向?qū)?shù)在梯度方向上取得最大猛蔽。換言之,函數(shù)沿著梯度方向下降最快雨涛。借由這一點(diǎn)枢舶,我們給出了梯度下降(Gradient Descent)算法。
????Fig.5 是梯度下降的圖示替久。在多元函數(shù)微分學(xué)中凉泄,我們用表示函數(shù)在點(diǎn)處的梯度。梯度下降算法用遞歸表示就是——????式中表示每次下降的步長(zhǎng)蚯根。
????在個(gè)樣本的情況下距帅,我們進(jìn)行次迭代右锨,就能準(zhǔn)確快速地估計(jì)出最優(yōu)參數(shù)的值。我們發(fā)現(xiàn)此時(shí)是隨樣本逐代變化的碌秸,這就可以理解為一種簡(jiǎn)單的學(xué)習(xí)機(jī)制绍移,我們前述的步長(zhǎng)也被稱(chēng)為學(xué)習(xí)率(Learning Rate)我們重復(fù)用個(gè)樣本投入神經(jīng)網(wǎng)絡(luò)的過(guò)程,在機(jī)器學(xué)習(xí)中讥电,就是訓(xùn)練(Training)蹂窖。到這里,我認(rèn)為可以說(shuō)我們的神經(jīng)網(wǎng)絡(luò)具備了一種初級(jí)的智能要素恩敌。
????當(dāng)然瞬测,梯度下降也可能存在陷入局部最優(yōu)的問(wèn)題,所以一般在初始化梯度下降時(shí)纠炮,我們會(huì)根據(jù)經(jīng)驗(yàn)確定參數(shù)初值月趟,也可能把它們定為隨機(jī)數(shù)或者零向量,以及學(xué)習(xí)率的大小恢口。也就是說(shuō)狮斗,從什么地方開(kāi)始下降(w,b),還有每一步跨越多少(α)非常重要弧蝇。關(guān)于梯度下降,你也可以在這里找到參考。
????我們現(xiàn)在用計(jì)算圖(Fig.6)回顧一下前文所述的過(guò)程看疗。從左到右計(jì)算分類(lèi)結(jié)果的過(guò)程(邏輯斯蒂回歸)稱(chēng)為前向傳播(Forward Propagation)過(guò)程沙峻;從右到左通過(guò)求導(dǎo)(這里多元函數(shù)求偏導(dǎo)數(shù)應(yīng)當(dāng)遵循鏈?zhǔn)椒▌t)估計(jì)最優(yōu)參數(shù)的過(guò)程(梯度下降)稱(chēng)為后向傳播(Backward Propagation)過(guò)程。通過(guò)前向傳播和反向傳播两芳,我們就構(gòu)建了一個(gè)比較完整的摔寨、由單個(gè)神經(jīng)元組成的神經(jīng)網(wǎng)絡(luò)。
????讀者可以自行思考怎么把后向傳播(梯度下降)過(guò)程也用矩陣描述怖辆,然后編程實(shí)現(xiàn)是复。當(dāng)然,如果存在困難竖螃,記得善用搜索引擎和代碼托管平臺(tái)淑廊。
3?多層神經(jīng)網(wǎng)絡(luò)
????這種單層神經(jīng)網(wǎng)絡(luò)顯然只能解決線性分類(lèi)任務(wù)(Logistic回歸的特性導(dǎo)致的),不能解決現(xiàn)實(shí)的復(fù)雜問(wèn)題特咆。不過(guò)季惩,我們不妨回到我們開(kāi)始的地方,想想生物是怎么做的腻格。我們?cè)诟咧猩镏袑W(xué)過(guò)画拾,許多形態(tài)相似的細(xì)胞及細(xì)胞間質(zhì)構(gòu)成了生物組織,比如上皮組織菜职、結(jié)締組織等青抛。這些生物組織以及可以實(shí)現(xiàn)一些簡(jiǎn)單的人體機(jī)能。所以酬核,我們當(dāng)然也可以把神經(jīng)元組織起來(lái)去解決更復(fù)雜的問(wèn)題蜜另。
3.1?兩層神經(jīng)網(wǎng)絡(luò)
????我們給神經(jīng)網(wǎng)絡(luò)再加3個(gè)神經(jīng)元,這樣它就變成了有3個(gè)輸入特征愁茁,4個(gè)神經(jīng)節(jié)點(diǎn)蚕钦,1個(gè)輸出的神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)(Fig.7)。
????我們將從左到右的節(jié)點(diǎn)分為三層鹅很,第0層嘶居,用上標(biāo)表示,稱(chēng)為輸入層(Input Layer);第1層促煮,用上標(biāo)表示邮屁,稱(chēng)為隱藏層(Hidden layer);第2層菠齿,用上標(biāo)表示佑吝,稱(chēng)為輸出層(Output Layer)。在這里用表示第1層(隱藏層)的第1個(gè)神經(jīng)元進(jìn)行的運(yùn)算后的輸出绳匀,用表示輸出層神經(jīng)元的運(yùn)算后的輸出芋忿。
????現(xiàn)在網(wǎng)絡(luò)中的所有連接(連線)都對(duì)應(yīng)著自己的權(quán)重炸客,每層都對(duì)應(yīng)一個(gè)自己的偏差(層內(nèi)的節(jié)點(diǎn)公用一個(gè)參數(shù))。我們將傳入每個(gè)神經(jīng)元的和記為一組戈钢。例如痹仙,以隱藏層第1個(gè)神經(jīng)元為例,就相當(dāng)于原來(lái)單層神經(jīng)網(wǎng)絡(luò)中的殉了,記神經(jīng)元輸入為類(lèi)似地开仰,我們的計(jì)算就成為了——????對(duì)應(yīng)有,其中
????第2層為????其中
????如果也擴(kuò)充到個(gè)樣本(每個(gè)樣本個(gè)特征)的情況薪铜,仍然用上標(biāo)表示第個(gè)樣本众弓,那么,我們用前述的矩陣表達(dá)把這些向量堆疊起來(lái)隔箍,就有——????通過(guò)類(lèi)似的方法谓娃,我們就可以逐層完成表示,也就是前向傳播過(guò)程鞍恢。相應(yīng)地傻粘,反向傳播的過(guò)程就是將求導(dǎo)的對(duì)象堆疊起來(lái),此處不再贅述帮掉。
????理論上弦悉,兩層神經(jīng)網(wǎng)絡(luò)可以無(wú)限逼近任意連續(xù)函數(shù)。作者個(gè)人并不十分喜歡這句話(huà)蟆炊,在目前的深度學(xué)習(xí)教材和專(zhuān)著中經(jīng)常能看見(jiàn)這句話(huà)稽莉,但對(duì)于其原因都未作解釋。作者在Colah的博客中找到了一個(gè)反面的驗(yàn)證涩搓。實(shí)際上就是污秆,面對(duì)復(fù)雜的非線性分類(lèi)任務(wù),兩層(帶一個(gè)隱藏層)神經(jīng)網(wǎng)絡(luò)可以分類(lèi)的很好昧甘。
????在 Fig.8 中可以看到良拼,這個(gè)兩層神經(jīng)網(wǎng)絡(luò)的決策分界是非常平滑的曲線,而且分類(lèi)的很好充边∮雇疲可是單層網(wǎng)絡(luò)只能解決線性分類(lèi)任務(wù),而兩層神經(jīng)網(wǎng)絡(luò)中的后一層也是線性分類(lèi)層浇冰,應(yīng)該只能做線性分類(lèi)任務(wù)贬媒。為什么兩個(gè)線性分類(lèi)任務(wù)結(jié)合就可以做非線性分類(lèi)任務(wù)?
????我們把輸出層的決策分界單獨(dú)拿出來(lái)看(Fig.9)肘习,輸出層的決策分界仍然是直線际乘。關(guān)鍵就是,從輸入層到隱藏層時(shí)漂佩,數(shù)據(jù)發(fā)生了空間變換脖含。也就是說(shuō)罪塔,兩層神經(jīng)網(wǎng)絡(luò)中,隱藏層對(duì)原始的數(shù)據(jù)進(jìn)行了一個(gè)空間變換器赞,使其可以被線性分類(lèi)垢袱,然后輸出層的決策分界劃出了一個(gè)線性分類(lèi)分界線,對(duì)其進(jìn)行分類(lèi)港柜。這樣就導(dǎo)出了兩層神經(jīng)網(wǎng)絡(luò)可以做非線性分類(lèi)的關(guān)鍵——隱藏層。我們知道咳榜,矩陣和向量相乘夏醉,本質(zhì)上就是對(duì)向量的坐標(biāo)空間進(jìn)行一個(gè)變換。因此涌韩,隱藏層的參數(shù)矩陣的作用就是使得數(shù)據(jù)的原始坐標(biāo)空間從線性不可分(Fig.8 的紅藍(lán)區(qū)域曲線邊界)畔柔,轉(zhuǎn)換成了線性可分(Fig.9 的紅藍(lán)區(qū)域直線邊界)。
????簡(jiǎn)而言之臣樱,隱藏層干了什么靶擦?隱藏層對(duì)向量空間進(jìn)行了空間變換,使得非線性分類(lèi)問(wèn)題在變換后的向量空間下變成了線性分類(lèi)問(wèn)題雇毫。
3.2?深度神經(jīng)網(wǎng)絡(luò)
????如果我們讓網(wǎng)絡(luò)的層數(shù)進(jìn)一步增加會(huì)怎么樣玄捕?在思路上沒(méi)有變化,還是前向傳播加后向傳播的過(guò)程棚放,還是要用矩陣來(lái)描述問(wèn)題枚粘。此時(shí),我們反而更關(guān)注網(wǎng)絡(luò)本身的問(wèn)題飘蚯。
????Fig.10 中的神經(jīng)網(wǎng)絡(luò)(神經(jīng)元)有個(gè)參數(shù)馍迄,個(gè)參數(shù),共有個(gè)參數(shù)局骤。
????Fig.11 中的神經(jīng)網(wǎng)絡(luò)(神經(jīng)元)有個(gè)參數(shù)攀圈,個(gè)參數(shù),共有個(gè)參數(shù)峦甩。
????Fig.12 中的神經(jīng)網(wǎng)絡(luò)(神經(jīng)元)有個(gè)參數(shù)赘来,個(gè)參數(shù),共有個(gè)參數(shù)穴店。注意在 Fig.12 的網(wǎng)絡(luò)中撕捍,與前面介紹的網(wǎng)絡(luò)不同,有3個(gè)輸出泣洞。
????我們討論參數(shù)有什么意義呢? Fig.13 中忧风,上下兩個(gè)網(wǎng)絡(luò),分別有個(gè)和個(gè)參數(shù)球凰,它們的參數(shù)數(shù)量是一致的狮腿,但是層數(shù)卻不同腿宰,分別為3層和5層(第0層輸入層不計(jì)入在內(nèi))。這表明缘厢,我們可以用相同量的參數(shù)吃度,但是更多的層次來(lái)構(gòu)建神經(jīng)網(wǎng)絡(luò),這反映了神經(jīng)網(wǎng)絡(luò)的表達(dá)能力贴硫。神經(jīng)網(wǎng)絡(luò)的表達(dá)能力主要由隱層的層數(shù)和隱層神經(jīng)元個(gè)數(shù)決定椿每。隱藏層的層數(shù)就可以看作是神經(jīng)網(wǎng)絡(luò)的深度(Depth),這也就是在神經(jīng)網(wǎng)絡(luò)中的機(jī)器學(xué)習(xí)稱(chēng)為“深度”學(xué)習(xí)(連接主義學(xué)派)的原因英遭。在參數(shù)數(shù)量一樣的情況下间护,更深的網(wǎng)絡(luò)往往具有比淺層的網(wǎng)絡(luò)更好的識(shí)別效率。
????當(dāng)然挖诸,我們對(duì)參數(shù)的討論還沒(méi)有結(jié)束汁尺。設(shè)計(jì)一個(gè)神經(jīng)網(wǎng)絡(luò)我們要考慮,隱藏層的數(shù)量多律,每層的神經(jīng)元數(shù)量痴突,這些量可以視為確定神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的超參數(shù)(Hyper-parameters)處理。這個(gè)問(wèn)題在卷積神經(jīng)網(wǎng)絡(luò)(Convolutionnal Neural Network, CNN)中更為明顯狼荞。
????在Logistic Regression中辽装,神經(jīng)元的非線性單元使用的激活函數(shù)是Sigmoid函數(shù),實(shí)際上粘秆,目前的神經(jīng)網(wǎng)絡(luò)更常用的激活函數(shù)還有雙曲正切函數(shù)(tanh)如迟、線性整流函數(shù)/修正線性單元(Rectified Linear Unit, ReLU)和帶泄露的修正線性單元(Leaky ReLUs)等。圖像如 Fig.14 所示攻走。具體的用法可以參考這里殷勘,此處不再說(shuō)明。
4?總??結(jié)
????生物接受到刺激昔搂,離子內(nèi)流玲销,產(chǎn)生了一個(gè)電信號(hào),這個(gè)電信號(hào)傳到神經(jīng)元胞體時(shí)摘符,胞體不知道自己對(duì)這個(gè)電信號(hào)的處理所做為何贤斜。但是當(dāng)前860億個(gè)神經(jīng)元組織起來(lái),人就產(chǎn)生了智能逛裤。這種想法未免失之偏頗瘩绒,但在作者看來(lái),人工神經(jīng)網(wǎng)絡(luò)在本質(zhì)上并不復(fù)雜带族,“線性運(yùn)算锁荔、非線性激活、梯度下降尋求最優(yōu)參數(shù)給下一次迭代使用”蝙砌,僅此而已阳堕。但是跋理,當(dāng)神經(jīng)網(wǎng)絡(luò)具備一定的規(guī)模,神經(jīng)元達(dá)到一定的數(shù)量時(shí)恬总,這些簡(jiǎn)單的單元卻形成了強(qiáng)大的計(jì)算合力前普。這樣量變引起質(zhì)變的過(guò)程,也體現(xiàn)著樸素的唯物辯證法壹堰。
????作者認(rèn)為拭卿,人工神經(jīng)網(wǎng)絡(luò)中要把握的幾個(gè)“綱”在于——
????其一,每個(gè)神經(jīng)元在干什么缀旁?前向傳播時(shí)记劈,它們進(jìn)行一次加權(quán)加偏置的線性運(yùn)算,再進(jìn)行一次非線性激活并巍;后向傳播時(shí),它們用鏈?zhǔn)椒▌t求(偏)微分去找最優(yōu)的參數(shù)换途。然后用這組參數(shù)進(jìn)行下一代(下一個(gè)樣本)的前向傳播懊渡。
????其二,隱藏層在干什么军拟?隱藏層對(duì)向量空間進(jìn)行了空間變換剃执,使得非線性分類(lèi)問(wèn)題在變換后的向量空間下變成了線性分類(lèi)問(wèn)題。
????其三懈息,一個(gè)神經(jīng)網(wǎng)絡(luò)是好是壞取決于什么肾档?取決于為解決問(wèn)題而投入大量樣本迭代訓(xùn)練出來(lái)的那些最優(yōu)參數(shù)。(這也就是為什么YOLO等模型中.weights文件十分關(guān)鍵的原因辫继。)
????數(shù)十年間怒见,人工神經(jīng)網(wǎng)絡(luò)起起落落(Fig.15),彼時(shí)的算力遠(yuǎn)不及此時(shí)姑宽。而在GPU遣耍、并行計(jì)算、分布式計(jì)算炮车、大數(shù)據(jù)量支持變得尋常的今天舵变,人工神經(jīng)網(wǎng)絡(luò)恰逢其時(shí)。不管符號(hào)主義學(xué)派和連接主義學(xué)派相愛(ài)相殺爭(zhēng)辯到幾時(shí)瘦穆,對(duì)于面向工程問(wèn)題的我們來(lái)說(shuō)纪隙,“不管白貓黑貓,抓到耗子就是好貓扛或∶嘣郏”
Acknowledgement
????在深度神經(jīng)網(wǎng)絡(luò)部分,作者參考了“計(jì)算機(jī)的潛意識(shí)”的這篇博文告喊,全文從神經(jīng)網(wǎng)絡(luò)的歷史角度詳細(xì)介紹了前向傳播網(wǎng)絡(luò)麸拄,一些思想給了作者以很大啟發(fā)派昧,在此致謝。
作者后記
????這篇文檔用了3天寫(xiě)完拢切,本來(lái)是準(zhǔn)備從DNN一直寫(xiě)到CNN蒂萎、RNN,無(wú)奈能力和時(shí)間有限淮椰,文中也有很多坑沒(méi)有填上五慈,等待下次修訂。
????寫(xiě)這篇文檔的過(guò)程主穗,也是我重新理解經(jīng)典人工神經(jīng)網(wǎng)絡(luò)模型的過(guò)程泻拦,在思辨中也補(bǔ)上了很多細(xì)節(jié)『雒剑《論語(yǔ)》說(shuō)争拐,”日知其所亡,月無(wú)忘其所能晦雨,可謂好學(xué)也已矣架曹。“距離這個(gè)境界還差得很遠(yuǎn)闹瞧,只能鞭策自己積跬步以至千里了绑雄。(2020年2月21日子夜)
修訂記錄
[1] 2020年2月21日發(fā)布.