機(jī)器人編程讓程序員再次火熱,身價(jià)也水漲船高。
首先我們來(lái)測(cè)試一下,可以發(fā)現(xiàn)調(diào)整訓(xùn)練集之后,輸出的結(jié)果雖然有變化,但仍然是一個(gè)非常接近1的數(shù)。
運(yùn)行完整代碼看看具體的權(quán)重值,可見(jiàn)第三列的權(quán)重值極小接近于0,而第一、二列的權(quán)重值絕對(duì)值相當(dāng)。所以我們的這個(gè)單細(xì)胞神經(jīng)網(wǎng)絡(luò),并沒(méi)有“學(xué)會(huì)”期望的邏輯關(guān)系。
這是因?yàn)椋暗谝涣信c第三列同時(shí)為1->1,否則->0”是一個(gè)非線性關(guān)系。與上一篇的“輸入=第一列”不同,后者是高度線性的(不能再線性了)。要解決更復(fù)雜的非線性問(wèn)題,就需要把多個(gè)神經(jīng)元連接起來(lái),真正形成“網(wǎng)絡(luò)”。
在Milo的原文中,他也提出了一個(gè)非常類(lèi)似的問(wèn)題,就是“異或”。
正文
下表的?處應(yīng)該是什么?
訓(xùn)練集與新形勢(shì)
經(jīng)過(guò)觀察可以發(fā)現(xiàn),第三列是無(wú)關(guān)的,而前兩列成“異或”關(guān)系——相等為0,相異為1。所以正確答案應(yīng)為0。
對(duì)于單個(gè)神經(jīng)元來(lái)說(shuō),這樣的線性關(guān)系太復(fù)雜了,輸入-輸出之間沒(méi)有一對(duì)一的映射關(guān)系。所以我們必須加入一個(gè)含4個(gè)神經(jīng)元的隱藏層(Layer 1),這一層使得神經(jīng)網(wǎng)絡(luò)能夠思考輸入的組合問(wèn)題。
藍(lán)線代表神經(jīng)突觸,圖來(lái)自https://github.com/miloharper/visualise-neural-network
由圖可見(jiàn),Layer 1的輸出給了Layer 2,如此神經(jīng)網(wǎng)絡(luò)就可以學(xué)習(xí)Layer 1的輸出和訓(xùn)練集的輸出之間的關(guān)系。在學(xué)習(xí)過(guò)程中,這些關(guān)系會(huì)隨著兩層的權(quán)重調(diào)整而加強(qiáng)。
實(shí)際上,圖像識(shí)別的原理就很相似。一個(gè)像素點(diǎn)和蘋(píng)果之間并沒(méi)有直接關(guān)系,但是像素點(diǎn)組合起來(lái),就和蘋(píng)果發(fā)生了關(guān)系。
往神經(jīng)網(wǎng)絡(luò)中加更多的層,使其思考狀態(tài)組合,這就是“深度學(xué)習(xí)”。首先放出代碼,之后我會(huì)進(jìn)一步詳解。
兩層神經(jīng)網(wǎng)絡(luò)
運(yùn)行
跟上一版代碼最大的不同在于,這次有多層。當(dāng)神經(jīng)網(wǎng)絡(luò)計(jì)算第二層的誤差時(shí),這個(gè)誤差會(huì)被反向傳播回第一層,并影響權(quán)重值的調(diào)整。這就是反向傳播算法(Back Propagation)。
點(diǎn)擊運(yùn)行鍵,觀察輸出結(jié)果,這次的輸出會(huì)比較多,主要看最后的預(yù)測(cè)結(jié)果。我們得到了0.0078876,這與正確答案0非常接近了。
雖然看起來(lái)很輕松,其實(shí)計(jì)算機(jī)在背后執(zhí)行了大量的矩陣運(yùn)算,而且這個(gè)過(guò)程不是很容易可視化。在下一篇文章中,我將把我們的神經(jīng)網(wǎng)絡(luò)的神經(jīng)元和突觸都做個(gè)可視化,讓我們看看她究竟是如何思考的。
后記
現(xiàn)在我們已經(jīng)有了一個(gè)可以思考非線性關(guān)系的神經(jīng)網(wǎng)絡(luò),那么回到開(kāi)頭的那個(gè)問(wèn)題,能否識(shí)別出“第一列與第三列同時(shí)為1->1,否則->0”的關(guān)系呢?
請(qǐng)將相應(yīng)的代碼替換為:
新訓(xùn)練集
training_set_inputs = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1],[1,1,0],[0,1,0],[0,0,0]]) training_set_outputs = array([[0, 1, 1, 0,0,0,0]]).T
同時(shí)也不要忘記調(diào)整
hidden_state, output = neural_network.think(array([1, 1, 0]))
里的測(cè)試樣本(array([1,1,0]))。重新點(diǎn)擊運(yùn)行,觀察我們現(xiàn)在的神經(jīng)網(wǎng)絡(luò)能否解決問(wèn)題。
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4814瀏覽量
103719 -
python
+關(guān)注
關(guān)注
56文章
4827瀏覽量
86829
原文標(biāo)題:機(jī)器人編程 | 小伙利用Python搭建多層神經(jīng)網(wǎng)絡(luò),三天內(nèi)被邀請(qǐng)去騰訊阿里面試!
文章出處:【微信號(hào):worldofai,微信公眾號(hào):worldofai】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
機(jī)器人10大流行編程語(yǔ)言對(duì)比,你學(xué)會(huì)了哪種?
機(jī)器人控制的入門(mén)經(jīng)驗(yàn)
機(jī)器人未來(lái)設(shè)想
設(shè)計(jì)機(jī)器人程序員系統(tǒng)的編程技能
如何避免程序員面向監(jiān)獄編程
機(jī)器人十大流行編程語(yǔ)言的介紹及機(jī)器人編程系統(tǒng)以及操作方法
程序員如何定義
怎樣做快樂(lè)的程序員
漫話:程序員要失業(yè)了? 機(jī)器人開(kāi)始在GitHub上修Bug了。
什么是程序員
程序員的未來(lái)
OrangeEdit-OrangeEdit機(jī)器人編程軟件應(yīng)用程序免費(fèi)下載

評(píng)論