豐色 發自 凹非寺
量子位 | 公眾號 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 · 頭條號簽約