近幾年興起的深度學(xué)習(xí)技術(shù)本質(zhì)上也是一種機(jī)器學(xué)習(xí)方法卸留,簡(jiǎn)單來(lái)說(shuō)就是一系列可以訓(xùn)練多層神經(jīng)網(wǎng)絡(luò)(multilayered neural network)的算法。人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Network, ANN)早在上世紀(jì)四五十年代就已經(jīng)出現(xiàn)了,隨著理論和計(jì)算能力的不斷提高乖杠,ANN在席卷全球的人工智能和深度學(xué)習(xí)的浪潮下重新煥發(fā)青春匣缘。今天我們就來(lái)學(xué)習(xí)ANN的基礎(chǔ)知識(shí),為日后訓(xùn)練多層神經(jīng)網(wǎng)絡(luò)做準(zhǔn)備稀火。
生物神經(jīng)元(Biological Neuron)
人工神經(jīng)網(wǎng)絡(luò)實(shí)際上是對(duì)人類大腦中的神經(jīng)網(wǎng)絡(luò)的一種抽象暖哨。我們的大腦由無(wú)數(shù)個(gè)神經(jīng)細(xì)胞構(gòu)成。每個(gè)神經(jīng)細(xì)胞主要可以分為3個(gè)部分:樹(shù)突(dendrite)凰狞,細(xì)胞體(soma)和軸突(axon)篇裁。
樹(shù)突的作用是從外界環(huán)境或者其他神經(jīng)細(xì)胞接收刺激,細(xì)胞體負(fù)責(zé)處理從樹(shù)突接受到的信息并將信息通過(guò)軸突傳遞給其他神經(jīng)細(xì)胞赡若。神經(jīng)細(xì)胞之間通過(guò)突觸(synapse)聯(lián)系起來(lái)达布。
人工神經(jīng)元(Artificial Neuron)
人腦中的信息處理單元是神經(jīng)細(xì)胞,而人工神經(jīng)網(wǎng)絡(luò)的計(jì)算單元就是人工神經(jīng)元斩熊。
一個(gè)人工神經(jīng)元由7個(gè)基本單元組成:
- 來(lái)自其他神經(jīng)元的輸入信號(hào)(x1, x2, ..., xn)
- 每一個(gè)輸入信號(hào)都有一個(gè)與之對(duì)應(yīng)的突觸權(quán)重(w1, w2, ..., wn)往枣,權(quán)重(weight)的高低反映了輸入信號(hào)對(duì)神經(jīng)元的重要性
- 線性聚合器(∑)將經(jīng)過(guò)加權(quán)的輸入信號(hào)相加,生成一個(gè)"激活電壓"(activation voltage)
- 激活閾值(activation threshold)或bias(θ)給神經(jīng)元的輸出設(shè)置一個(gè)閾值
- 激活電位(activation potential,u)是線性聚合器和激活閾值之差分冈,如果u≥0圾另,神經(jīng)元產(chǎn)生的就是興奮信號(hào),如果u<0雕沉,神經(jīng)元產(chǎn)生的是抑制信號(hào)
- 激活函數(shù)(activation function集乔,g)將神經(jīng)元的輸出限制在一個(gè)合理的范圍內(nèi)
-
神經(jīng)元產(chǎn)生的輸出信號(hào)(y),可以傳遞給與之相連的其他神經(jīng)元
用公式表示:
綜上所述坡椒,人工神經(jīng)元的計(jì)算可以分成如下幾個(gè)步驟:
- 將神經(jīng)元的每一個(gè)輸入和與之對(duì)應(yīng)的突觸權(quán)重相乘
- 對(duì)加權(quán)后的輸入求和扰路,然后減去激活閾值
- 使用合適的激活函數(shù)來(lái)將神經(jīng)元的輸出限制在一定范圍內(nèi)
- 將神經(jīng)元的輸出傳遞給與之相連的神經(jīng)元
我們可以把多個(gè)神經(jīng)元鏈接在一起構(gòu)成一個(gè)人工神經(jīng)網(wǎng)絡(luò),比如下面這個(gè)由4個(gè)input neuron倔叼,3個(gè)hidden neuron和1個(gè)output neuron組成的簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò):
神經(jīng)網(wǎng)絡(luò)中的神經(jīng)元不是雜亂無(wú)章地組合在一起汗唱,通常情況下,神經(jīng)元會(huì)按層(layer)排列丈攒。在上面的網(wǎng)絡(luò)中哩罪,input處于第一層,N1和N2是第二層巡验,N3是第三層际插,最后一層是output。我們所說(shuō)的“深度”显设,實(shí)際上就是神經(jīng)網(wǎng)絡(luò)的層數(shù)框弛。層數(shù)越多,神經(jīng)網(wǎng)絡(luò)越深也越復(fù)雜捕捂。我們通常把input和output之間的層叫做hidden layer瑟枫。
下面再來(lái)看一個(gè)稍微復(fù)雜點(diǎn)的網(wǎng)絡(luò):
從這個(gè)例子中我們可以看到以下幾點(diǎn):
- 每一層中的neuron和它上一層中的所有neuron都有連接。例如hidden layer中的N1和N2和input layer中的4個(gè)input neuron都有連接绞蹦。我們稱這樣的網(wǎng)絡(luò)為全連接神經(jīng)網(wǎng)絡(luò)(fully connected neural network)
- 同一層中的neuron之間沒(méi)有連接
- 連接是有方向的力奋,從input到output,網(wǎng)絡(luò)中沒(méi)有環(huán)幽七。我們稱這樣的網(wǎng)絡(luò)為前饋神經(jīng)網(wǎng)絡(luò)(feedforward neural network)景殷。有環(huán)的神經(jīng)網(wǎng)絡(luò)也稱為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN,Recurrent Neural Networks)
人工神經(jīng)元通吃杪牛可以分為以下幾類:
- 輸入(input)和輸出(output)神經(jīng)元
輸入神經(jīng)元從程序中獲取數(shù)據(jù)猿挚,輸出神經(jīng)元將神經(jīng)網(wǎng)絡(luò)的計(jì)算結(jié)果返回給程序。程序通常會(huì)將一個(gè)array作為input傳遞給神經(jīng)網(wǎng)絡(luò)驶鹉,array中元素的個(gè)數(shù)和輸入層中的神經(jīng)元數(shù)目一致绩蜻。程序獲得的output也是一個(gè)array,array中元素的個(gè)數(shù)和輸出層中神經(jīng)元的數(shù)目一致室埋。輸入神經(jīng)元沒(méi)有激活函數(shù)办绝。 - 隱藏(hidden)神經(jīng)元
input和output神經(jīng)元負(fù)責(zé)對(duì)外聯(lián)系伊约,位于它們中間的神經(jīng)元只能從網(wǎng)絡(luò)中的其他neuron獲取輸入并輸出給其他neuron。由于它們“與世隔絕”孕蝉,因此稱為隱藏神經(jīng)元屡律。 -
偏置(bias)神經(jīng)元
Bias神經(jīng)元可以位于輸入層和隱藏層,但是它不從上一層的neuron中獲取input降淮,bias神經(jīng)元的輸出值通常設(shè)置為1超埋。
-
Context 神經(jīng)元
Context 神經(jīng)元常用在循環(huán)神經(jīng)網(wǎng)絡(luò)中,用來(lái)處理時(shí)間序列(Time Series)問(wèn)題佳鳖。
激活函數(shù)(Activation Functions)
激活函數(shù)的作用是給神經(jīng)元的輸出建立一個(gè)邊界霍殴。一個(gè)神經(jīng)網(wǎng)絡(luò)可以有多個(gè)不同的激活函數(shù),選擇合適的激活函數(shù)對(duì)構(gòu)建神經(jīng)網(wǎng)絡(luò)是非常重要的系吩。下面列舉幾個(gè)常用的激活函數(shù)来庭。
線性激活函數(shù)(Linear Activation Function)
最簡(jiǎn)單的激活函數(shù)就是線性函數(shù),即神經(jīng)元的輸入和輸出相等淑玫。
當(dāng)神經(jīng)網(wǎng)絡(luò)的輸出是數(shù)值(比如回歸問(wèn)題)的時(shí)候巾腕,它的輸出層通常使用的是線性激活函數(shù)。
Softmax 激活函數(shù)(Softmax Activation Function)
Softmax 激活函數(shù)通常用在處理分類問(wèn)題(classification)的神經(jīng)網(wǎng)絡(luò)的輸出層絮蒿。Softmax的作用是讓神經(jīng)網(wǎng)絡(luò)輸出每個(gè)類別(class)的概率,而不僅僅是一個(gè)簡(jiǎn)單的數(shù)值叁鉴。由于是概率值土涝,它們的和一定是100%
Softmax函數(shù)的公式:
i表示的是輸出神經(jīng)元的index,j表示的是屬于某個(gè)group/class的輸出神經(jīng)元的index幌墓。z表示的是輸出神經(jīng)元輸出的array但壮。Softmax與其他激活函數(shù)不同的地方在于它的輸出依賴于其他神經(jīng)元的輸出(z)。
比如常侣,我們的神經(jīng)網(wǎng)絡(luò)處理的分類問(wèn)題包含了3個(gè)類別(A蜡饵,B,C)胳施,它的3個(gè)輸出神經(jīng)元分別對(duì)應(yīng)這3個(gè)類別溯祸,它的輸出是一個(gè)包含了3個(gè)元素的array:[0.9, 0.2, 0.4],由于第一個(gè)數(shù)字最大舞肆,我們認(rèn)為分類結(jié)果應(yīng)該是A焦辅。如果我們使用softmax函數(shù)就可以把它們轉(zhuǎn)換成概率值:
sum = exp(0.9) + exp(0.2) + exp(0.4) = 5.17283056695839
j0 = exp(0.9) / sum = 0.47548495534876745
j1 = exp(0.2) / sum = 0.2361188410001125
j2 = exp(0.4) / sum = 0.28839620365112
Step激活函數(shù)(Step Activation Function)
Step函數(shù)也被稱為閾值(threshold)函數(shù),它的輸出值只有0或1椿胯。當(dāng)輸入值大于某個(gè)閾值(比如0.5)的時(shí)候筷登,輸出值為1,小于閾值的時(shí)候就輸出0哩盲。
Sigmoid激活函數(shù)
Sigmoid激活函數(shù)也稱為logistic激活函數(shù)前方,它的輸出值是0到1之間的數(shù)狈醉。
Hyperbolic Tangent 激活函數(shù)
Hyperbolic Tangent 激活函數(shù)就是tanh函數(shù),它的輸出值是-1到1之間的數(shù)惠险。
Rectified linear unit (ReLU) 激活函數(shù)
ReLU 函數(shù)是目前在神經(jīng)網(wǎng)絡(luò)的隱藏層中使用比較多的激活函數(shù)(要優(yōu)于sigmoid和tanh函數(shù)苗傅,具體原因會(huì)在后續(xù)文章中討論),它的公式十分簡(jiǎn)單:
可以看到當(dāng)x小于0時(shí)莺匠,ReLU函數(shù)輸出的值為0金吗,當(dāng)x大于0時(shí),ReLU函數(shù)的輸出為x本身趣竣。
參考文獻(xiàn)
- Ivan Nunes da Silva et al. Artificial Neural Networks, 2017
- Jeff Heaton. AIFH, Volume 3: Deep Learning and Neural Networks, 2015