30行代碼舔株,帶你分分鐘創(chuàng)建神經(jīng)網(wǎng)絡(luò)!(附工具&教程)

摘要:本文含大量代碼还棱,如需原文請(qǐng)從文末來源鏈接獲取载慈。 自己搭建神經(jīng)網(wǎng)絡(luò)太復(fù)雜? 使用Synaptic.js(https://synaptic.juancazala.com/#/ )創(chuàng)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)珍手。 利用這款工具娃肿,我們可以在瀏覽器中用Node.js進(jìn)行深度學(xué)習(xí)。

本文含大量代碼珠十,如需原文請(qǐng)從文末來源鏈接獲取。

自己搭建神經(jīng)網(wǎng)絡(luò)太復(fù)雜凭豪?

使用Synaptic.js(https://synaptic.juancazala.com/#/)創(chuàng)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)焙蹭。

利用這款工具,我們可以在瀏覽器中用Node.js進(jìn)行深度學(xué)習(xí)嫂伞。

今天我們要講的例子是一個(gè)非常簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)孔厉,我們將用它來學(xué)習(xí)邏輯異或方程(XOR equation)。

同時(shí)帖努,我也在Scrimba上創(chuàng)建了一個(gè)交互式屏幕錄像撰豺。你也可以通過觀看視頻來學(xué)習(xí)本教程。(https://scrimba.com/casts/cast-1980)

在開始編程之前拼余,讓我們先快速瀏覽神經(jīng)網(wǎng)絡(luò)的一些基本概念污桦。

神經(jīng)網(wǎng)絡(luò)的第一個(gè)模塊,是神經(jīng)元匙监。

神經(jīng)元類似一個(gè)函數(shù)凡橱,你輸入一些值,它就會(huì)輸出返回值亭姥。

神經(jīng)元有各種不同的類型稼钩。我們的神經(jīng)網(wǎng)絡(luò)將用到sigmoid神經(jīng)元(https://en.wikipedia.org/wiki/Sigmoid_function),它能將任何輸入的給定值壓縮至0到1之間达罗。

下圖中的圓圈就代表一個(gè)sigmoid神經(jīng)元坝撑。它的輸入值是5,輸出值是1。箭頭則代表的是神經(jīng)元的突觸巡李,用來連接神經(jīng)網(wǎng)絡(luò)中其它層的神經(jīng)元抚笔。

為什么會(huì)有一個(gè)紅色的數(shù)字5呢?它是連接到神經(jīng)元的三個(gè)突觸(左邊3個(gè)箭頭)的值之和击儡。

在最左邊塔沃,我們看到有兩個(gè)值與所謂的偏差值進(jìn)行了加法運(yùn)算。數(shù)值1和0是綠色的阳谍,而偏差值-2是棕色的蛀柴。

首先,兩個(gè)輸入值與他們的權(quán)重分別相乘矫夯,權(quán)重就是藍(lán)色數(shù)字7和3鸽疾。

然后,我們把上述運(yùn)算結(jié)果和偏差值加起來训貌,所得的結(jié)果是5制肮,對(duì)應(yīng)紅色數(shù)字。這個(gè)紅色數(shù)字就是我們?nèi)斯ど窠?jīng)元的輸入值递沪。

由于我們的神經(jīng)元是sigmoid神經(jīng)元豺鼻,它會(huì)將任何值壓縮到0到1的區(qū)間范圍內(nèi),所以輸出值被壓縮到1款慨。

如果將這些神經(jīng)元的網(wǎng)絡(luò)連接起來儒飒,就形成了一個(gè)神經(jīng)網(wǎng)絡(luò)。通過神經(jīng)元間的突觸連接檩奠,從輸入到輸出進(jìn)行正向傳播桩了。如下圖所示:

神經(jīng)網(wǎng)絡(luò)的目標(biāo)是訓(xùn)練其泛化能力,例如識(shí)別手寫的數(shù)字或者垃圾郵件埠戳。做到好的泛化重要的是通過神經(jīng)網(wǎng)絡(luò)找到合適的權(quán)重和偏差值井誉,如上述例子中的藍(lán)色和棕色數(shù)字。

當(dāng)訓(xùn)練神經(jīng)網(wǎng)絡(luò)時(shí)整胃,我們只需要加載大量示例數(shù)據(jù)颗圣,如手寫的數(shù)字,然后讓神經(jīng)網(wǎng)絡(luò)來預(yù)測(cè)正確的數(shù)字屁使。

在每次預(yù)測(cè)后欠啤,你需要計(jì)算預(yù)測(cè)的偏差程度,然后調(diào)整權(quán)重和偏差值使得神經(jīng)網(wǎng)絡(luò)在下一次運(yùn)算中可以預(yù)測(cè)的更加準(zhǔn)確屋灌,這種學(xué)習(xí)過程被稱為反向傳播洁段。如此重復(fù)上千次,你的神經(jīng)網(wǎng)絡(luò)很快會(huì)精于泛化共郭。

本教程不包括反向傳播的工作原理介紹祠丝,但是我找到了3個(gè)好的教程幫助大家理解:

分步介紹反向傳播案例-作者:Matt Mazur

https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/)

神經(jīng)網(wǎng)路駭客指南-作者:Andrej Karpathy

http://karpathy.github.io/neuralnets/)

神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)-作者:Michael Nielsen

http://neuralnetworksanddeeplearning.com/chap1.html)

現(xiàn)在疾呻,你應(yīng)該已經(jīng)對(duì)神經(jīng)網(wǎng)絡(luò)有了基礎(chǔ)概念,那就讓我們進(jìn)入代碼部分吧写半。

1.創(chuàng)建神經(jīng)網(wǎng)絡(luò)層

在synaptic中我們使用new layer()函數(shù)來創(chuàng)建岸蜗。函數(shù)中傳遞的數(shù)字表示的是每一層會(huì)有多少個(gè)神經(jīng)元。

接下來我們將這些層進(jìn)行連接并實(shí)例化一個(gè)神經(jīng)網(wǎng)絡(luò)叠蝇,代碼如下璃岳,

這是一個(gè)2-3-1結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),可視化表示如下:

2.訓(xùn)練神經(jīng)網(wǎng)絡(luò)

我們共進(jìn)行了20,000次的訓(xùn)練悔捶,每一次都進(jìn)行四次正向傳播和反向傳播運(yùn)算铃慷,分別傳遞四個(gè)可能的輸入到神經(jīng)網(wǎng)絡(luò):[0,0] [0,1] [1,0] [1,1]。

我們從myNetwork.activate([0,0])激活函數(shù)開始蜕该,[0,0]是神經(jīng)網(wǎng)絡(luò)的輸入值犁柜,這個(gè)過程是正向傳播,也被稱為激活網(wǎng)絡(luò)堂淡。在每一次正向傳播后我們需要做一次反向傳播馋缅,從而更新神經(jīng)網(wǎng)絡(luò)的權(quán)重和偏差值。

learningRate是一個(gè)常數(shù)绢淀,用來告訴神經(jīng)網(wǎng)絡(luò)每次應(yīng)該對(duì)權(quán)重值進(jìn)行多大程度的調(diào)整萤悴。第二個(gè)參數(shù)0表示的是當(dāng)輸入為[0,0]時(shí),正確的輸出參數(shù)是0.

然后皆的,神經(jīng)網(wǎng)絡(luò)將預(yù)測(cè)值和真實(shí)值進(jìn)行對(duì)比覆履,來判斷預(yù)測(cè)是否正確。

它將比較的結(jié)果作為調(diào)整權(quán)重和偏差值的基礎(chǔ)祭务,以便下次的預(yù)測(cè)可以更加準(zhǔn)確。

在執(zhí)行這個(gè)過程20,000次后怪嫌,我們可以通過傳遞四個(gè)可能的值輸入到激活網(wǎng)絡(luò)义锥,從而判斷目前神經(jīng)網(wǎng)絡(luò)的預(yù)測(cè)情況:

如果我們將這些值四舍五入到最近的整數(shù),就將得到異或方程的正確結(jié)果岩灭。萬歲拌倍!

原文鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市噪径,隨后出現(xiàn)的幾起案子柱恤,更是在濱河造成了極大的恐慌,老刑警劉巖找爱,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梗顺,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡车摄,警方通過查閱死者的電腦和手機(jī)寺谤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門仑鸥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人变屁,你說我怎么就攤上這事眼俊。” “怎么了粟关?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵疮胖,是天一觀的道長。 經(jīng)常有香客問我闷板,道長澎灸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任蛔垢,我火速辦了婚禮击孩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘鹏漆。我一直安慰自己巩梢,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布艺玲。 她就那樣靜靜地躺著括蝠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪饭聚。 梳的紋絲不亂的頭發(fā)上忌警,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音秒梳,去河邊找鬼法绵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛酪碘,可吹牛的內(nèi)容都是我干的朋譬。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼兴垦,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼徙赢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起探越,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤狡赐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后钦幔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體枕屉,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年鲤氢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搀庶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拐纱。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖哥倔,靈堂內(nèi)的尸體忽然破棺而出秸架,到底是詐尸還是另有隱情,我是刑警寧澤咆蒿,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布东抹,位于F島的核電站,受9級(jí)特大地震影響沃测,放射性物質(zhì)發(fā)生泄漏缭黔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一蒂破、第九天 我趴在偏房一處隱蔽的房頂上張望馏谨。 院中可真熱鬧,春花似錦附迷、人聲如沸惧互。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽喊儡。三九已至,卻和暖如春稻据,著一層夾襖步出監(jiān)牢的瞬間艾猜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工捻悯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留匆赃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓今缚,卻偏偏與公主長得像算柳,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子荚斯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容