閱讀379 返回首頁    go 阿裏雲 go 技術社區[雲棲]


30行代碼,帶你分分鍾創建神經網絡!(附工具&教程)

image

本文含大量代碼,如需原文請從文末來源鏈接獲取。

自己搭建神經網絡太複雜?

image

使用Synaptic.js(https://synaptic.juancazala.com/ )創建和訓練神經網絡。
利用這款工具,我們可以在瀏覽器中用Node.js進行深度學習。
今天我們要講的例子是一個非常簡單的神經網絡,我們將用它來學習邏輯異或方程(XOR equation)。
同時,我也在Scrimba上創建了一個交互式屏幕錄像。你也可以通過觀看視頻來學習本教程。(https://scrimba.com/casts/cast-1980)
在開始編程之前,讓我們先快速瀏覽神經網絡的一些基本概念。

image

神經網絡的第一個模塊,是神經元。
神經元類似一個函數,你輸入一些值,它就會輸出返回值。
神經元有各種不同的類型。我們的神經網絡將用到sigmoid神經元(https://en.wikipedia.org/wiki/Sigmoid_function ),它能將任何輸入的給定值壓縮至0到1之間。
下圖中的圓圈就代表一個sigmoid神經元。它的輸入值是5,輸出值是1。箭頭則代表的是神經元的突觸,用來連接神經網絡中其它層的神經元。

image

為什麼會有一個紅色的數字5呢?它是連接到神經元的三個突觸(左邊3個箭頭)的值之和。
在最左邊,我們看到有兩個值與所謂的偏差值進行了加法運算。數值1和0是綠色的,而偏差值-2是棕色的。
首先,兩個輸入值與他們的權重分別相乘,權重就是藍色數字7和3。
然後,我們把上述運算結果和偏差值加起來,所得的結果是5,對應紅色數字。這個紅色數字就是我們人工神經元的輸入值。

image

由於我們的神經元是sigmoid神經元,它會將任何值壓縮到0到1的區間範圍內,所以輸出值被壓縮到1。
如果將這些神經元的網絡連接起來,就形成了一個神經網絡。通過神經元間的突觸連接,從輸入到輸出進行正向傳播。如下圖所示:

image

神經網絡的目標是訓練其泛化能力,例如識別手寫的數字或者垃圾郵件。做到好的泛化重要的是通過神經網絡找到合適的權重和偏差值,如上述例子中的藍色和棕色數字。
當訓練神經網絡時,我們隻需要加載大量示例數據,如手寫的數字,然後讓神經網絡來預測正確的數字。
在每次預測後,你需要計算預測的偏差程度,然後調整權重和偏差值使得神經網絡在下一次運算中可以預測的更加準確,這種學習過程被稱為反向傳播。如此重複上千次,你的神經網絡很快會精於泛化。
本教程不包括反向傳播的工作原理介紹,但是我找到了3個好的教程幫助大家理解:
分步介紹反向傳播案例-作者:Matt Mazur
https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/)
神經網路駭客指南-作者:Andrej Karpathy
https://karpathy.github.io/neuralnets/)
神經網絡和深度學習-作者:Michael Nielsen
https://neuralnetworksanddeeplearning.com/chap1.html)

image

現在,你應該已經對神經網絡有了基礎概念,那就讓我們進入代碼部分吧。

1.創建神經網絡層

在synaptic中我們使用new layer()函數來創建。函數中傳遞的數字表示的是每一層會有多少個神經元。

image

接下來我們將這些層進行連接並實例化一個神經網絡,代碼如下,

image

這是一個2-3-1結構的神經網絡,可視化表示如下:

image

2.訓練神經網絡

image

我們共進行了20,000次的訓練,每一次都進行四次正向傳播和反向傳播運算,分別傳遞四個可能的輸入到神經網絡:[0,0] [0,1] [1,0] [1,1]。
我們從myNetwork.activate([0,0])激活函數開始,[0,0]是神經網絡的輸入值,這個過程是正向傳播,也被稱為激活網絡。在每一次正向傳播後我們需要做一次反向傳播,從而更新神經網絡的權重和偏差值。

image

learningRate是一個常數,用來告訴神經網絡每次應該對權重值進行多大程度的調整。第二個參數0表示的是當輸入為[0,0]時,正確的輸出參數是0.
然後,神經網絡將預測值和真實值進行對比,來判斷預測是否正確。
它將比較的結果作為調整權重和偏差值的基礎,以便下次的預測可以更加準確。
在執行這個過程20,000次後,我們可以通過傳遞四個可能的值輸入到激活網絡,從而判斷目前神經網絡的預測情況:

image

如果我們將這些值四舍五入到最近的整數,就將得到異或方程的正確結果。萬歲!

image
image

原文發布時間為:2017-09-21
本文作者:Per Haiald Borgen
本文來自雲棲社區合作夥伴“數據派THU”,了解相關信息可以關注“數據派THU”微信公眾號

最後更新:2017-10-10 14:33:26

  上一篇:go  送機器學習電子書——(TensorFlow)RNN入門
  下一篇:go  HTML5:網頁如何播放VR視頻?