文章來源:機(jī)器之心
編輯:杜偉
神奇的紅石,神奇的我的世界,不可思議的 UP 主。
在我的世界(Minecraft)中,紅石是一種非常重要的物品。它是游戲中的一種獨特材料,開關(guān)、紅石火把和紅石塊等能對導(dǎo)線或物體提供類似電流的能量。
紅石電路可以為你建造用于控制或激活其他機(jī)械的結(jié)構(gòu),其本身既可以被設(shè)計為用于響應(yīng)玩家的手動激活,也可以反復(fù)輸出信號或者響應(yīng)非玩家引發(fā)的變化,如生物移動、物品掉落、植物生長、日夜更替等等。
因此,在我的世界中,紅石能夠控制的機(jī)械類別極其多,小到簡單機(jī)械如自動門、光開關(guān)和頻閃電源,大到占地巨大的電梯、自動農(nóng)場、小游戲平臺甚至游戲內(nèi)建的計算機(jī)。
近日,B 站 UP 主 @辰占鰲頭等人在我的世界中實現(xiàn)了真正的「紅石人工智能」,他們耗時六個月,構(gòu)建了世界上首個純紅石神經(jīng)網(wǎng)絡(luò),任務(wù)是識別 15×15 手寫數(shù)字。
作者表示,他們使用非傳統(tǒng)的計算方式——隨機(jī)計算來實現(xiàn)神經(jīng)網(wǎng)絡(luò),在設(shè)計和布局上比傳統(tǒng)全精度計算簡單許多,并且單次理論識別時間僅為 5 分鐘。
這個純紅石神經(jīng)網(wǎng)絡(luò)完成了機(jī)器學(xué)習(xí)領(lǐng)域常見的圖像識別任務(wù)——手寫數(shù)字識別,并且準(zhǔn)確率達(dá)到了 80%(在 MNIST 數(shù)據(jù)集上模擬)。
在實現(xiàn)的過程中,作者使用到的各種元素包括如下:
單個神經(jīng)元接受多個輸入并產(chǎn)生一個輸出。
加入「乘法器」,僅使用隨機(jī)數(shù)和單個邏輯門運算小數(shù)乘法。
神經(jīng)元陣列輸出識別結(jié)果或傳遞到下一層。
各數(shù)字的置信度。
卷積層用來提取筆畫特征。
全連接第一層:壓縮信息并分類。
激活函數(shù)陣列:將數(shù)據(jù)非線性地映射到高維特征空間。
全連接第二、三層:進(jìn)一步分類并輸出識別結(jié)果。
作者表示,該網(wǎng)絡(luò)使用的架構(gòu)是壓縮的 LeNet-5,準(zhǔn)確率達(dá)到 80%。
不過,受限于 Minecraft 的運算能力,實際識別時間超過 20 分鐘。盡管如此,這仍是紅石數(shù)電領(lǐng)域的重大突破,也可能啟發(fā)現(xiàn)實中的硬件神經(jīng)網(wǎng)絡(luò)。
目前,視頻的播放量已經(jīng)超過 80 萬,全 B 站排行榜最高第 39 名,讓各路網(wǎng)友嘆為觀止。就連圖靈獎得主 Yann LeCun 也在 Facebook 上轉(zhuǎn)發(fā)了該視頻,表示「一位非常有耐心且堅持不懈的人使用紅石在我的世界中實現(xiàn)了 LeNet-5?!筁eCun 是 LeNet 架構(gòu)提出者。
【Minecraft】世界首個純紅石神經(jīng)網(wǎng)絡(luò)!真正的紅石人工智能(中文/English)
【Minecraft】紅石卷積神經(jīng)網(wǎng)絡(luò)——原理
背后的原理
在另外一個視頻《【Minecraft】紅石卷積神經(jīng)網(wǎng)絡(luò)——原理》中,作者詳細(xì)解釋了紅石卷積神經(jīng)網(wǎng)絡(luò)的原理。
總的來說,他們使用的是壓縮的 LeNet-5 卷積神經(jīng)網(wǎng)絡(luò),卷積是網(wǎng)絡(luò)的第一步計算,使用一個帶權(quán)重的窗口(卷積核)逐次掃描圖像并提取筆畫特征。
然后將這些筆畫特征饋入到深度神經(jīng)網(wǎng)絡(luò)(全連接層)進(jìn)行分類識別。
在我的世界中實現(xiàn)紅石神經(jīng)網(wǎng)絡(luò)
作者首先列出了輸入設(shè)備,包括一個單脈沖式壓力板手寫板和 15×15 坐標(biāo)屏。其中手寫板每次產(chǎn)生 2tick 的坐標(biāo)信號,接著由屏幕繪制。
隨后輸入的手寫數(shù)字進(jìn)入卷積層,計算方法是累加卷積核被遮蓋的部分,并將結(jié)果輸出到下一層。并且,為了保證非線性,輸出還經(jīng)過了 ReLU 函數(shù)。
由于卷積核只有 3×3,因而作者直接使用了電模運算,并在輸出端自動進(jìn)行 ReLU。
另外,又由于卷積無法像動畫里那樣移動,所以采用了直接堆疊的方式,再通過硬連線連接到手寫板輸入上。
到了全連接層,它的每層由若干神經(jīng)網(wǎng)絡(luò)構(gòu)成。每個神經(jīng)元都連接多個輸入,并產(chǎn)生一個輸出。神經(jīng)元將每個輸入加權(quán)累加,然后帶入一個激活函數(shù)輸出。
需要注意的是,加權(quán)求和是「線性分割」,而激活函數(shù)一定是非線性的,用于提升維度。作者使用了 tanh(雙曲正切)作為了激活函數(shù)。
反映到實際的神經(jīng)元電路中,如下圖所示。
同時,權(quán)重被儲存在投擲器(用來調(diào)整物品配比生成不同頻率的隨機(jī)串)中,輸入乘以權(quán)重后通過模電累加。
最終電路實現(xiàn)
關(guān)于電路實現(xiàn),首先通過模電計算加法,然后轉(zhuǎn)為數(shù)電信號。
累加器則是改裝了另一位 Up 主提供的 2tick 流水線加法器,使之不會溢出。
接著堆疊神經(jīng)元,構(gòu)成一個全連接層。
最后一層的輸出以及層間緩存使用如下模電計數(shù)器,它可以統(tǒng)計 5Hz 串中「1」的數(shù)量,容量則為 1024。
最后在輸出層,計數(shù)器的高 4 位被連接到計數(shù)板上,然后電路選取最大的值并在輸出面板上顯示。
視頻最后,作者展示了最終的網(wǎng)絡(luò)結(jié)構(gòu),如下圖所示。其中,權(quán)重范圍為 [-1, 1],隨機(jī)串長度為 1024,MNIST 數(shù)據(jù)集上的準(zhǔn)確率約為 80%。不過當(dāng)串長為 256 時,準(zhǔn)確率僅為 62%。