以下對于神經(jīng)網(wǎng)絡(luò)的理解,大都來自知乎作者王小龍和YJango的回答:如何簡單形象又有趣地講解神經(jīng)網(wǎng)絡(luò)是什么?
神經(jīng)網(wǎng)絡(luò),深度學(xué)習(xí),都是機(jī)器學(xué)習(xí)的一個分支,最終目標(biāo)還是為了實(shí)現(xiàn)正確分類數(shù)據(jù)的目的。
傳統(tǒng)的機(jī)器學(xué)習(xí)方法有時需要人工的構(gòu)造數(shù)據(jù)特征,來提高訓(xùn)練算法的效率。
比如只有一個數(shù)據(jù)X只有x1和x2兩個特征時,往往會構(gòu)造出x12和x22等作為數(shù)據(jù)特征一起輸入。
神經(jīng)網(wǎng)絡(luò)往往不需要人為的構(gòu)造數(shù)據(jù)特征,因?yàn)?strong>一個神經(jīng)元就可以看做是原始數(shù)據(jù)的不同特征的組合,在神經(jīng)元數(shù)目足夠大,層數(shù)足夠多的情況下,是很容易準(zhǔn)確的進(jìn)行分類的。
兩個幫助理解神經(jīng)網(wǎng)絡(luò)的網(wǎng)站: ConvnetJS和A Neural Network Playground
以下從神經(jīng)元的作用,一層神經(jīng)元的作用,來慢慢理解神經(jīng)網(wǎng)絡(luò)。
一、神經(jīng)元
1、一個神經(jīng)元的作用
神經(jīng)元:一個神經(jīng)元,就是一個分類器。

如上公式,其中x是輸入向量,y是輸出向量,w是權(quán)重,b是偏移量,a()是激活函數(shù)。
訓(xùn)練神經(jīng)元的過程,就是學(xué)習(xí)參數(shù)w和b的過程,使得通過學(xué)習(xí)的神經(jīng)元能夠正確分類樣本點(diǎn)。
對于下圖來說,一個神經(jīng)元就可以找到最好的分開正負(fù)例的那一條線,而訓(xùn)練神經(jīng)元的過程,就是不斷調(diào)整這條線的過程。
比如下圖中希望分開紅綠兩類點(diǎn)(只有一個神經(jīng)元)。一開始是這種狀態(tài)。

再然后開始訓(xùn)練,不斷調(diào)整找到最佳分類要求的那條線

最后,達(dá)到這樣的效果

最后將其通過線性變換,使得輸出結(jié)果線性可分,即可以直接判斷正負(fù)例。如下圖所示。

2、多個神經(jīng)元的作用
可以簡單的理解為,一個神經(jīng)元的作用,就是希望找到合適的下刀的地方,能夠一刀分開兩類樣本點(diǎn)。如下圖,一刀明顯不能分開紅綠點(diǎn),那么就找相對比較好的地方下刀。

從上能夠看出,對于不能一刀分開的情況,就需要多個神經(jīng)元進(jìn)行合作,把切下來的不同的平面做交、并運(yùn)算。
最終再經(jīng)過神經(jīng)元中的激活函數(shù)的非線性變換,使得數(shù)據(jù)不再是一個平面,然后再經(jīng)過線性變化,使得輸出結(jié)果可以直接判斷正負(fù)例。
比如這種情況。

同樣是二維平面,最少需要“三刀”的組合,才能夠把綠點(diǎn)和紅點(diǎn)隔開。所以最簡單的情況,也得是一層隱藏層,三個神經(jīng)元才行。如下圖所示

但是最終找到了最好的三刀也是不夠的,如下左圖,還需要將其分類才行。而這就是神經(jīng)元的強(qiáng)大之處了。通過線性變換(W和b)與 非線性變換(激活函數(shù))交替進(jìn)行,使得數(shù)據(jù)最終能夠線性可分,右圖。

神經(jīng)元的工作過程,是先對數(shù)據(jù)進(jìn)行線性變換,再通過激活函數(shù)進(jìn)行非線性變換。但是并不能理解成,找到了最好的“三刀”組合以后,再進(jìn)行非線性變換。而是通過不斷最優(yōu)化損失函數(shù),不停地調(diào)整神經(jīng)元的參數(shù)(線性變換和非線性變換交替著進(jìn)行的)。如下圖所示,
開始調(diào)整參數(shù),訓(xùn)練神經(jīng)元,尋找最佳分割線。

訓(xùn)練過程中,對二維空間進(jìn)行著線性變換==> Wx+b。

然后進(jìn)行非線性變換==>a(Wx+b)。
這里的激活函數(shù)a()是sigmoid函數(shù)。

通過loss函數(shù)的反饋以及不斷更新調(diào)整參數(shù),重新調(diào)整著原平面的線性變換以及非線性變換,使得訓(xùn)練好的神經(jīng)元達(dá)到這樣的效果。
下圖左側(cè)表示此時已經(jīng)找到了最好的分類邊界。(可見是一個三角形,相當(dāng)于切了三刀。)右側(cè)表示左側(cè)二維平面此時經(jīng)過神經(jīng)元作用以后(先線性后非線性變換)的樣子。

最終,經(jīng)過輸出層的作用,達(dá)到線性可分的目的。

以上是對二維平面內(nèi)的最簡單的分類情況應(yīng)用神經(jīng)網(wǎng)絡(luò)做的描述,對于異或門等更加復(fù)雜的分布,需要用到更多的神經(jīng)元數(shù)以及層數(shù)。
比如螺旋式的形狀進(jìn)行劃分的時候,就需要用多個神經(jīng)元多個網(wǎng)絡(luò)了。

二、一層神經(jīng)元的作用
以下都是引用摘抄YJango的回答。
1、每一層的行為(基本變換)
每層神經(jīng)網(wǎng)絡(luò)的數(shù)學(xué)理解:用線性變換跟隨著非線性變化,將輸入空間投向另一個空間。
每層神經(jīng)網(wǎng)絡(luò)的物理理解:通過現(xiàn)有的不同物質(zhì)的組合形成新物質(zhì)。
2、每一層的作用
線性可分視角:神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)就是學(xué)習(xí)如何利用矩陣的線性變換加激活函數(shù)的非線性變換,將原始的輸入空間投向線性可分(或稀疏的空間)去分類(或回歸)。
增加節(jié)點(diǎn)數(shù):增加維度,增加線性轉(zhuǎn)換能力。增加層數(shù):增加激活函數(shù)的個數(shù),即增加非線性轉(zhuǎn)換次數(shù)。
物質(zhì)組成視角:神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)過程就是學(xué)習(xí)物質(zhì)組成方式的過程。
增加節(jié)點(diǎn)數(shù):增加同一層物質(zhì)的種類。增加層數(shù):增加更多層級,并通過判斷更抽象的概念來識別物體。
比如,圖像識別中,第二層網(wǎng)絡(luò)表示的是“紋理”,增加節(jié)點(diǎn)數(shù)就是增加“細(xì)化的紋理的種類”,比如增加了布紋,刻紋。增加層數(shù),就是增加了一個抽象的概念,比如再加一層,那么第三層網(wǎng)絡(luò)可能表示的是“光”,比如燈光,等。
三、神經(jīng)網(wǎng)絡(luò)的訓(xùn)練
1、收集數(shù)據(jù)集
2、設(shè)計(jì)網(wǎng)絡(luò)結(jié)構(gòu)
設(shè)計(jì)出合理的網(wǎng)絡(luò)結(jié)構(gòu),層數(shù),神經(jīng)元數(shù),激活函數(shù)的設(shè)計(jì)
3、數(shù)據(jù)預(yù)處理
把收集到的數(shù)據(jù),處理成可以直接輸入網(wǎng)絡(luò)中的形式。(一般就是處理成矩陣形式)。
或者處理成再需一步,就是矩陣的形式。(因?yàn)橛袝r全部數(shù)據(jù)都直接做成矩陣比較大,內(nèi)存不夠,所以不能直接處理成矩陣。于是處理成友好的數(shù)據(jù)形式,在讀取一小部分?jǐn)?shù)據(jù)的時候,可以一步就變成矩陣,從而直接輸入到網(wǎng)絡(luò)中。)
4、權(quán)重初始化
選擇初始化時,W矩陣符合的分布,b的初值。
5、訓(xùn)練網(wǎng)絡(luò)
5.1. 正向傳遞,算當(dāng)前網(wǎng)絡(luò)的預(yù)測值
將batch_size個數(shù)據(jù)(矩陣形式)直接輸入到網(wǎng)絡(luò)中,得到batch_size個輸出的預(yù)測值。
5.2. 計(jì)算loss
通過計(jì)算預(yù)測值和真實(shí)值之間的關(guān)系,得到loss。
5.3. 計(jì)算梯度
5.4. 更新權(quán)重
5.5. 預(yù)測新值
比如,在batch_size設(shè)置為128的網(wǎng)絡(luò)中。
- 1 先用前面的第一批數(shù)據(jù)(batch_size個數(shù)據(jù))經(jīng)過W和b的運(yùn)算,得到一個預(yù)測值X1。
- 2 loss為每個輸入數(shù)據(jù)的預(yù)測值與真實(shí)值的函數(shù) 之和或者平均值。然后用loss更新一次W和b
- 3 再用第二批數(shù)據(jù)(新的batch_size個數(shù)據(jù))與W和b運(yùn)算,得到一個新的預(yù)測值X2。
- 4 利用X2再得到新的loss,再更新得到新的W和b。然后再用第三批數(shù)據(jù) 。。。如此直到整個數(shù)據(jù)集遍歷完,算是循環(huán)了一次。