0
本文為 AI 研習社編譯的技術(shù)博客,原標題 :
Shallow Neural Networks
作者 | Rochak Agrawal
翻譯 | hxyzzz0 編輯 | 鄧普斯?杰弗、王立魚
原文鏈接:
https://towardsdatascience.com/shallow-neural-networks-23594aa97a5
每當我們聽到神經(jīng)網(wǎng)絡(luò)的大名時,就會認為它里面有許許多多的隱藏層,但其實還有一種只有少量隱藏層的神經(jīng)網(wǎng)絡(luò),淺神經(jīng)網(wǎng)絡(luò)只包含一到兩層隱藏層。對淺神經(jīng)網(wǎng)絡(luò)的研究可以加強我們對深度神經(jīng)網(wǎng)絡(luò)內(nèi)部運行機制的理解。本文將介紹什么是淺神經(jīng)網(wǎng)絡(luò)以及它的數(shù)學原理。下圖所示是一個只包含一個隱藏層、一個輸入層和一個輸出層的淺神經(jīng)網(wǎng)絡(luò)。
隱藏層由許多神經(jīng)元組成,每一個都會執(zhí)行上述兩步運算。在上圖的淺層神經(jīng)網(wǎng)絡(luò)中,隱藏層的四個神經(jīng)元進行如下計算:
在上面的方程中:
下標i表示第i層,下標j表示該層的第j個神經(jīng)元。
X是包含3個特征的輸入向量。
W[i]j是第i層第j個神經(jīng)元的權(quán)值。
b[i]j 是第i層第j個神經(jīng)元的偏置。
Z[i]j 是第i層第j個神經(jīng)元的中間輸出。
A[i]j 第i層第j個神經(jīng)元的最終輸出。
Sigma 是sigmoid激活函數(shù)。它的數(shù)學定義是:
顯而易見,上述四個方程比較冗長,因此我們把它們進行向量化:
第一個方程用一個矩陣乘法計算所有的中間輸出Z。
第二個方程用一個矩陣運算計算所有的激活函數(shù)輸出A。
第一個方程計算第一個隱藏層的中間輸出Z[1]。
第二個方程計算第一個隱藏層的最終輸出A[1]。
第三個方程計算輸出層的中間輸出Z[2]。
第四個方程計算輸出層的最終輸出A[2],也就是整個神經(jīng)網(wǎng)絡(luò)的最終輸出。
我們知道,一個神經(jīng)網(wǎng)絡(luò)根本上來說就是一組數(shù)學方程和權(quán)重的集合。為了提高神經(jīng)網(wǎng)絡(luò)的魯棒性,從而在各種不同的場景下都能得到很好的效果,我們使用了激活函數(shù)。這些激活函數(shù)為神經(jīng)網(wǎng)絡(luò)引入了非線性特性。接下來在淺層神經(jīng)網(wǎng)絡(luò)的基礎(chǔ)上理解激活函數(shù)的重要性。
如果沒有激活函數(shù),我們的淺層神經(jīng)網(wǎng)絡(luò)可以被表示成:
將方程一中的Z[1]代入方程2得到如下方程:
顯而易見,輸出將是一個新權(quán)重矩陣W、輸入X和新偏置矩陣b線性組合,意味著隱藏層中的神經(jīng)元及其權(quán)重都失去了意義。因此,我們需要用激活函數(shù)為網(wǎng)絡(luò)引入非線性特性。
激活函數(shù)有許多種,包括Sigmoid、Tanh、ReLU等等,并且可以在每層使用不同的激活函數(shù)。你可以在下面這篇文章中得到關(guān)于激活函數(shù)的更多信息。
(https://towardsdatascience.com/activation-functions-neural-networks-1cbd9f8d91d6)
神經(jīng)網(wǎng)絡(luò)的權(quán)重矩陣通常是隨機初始化的。那么為什么不能將它初始化為0或者其它什么值呢?接下來通過我們的淺層神經(jīng)網(wǎng)絡(luò)來理解這個問題。
讓我們用0或者其它值來初始化第一層的權(quán)重矩陣W1,和第二層的權(quán)重矩陣W2。現(xiàn)在,如果權(quán)重矩陣保持不變,那么隱藏層中神經(jīng)元的激活函數(shù)也相同,激活函數(shù)的導數(shù)也相同。因此,該隱藏層中的各個神經(jīng)元的權(quán)值將被修改為類似的值,從而某一隱藏層無需再包含多于一個神經(jīng)元。然而這并非我們想要的。相反,我們希望隱藏層中的每一個神經(jīng)元都獨一無二,擁有不同的權(quán)重并且作為一個獨立的方程來運算。因此,我們需要隨機初始化權(quán)值。
最好的初始化方法是Xavier初始化。它的數(shù)學定義是:
方程表明,第l層的權(quán)重矩陣W的值由正態(tài)分布生成,其中均值μ= 0、方差sigma2 是第l-1層神經(jīng)元數(shù)量的倒數(shù)。所有層的偏置b均初始化為0.
神經(jīng)網(wǎng)絡(luò)的權(quán)重是隨機初始化的。為了用神經(jīng)網(wǎng)絡(luò)進行正確預測,我們需要更新這些權(quán)值,用于更新權(quán)值的方法稱之為梯度下降。以下通過計算圖來進行理解。
上圖中,前向傳播(黑線所示)用于根據(jù)給定輸入X計算輸出。反向傳播(紅線所示)對計算圖中每一步的輸入計算其導數(shù),從而更新權(quán)重矩陣W[1]、W[2]和偏置b[1]、b[2]。損失函數(shù)L定義如下:
根據(jù)上式所示損失函數(shù)L,隱藏層和輸出層采用sigmoid激活函數(shù),利用導數(shù)的鏈式法則可以計算出:
上面的方程可能看起來有點迷惑,但是它們在梯度下降中應用非常好。在計算dZ[1]的方程中,*表示點積,σ’ 表示sigma的導數(shù)。
“我強烈建議懂微積分的讀者親自計算一下上述方程,從而對于梯度下降的運行方式有一個更好的理解?!?/em>
在本文中,我們學習了淺層神經(jīng)網(wǎng)絡(luò)的數(shù)學原理。盡管我已經(jīng)盡可能詳細的解釋了其中的所有內(nèi)容,如果你感覺欠缺某些知識,請查看我之前的帖子,或者在下面的評論區(qū)中提問。雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
Coursera?—?Deep Learning Course 1
DeepLearning Notes?—?Initialization
想要繼續(xù)查看該篇文章相關(guān)鏈接和參考文獻?
點擊【淺層神經(jīng)網(wǎng)絡(luò)】即可訪問:
Github項目推薦:推薦系統(tǒng)數(shù)據(jù)集匯總
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。