動機:為了更好的理解深度學習,作者決定從零開始建立一個神經(jīng)網(wǎng)絡,而不是像TensorFlow這樣的深度學習庫。相信理解神經(jīng)網(wǎng)絡的內(nèi)部工作對于任何有抱負的數(shù)據(jù)科學家來說都是很重要的。
什么是神經(jīng)網(wǎng)絡?
大多數(shù)介紹神經(jīng)網(wǎng)絡的文章在描述它們時會涉及到大腦類比,在不深入研究大腦類比的情況下,將神經(jīng)網(wǎng)絡簡單描述為將固定數(shù)值映射到期望輸出的數(shù)學函數(shù)理解起來更容易。
神經(jīng)網(wǎng)絡由以下部分組成:
輸入層,x
任意數(shù)量的隱藏層
輸出層,?
每層W和B之間的一組權(quán)重和偏差
為每個隱藏層選擇激活函數(shù)σ。在本教程中,我們將使用Sigmoid激活函數(shù)。
下圖顯示了2層神經(jīng)網(wǎng)絡的體系結(jié)構(gòu)(請注意,在計算神經(jīng)網(wǎng)絡中的層數(shù)時通常會排除輸入層)
2層神經(jīng)網(wǎng)絡的體系結(jié)構(gòu)
用Python創(chuàng)建一個神經(jīng)網(wǎng)絡類很容易。
神經(jīng)網(wǎng)絡訓練
簡單的2層神經(jīng)網(wǎng)絡的輸出是:
您可能會注意到,在上面的等式中,權(quán)重W和偏差b是影響?的唯一變量。
當然,權(quán)重和偏差的正確度決定了預測的準確性。從輸入數(shù)據(jù)中微調(diào)權(quán)重和偏差的過程稱為神經(jīng)網(wǎng)絡訓練。
訓練過程的每次迭代包含以下步驟:
計算預測輸出?,稱為前饋
更新權(quán)重和偏差,稱為反向傳播
下圖為過程順序圖。
前饋
正如我們在上面的順序圖中看到的,前饋只是一個簡單的演算,對于基本的2層神經(jīng)網(wǎng)絡,神經(jīng)網(wǎng)絡的輸出是:
可以在python代碼中添加一個前饋函數(shù)來做到這一點。簡單起見,使假設偏差為0。
然而,仍然需要一種方法來評估我們預測達到什么程度,損失函數(shù)可以做到這一點。
損失函數(shù)
損失函數(shù)有很多種,問題的性質(zhì)決定該選擇哪種損失函數(shù)。在本教程中,作者將使用一個簡單的sqaures偏差作為損失函數(shù)。
也就是說,平方和誤差僅僅是每個預測值和實際值之差的平均值。因為差值被平方,所以要測量差值的絕對值。
作者的訓練目標是找到最佳的權(quán)重和偏差集合,以最大限度地減少損失函數(shù)。
反向傳播
現(xiàn)在作者已經(jīng)測量了預測誤差,需要找到一種方法來傳播誤差,并更新權(quán)重和偏差。
為了適當?shù)恼{(diào)整權(quán)重和偏差,需要知道損失函數(shù)關(guān)于權(quán)重和偏差的導數(shù)。
可以從演算中得知,函數(shù)的導數(shù)就是函數(shù)的斜率。
梯度下降算法
如果有導數(shù),可以簡單地通過增加/減少更新權(quán)重和偏差(參見上圖)。這被稱為梯度下降。
然而,我們不能直接計算損失函數(shù)的權(quán)重和偏差,因為損失函數(shù)的方程不包含權(quán)重和偏差。因此,我們需要鏈式規(guī)則來計算它。
鏈式規(guī)則用于計算損失函數(shù)相對于權(quán)重的導數(shù)。簡單起見,只顯示了假設1層神經(jīng)網(wǎng)絡的偏導數(shù)
得到相對于權(quán)重的損失函數(shù)的導數(shù)(斜率),以便適當調(diào)整權(quán)重。
現(xiàn)在,將反向傳播函數(shù)添加到Python代碼中。
為了深入理解演算的應用和反向傳播中的鏈式規(guī)則,作者強烈推薦3Blue1Brown撰寫教程。
結(jié)合在一起
現(xiàn)在已經(jīng)有了完整的python代碼來做前饋和反向傳播,將神經(jīng)網(wǎng)絡應用于一個例子上,來看看它的完成度。
神經(jīng)網(wǎng)絡應該學習理想的權(quán)重集合來表示這個函數(shù)。注意,通過檢查來計算權(quán)重并不是不重要的。
來看看訓練神經(jīng)網(wǎng)絡進行1500次迭代后會發(fā)生什么。查看下面每個迭代圖的損失,可以清楚地看到損耗單調(diào)遞減到最小。這與之前的梯度下降算法一致。
1500次迭代后神經(jīng)網(wǎng)絡的最終預測(輸出)。
從上圖可以看出前饋和后向傳播算法成功地訓練了神經(jīng)網(wǎng)絡,并且預測與實際值相差不大。
請注意,預測和實際值之間可以存在細微的差異。因為它可以防止過擬合,使神經(jīng)網(wǎng)絡更好地歸納看不見的數(shù)據(jù)。
下一步是什么?
幸運的是,關(guān)于神經(jīng)網(wǎng)絡和深度學習還有很多需要了解的內(nèi)容。例如:
除了Sigmoid函數(shù),還可以使用哪些激活函數(shù)?
訓練神經(jīng)網(wǎng)絡時的學習率
利用卷積進行圖像分類任務
最后的想法
作者從頭開始學習了神經(jīng)網(wǎng)絡。
盡管TensorFlow和Keras等深度學習庫可以在不完全了解神經(jīng)網(wǎng)絡的內(nèi)部工作的情況下輕松構(gòu)建深度網(wǎng)絡,但有抱負的數(shù)據(jù)科學家可以更深入地了解神經(jīng)網(wǎng)絡。
-
神經(jīng)網(wǎng)絡
+關(guān)注
關(guān)注
42文章
4819瀏覽量
106087 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4400瀏覽量
66385 -
python
+關(guān)注
關(guān)注
56文章
4848瀏覽量
88985
發(fā)布評論請先 登錄
液態(tài)神經(jīng)網(wǎng)絡(LNN):時間連續(xù)性與動態(tài)適應性的神經(jīng)網(wǎng)絡

低功耗+AI識別:基于樹莓派的 LoRa 神經(jīng)網(wǎng)絡安防系統(tǒng)!

BP神經(jīng)網(wǎng)絡與卷積神經(jīng)網(wǎng)絡的比較
BP神經(jīng)網(wǎng)絡的優(yōu)缺點分析
什么是BP神經(jīng)網(wǎng)絡的反向傳播算法
BP神經(jīng)網(wǎng)絡與深度學習的關(guān)系
BP神經(jīng)網(wǎng)絡的基本原理
深度學習入門:簡單神經(jīng)網(wǎng)絡的構(gòu)建與實現(xiàn)
人工神經(jīng)網(wǎng)絡的原理和多種神經(jīng)網(wǎng)絡架構(gòu)方法

一文詳解物理信息神經(jīng)網(wǎng)絡

評論