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

評論