最近開始看一些深度學(xué)習(xí)的資料,想學(xué)習(xí)一下深度學(xué)習(xí)的基礎(chǔ)知識。找到了一個比較好的tutorial,Neural Networks and Deep Learning,認(rèn)真看完了之后覺得收獲還是很多的。從最基本的感知機(jī)開始講起,到后來使用logistic函數(shù)作為激活函數(shù)的sigmoid neuron,和很多其他現(xiàn)在深度學(xué)習(xí)中常使用的trick。把深度學(xué)習(xí)的一個發(fā)展過程講得很清楚,而且還有很多源碼和實驗幫助理解??赐炅苏麄€tutorial后打算再重新梳理一遍,來寫點總結(jié),以后再看其他資料了可以來更新,查漏補(bǔ)缺,溫故而知新。
- 感知機(jī)
- Sigmoid神經(jīng)元
- 神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)
- 用梯度下降法來學(xué)習(xí)
- 參考
感知機(jī)-Perceptron
在講神經(jīng)網(wǎng)絡(luò)之前,不得不提感知機(jī)。感知機(jī)在1950s和1960s由Frank Rosenblatt提出,是一種人為設(shè)計的neuron, 不過現(xiàn)在在神經(jīng)網(wǎng)絡(luò)中通常使用sigmoid neuron,但還是有必要了解一下感知機(jī)。
在上面這個例子中是一個感知機(jī)神經(jīng)元,有三個輸入
x1,x2,x3,一個輸出,
output,另外對于每一輸入還有一個對應(yīng)的權(quán)重系數(shù),
w1,w2,w3,神經(jīng)元的輸出只有兩個狀態(tài),0或者1,公式化地描述為如下:
f(x)={01if∑jwjxj≤thresholdif∑jwjxj>threshold
有上面的公式可以很容易地看出來感知機(jī)是怎么工作的。
但是可以看出,感知機(jī)的輸出只有 0 和 1,導(dǎo)致了感知機(jī)有一定的局限性,這讓感知機(jī)看起來就只是簡單的邏輯門,而且還不能通過感知機(jī)構(gòu)造出異或門。關(guān)于感知機(jī)更多內(nèi)容請看維基百科。所以就提出來一個新的neuron,可以讓它的輸出從0到1連續(xù)變化。
Sigmoid神經(jīng)元-Sigmoid neurons
如上所示為一個神經(jīng)網(wǎng)絡(luò),如果權(quán)重的微小變化能夠讓輸出也相應(yīng)有一個比較小的變化,那么就可以讓這個神經(jīng)網(wǎng)絡(luò)做一個稍微復(fù)雜一點的工作了。而之前的感知機(jī)的輸出是二值的,只有在閾值附近,輸入的變化才可能導(dǎo)致神經(jīng)元的輸出變化,而且還是突變,這樣一個神經(jīng)網(wǎng)絡(luò)就是有點數(shù)字化了的感覺,本科學(xué)的數(shù)字電路就是這樣子的。所以就有人提出一個新的神經(jīng)元,sigmoid neuron,該神經(jīng)元使用
Sigmoid_function作為激活函數(shù)。sigmoid函數(shù)也叫l(wèi)ogistic函數(shù),在機(jī)器學(xué)習(xí)中很常見,該函數(shù)表達(dá)式為
σ(z)=11+e?x,,該函數(shù)曲線如下:
可以看到sigmoid函數(shù)的輸出是從 0 到 1 連續(xù)變化的,在 0 處函數(shù)值為0.5。
令x為神經(jīng)元的輸入
∑jwjxj ,合起來就是
σ(z)=11+e?∑jwjxj+b
另外,改變
w,b的值,是可以改變曲線的形狀的,具體說來,
w越大,曲線在0處變化越陡,可以想象到當(dāng)
w足夠大時,sigmoid的輸出也就只有0 和 1了,就和前面的感知機(jī)一樣了。
神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)-The architecture of neural networks
神經(jīng)網(wǎng)絡(luò)通常由輸入層、隱藏層和輸出層組成,輸入輸出都是只有一層,但隱藏層可以有多層,深度學(xué)習(xí)中就是通過增加隱藏層的層數(shù)來完成一些比較復(fù)雜的功能。如下為一個神經(jīng)網(wǎng)絡(luò):
通常情況下,神經(jīng)網(wǎng)絡(luò)的每兩個相鄰層之間的神經(jīng)元都是兩兩相連接的。
用梯度下降法來學(xué)習(xí)-Learning with gradient descent
建立一個如上所示神經(jīng)網(wǎng)絡(luò)之后,需要通過訓(xùn)練來學(xué)習(xí)權(quán)重w,b,最常用的學(xué)習(xí)方法就是梯度下降法。梯度下降是很常用的優(yōu)化目標(biāo)函數(shù)的方法。給定訓(xùn)練數(shù)據(jù),對于給定的輸入,可以通過神經(jīng)網(wǎng)絡(luò)預(yù)測出一個輸出,預(yù)測的輸出如果和真實值不一致,那么就可以通過改變神經(jīng)網(wǎng)絡(luò)的系數(shù)權(quán)重來使系數(shù)往正確的方向變化,不斷地學(xué)習(xí)最后就能達(dá)到一個比較好的結(jié)果。
首先要先定義一個代價函數(shù),當(dāng)預(yù)測的輸出和預(yù)期的輸出不一致時,就懲罰該函數(shù):
C(w,b)=12n∑x||y(x)?a||2
這里a是訓(xùn)練數(shù)據(jù)中的輸出,是預(yù)期值,y(x)是對給定輸入x的預(yù)測值,如果兩者不一致,那么就讓兩者相減取平方作為懲罰值。神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過程即使通過調(diào)整權(quán)重w,b使得該懲罰值最小,這時可以認(rèn)為對神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)得比較好了。
參考
http://neuralnetworksanddeeplearning.com/chap1.html