豐色 發自 凹非寺
量子位 | 公眾號 QbitAI
非計算機專業、神經網路小白,爆肝六個月——
在《我的世界》裡搭建一個卷積神經網路,這是什麼神操作?
最近,來自B站up主@辰佔鰲頭的作品著實火了一把。
他和朋友們合作完成的這個號稱“世界首個純紅石神經網路”,神經元、卷積層、全連線層、啟用函式、乘法器、輸入、輸出……樣樣俱全、蔚為壯觀,而且可以真的實現手寫數字識別,準確率還達到了80%。
這波,妥妥就是如網友所說:
簡直是實力與耐心做出來的超凡成果。
目前,這個影片的播放量已經上了一百萬,在外網,它甚至還引起了LeCun的注意:不僅轉發了他們的作品,還給出了“Very meta”的評價。
耗時6個月,用紅石搭建卷積神經網路紅石是我的世界裡一種可以傳遞訊號的礦石資源,可以用來製作紅石電路,進而完成小到如自動門、光開關、頻閃電源的簡單機械,大到電梯、自動農場、盾構機、小遊戲平臺甚至計算機的複雜工具。
本次作者們搭建的這個神經網路的架構,基於LeCun於1998年提出的經典卷積結構LeNet-5,它就是用來實現手寫數字識別的。
相比傳統的全精度計算(乘法器和加法器),作者經過一番思考和估算,決定採用隨機計算的方式來實現這個神經網路,這樣可以讓設計和佈局都簡單一些。
畢竟對於用隨機計算實現乘法來說,只需一個與門就可以表示單極,一個同或就能表示雙極。
由於在我的世界中進行反向傳播不太可能,網路的權重都是先在Pytorch中訓練好,然後直接搬進去。
為了生成由隨機串組成的權重,作者利用“投擲器投擲物品是隨機的”這一原理造了一個隨機數生成器。
總的來說,他們採用的是一個壓縮的LeNet-5,先使用一個帶權重的視窗(卷積核)逐次掃描影象並提取筆畫特徵,然後將這些筆畫特徵饋入到深度神經網路(全連線層)進行分類識別。
具體來說:
首先由輸入裝置:一個單脈衝式壓力板手寫板和15×15座標屏,產生座標訊號,並在螢幕上繪製出筆跡。
然後手寫數字進入卷積層,累加捲積核被遮蓋的部分,並將結果輸出到下一層。
其中:
(1)在卷積層,作者沒有使用隨機計算,而是使用我的世界中的模擬訊號進行加法運算;
(2)為了保證輸入資料可以非線性地對映到高維度特徵空間然後進行線性分類,輸出經過了啟用函式ReLU;
(3)由於卷積無法隨意移動,所以採用直接堆疊的方式,再透過硬連線連線到手寫板輸入上。
隨後,是全連線層。每層由若干神經網路構成,每個神經元都連線多個輸入,併產生一個輸出。神經元將每個輸入加權累加,然後帶入一個啟用函式輸出。
全連線層使用的是隨機計算,
啟用函式用的是非線性的tanh。
實際的神經元電路如下:
最後一層的輸出使用一個模電計數器,用來統計5Hz串中“1”的數量,容量則為1024。
最終,輸出部分,計數器的高4位被連線到計數板上,然後電路選取最大的值並在面板上顯示結果。
結構總覽:
網路架構總覽:
作者介紹,該神經網路在MNIST資料集上約實現了80%的準確率,作為對比,同權重的全精度網路的準確率為88%。
另外,它的單次理論識別時間約為5分鐘,但沒想到Minecraft的運算能力實在有限——在實際測試中,可能要40分鐘以上。
由此作者得出,Minecraft隨機計算神經網路在時間開銷上未必優於全精度網路。不過全精度網路目前還沒有人做出來。
“工作量和難度都很大”在這個作品的評論區,都是一水兒的稱讚有加與膜拜(連大V籽岷都冒泡了)——
看完大佬的鉅作,有網友甚至開始懷疑自己和up主們玩的不是一個遊戲。(手動狗頭)
還有人指出,別看最終實現的功能只是相當於機器學習中的“hello world”,但用遊戲中提供的紅石元件復現出來,可以說是“工作量和難度都很大”。
因為“這要求作者對演算法的底層實現或者硬體執行原理(類似cuda程式設計)有深刻的理解,還能使用遊戲機制來最佳化執行過程以及完成平行計算”。
雖然最終識別速度比較慢,但“在這裡探討效率的意義不大”。
言外之意,它本身就很有價值,“我們不能拿cpu的兩個執行緒經過無數層模擬器巢狀後的識別效率去跟顯示卡識別效率比較”。
最後,還有人感嘆:好了,現在紅石神經網路有了,硬碟、CPU、顯示器也早就有了,紅石超級電腦是不是也不遠了?
“說不定到時我們就能在MC裡玩MC了~”
關於作者這個紅石卷積神經網路一共有5位作者,up主@辰佔鰲頭是主要貢獻者,負責電路的總體設計、搭建和除錯。
他和另外一位作者@學雜不善(GitHub@leamoon)都是香港科技大學的學生,現在分別攻讀理論物理學博士和電子工程學博士。
其他3位合作者中,有一位高中剛畢業(@NKID00),另外兩位(@enadixxoOxoxO和@愛紅石的小章魚)沒有透露自己的身份。
@辰佔鰲頭在2014年的時候就開始接觸《我的世界》這款遊戲了,曾做過一個編碼漢字的顯示器和一個8位的CPU。
問及為什麼一個非計算機專業的學生想要搭建一個神經網路時,他告訴我們,其實自己參加過資訊競賽,由於之前接觸過隨機計算(stochastic computing),最初是想展示一下隨機計算在特定任務下的優越性所以開始了這個專案。
最終為了搭建完整的神經網路,他看了50+頁英文文獻,寫了1000多行程式碼。
要說最難/耗時最久的部分,他回答:是全連線層除錯,因為執行速度很慢而且使用隨機計算很難找到問題所在。
對於未來,up主表示,他正在考慮搭建一臺支援RISC-V指令集的紅石CPU。
查了一下,目前似乎還沒人做出來,值得期待~
B站影片:https://www.bilibili.com/video/BV1yv4y1u7ZX
原理介紹:https://www.bilibili.com/video/BV1wF411F7PU
— 完 —
量子位 QbitAI · 頭條號簽約