深度學習初學者一定不能錯過,從零開始建立神經網路
http://blog.itpub.net/31509949/viewspace-2154575/
什麼是神經網路?
大多數介紹神經網路的文章在描述它們時會涉及到大腦類比,在不深入研究大腦類比的情況下,將神經網路簡單描述為將固定數值對映到期望輸出的數學函式理解起來更容易。
神經網路由以下部分組成:
-
輸入層,x
-
任意數量的隱藏層
-
輸出層,?
-
每層W和B之間的一組權重和偏差
為每個隱藏層選擇啟用函式σ。在本教程中,我們將使用Sigmoid啟用函式。
下圖顯示了2層神經網路的體系結構(請注意,在計算神經網路中的層數時通常會排除輸入層)
用Python建立一個神經網路類很容易。
神經網路訓練
簡單的2層神經網路的輸出是:
您可能會注意到,在上面的等式中,權重W和偏差b是影響?的唯一變數。
當然,權重和偏差的正確度決定了預測的準確性。從輸入資料中微調權重和偏差的過程稱為神經網路訓練。
訓練過程的每次迭代包含以下步驟:
計算預測輸出?,稱為前饋
更新權重和偏差,稱為反向傳播
下圖為過程順序圖。
前饋
正如我們在上面的順序圖中看到的,前饋只是一個簡單的演算,對於基本的2層神經網路,神經網路的輸出是:
可以在python程式碼中新增一個前饋函式來做到這一點。簡單起見,使假設偏差為0。
然而,仍然需要一種方法來評估我們預測達到什麼程度,損失函式可以做到這一點。
損失函式
損失函式有很多種,問題的性質決定該選擇哪種損失函式。在本教程中,作者將使用一個簡單的sqaures偏差作為損失函式。
也就是說,平方和誤差僅僅是每個預測值和實際值之差的平均值。因為差值被平方,所以要測量差值的絕對值。
作者的訓練目標是找到最佳的權重和偏差集合,以最大限度地減少損失函式。
反向傳播
現在作者已經測量了預測誤差,需要找到一種方法來傳播誤差,並更新權重和偏差。
為了適當的調整權重和偏差,需要知道損失函式關於權重和偏差的導數。
可以從演算中得知,函式的導數就是函式的斜率。
梯度下降演算法
如果有導數,可以簡單地透過增加/減少更新權重和偏差(參見上圖)。這被稱為梯度下降。
然而,我們不能直接計算損失函式的權重和偏差,因為損失函式的方程不包含權重和偏差。因此,我們需要鏈式規則來計算它。
鏈式規則用於計算損失函式相對於權重的導數。簡單起見,只顯示了假設1層神經網路的偏導數
得到相對於權重的損失函式的導數(斜率),以便適當調整權重。
現在,將反向傳播函式新增到Python程式碼中。
為了深入理解演算的應用和反向傳播中的鏈式規則,作者強烈推薦3Blue1Brown撰寫教程。
結合在一起
現在已經有了完整的python程式碼來做前饋和反向傳播,將神經網路應用於一個例子上,來看看它的完成度。
神經網路應該學習理想的權重集合來表示這個函式。注意,透過檢查來計算權重並不是不重要的。
來看看訓練神經網路進行1500次迭代後會發生什麼。檢視下面每個迭代圖的損失,可以清楚地看到損耗單調遞減到最小。這與之前的梯度下降演算法一致。
1500次迭代後神經網路的最終預測(輸出)。
從上圖可以看出前饋和後向傳播演算法成功地訓練了神經網路,並且預測與實際值相差不大。
請注意,預測和實際值之間可以存在細微的差異。因為它可以防止過擬合,使神經網路更好地歸納看不見的資料。
下一步是什麼?
幸運的是,關於神經網路和深度學習還有很多需要了解的內容。例如:
除了Sigmoid函式,還可以使用哪些啟用函式?
訓練神經網路時的學習率
利用卷積進行影像分類任務
最後的想法
作者從頭開始學習了神經網路。
儘管TensorFlow和Keras等深度學習庫可以在不完全瞭解神經網路的內部工作的情況下輕鬆構建深度網路,但有抱負的資料科學家可以更深入地瞭解神經網路。
這次練習對作者來說收穫巨大,希望它對您也有用!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29829936/viewspace-2168557/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 從零開始:教你如何訓練神經網路神經網路
- 從零開始構建並編寫神經網路【學習筆記】[2/2]神經網路筆記
- 神經網路和深度學習神經網路深度學習
- 從零開始構建並編寫神經網路---Keras【學習筆記】[1/2]神經網路Keras筆記
- 深度學習系列(2)——神經網路與深度學習深度學習神經網路
- 【深度學習】神經網路入門深度學習神經網路
- 再聊神經網路與深度學習神經網路深度學習
- 深度學習與圖神經網路深度學習神經網路
- AI之(神經網路+深度學習)AI神經網路深度學習
- 【深度學習篇】--神經網路中的卷積神經網路深度學習神經網路卷積
- 從零開始用 Python 構建迴圈神經網路Python神經網路
- CICC科普欄目|神經網路淺講:從神經元到深度學習神經網路深度學習
- 【深度學習】1.4深層神經網路深度學習神經網路
- 深度學習教程 | 深層神經網路深度學習神經網路
- 深度學習三:卷積神經網路深度學習卷積神經網路
- 神經網路和深度學習(1):前言神經網路深度學習
- 從傳統的神經元網路轉變到深度學習網路深度學習
- 深度學習四從迴圈神經網路入手學習LSTM及GRU深度學習神經網路
- 深度學習革命的開端:卷積神經網路深度學習卷積神經網路
- 使用PyTorch從零開始構建Elman迴圈神經網路PyTorch神經網路
- Web前端學習路線分享,初學者不要錯過!Web前端
- 《谷歌JAX深度學習從零開始學》簡介谷歌深度學習
- 《Python深度學習從零開始學》簡介Python深度學習
- 深度學習與神經網路學習筆記一深度學習神經網路筆記
- 深度學習筆記------卷積神經網路深度學習筆記卷積神經網路
- 深度學習之上,圖神經網路(GNN )崛起深度學習神經網路GNN
- 深度學習卷積神經網路筆記深度學習卷積神經網路筆記
- 深度學習之step by step搭建神經網路深度學習神經網路
- 深度學習迴圈神經網路詳解深度學習神經網路
- 神經網路和深度學習簡史(全)神經網路深度學習
- 深度學習之RNN(迴圈神經網路)深度學習RNN神經網路
- 深入研究神經網路和深度學習神經網路深度學習
- 神經網路和深度學習簡史(一)神經網路深度學習
- 從頭開始實現神經網路:入門神經網路
- 深度學習與圖神經網路學習分享:CNN 經典網路之-ResNet深度學習神經網路CNN
- 從零開始學機器學習——網路應用機器學習
- 【初學者必備】網路安全學習經驗彙總!
- [譯] 如何用 Python 從零開始構建你自己的神經網路Python神經網路