可能是疫情吧,大家在現實中行動受限,就越來越多去遊戲世界中釋放天性。
前有《我的世界》舉辦畢業典禮,後有《動物森友會》舉辦AI會議。最近《我的世界》又被大神帶來了硬核玩法:
你以為他在塗鴉?不!其實他在進行神經網絡的推理。
你如果是一個熟悉神經網絡的人,想必已經猜出來了。
圖片裡這位玩家做的正是MNIST手寫數字分類網絡。
只需用劍在牆壁上畫出數字,神經網絡就能知道你寫的是幾。不僅僅如此,神經網絡在推理過程中,哪些神經元被激活,都可以在這裡看得一清二楚。
這個腦洞大開的玩家是一位來自印度的小哥Ashutosh Sathe,遊戲項目叫做Scarpet-nn。
Sathe不僅放出了試玩視頻,還開源了代碼,如果你是《我的世界》玩家+神經網絡煉丹師,那麼你也可以把自己的網絡放在遊戲裡。
Scarpet-nn支持卷積層和完全連接層,允許在單個世界中運行多個神經網絡。而且可以展示中間張量的逐塊激活,甚至還能一次運行多個神經網絡。
Sathe小哥到底是怎麼想到用《我的世界》來搭建神經網絡的呢?
像素風和神經網絡是絕配
我的世界裡那一個個像素色塊簡直就是顯示3維數組的神器。如果一個長方體的每個小塊都用不同顏色來展示數值,那麼一個長方體就可以表示一個張量。
但是用表示的範圍有限,我的世界地圖裡的資源也有限,在神經網絡中顯示BERT什麼的顯然不切實際。
所以用兩種顏色的色塊表示二值神經網絡(BNN)最合適了。
BNN是一種高度簡化的神經網絡,權重和激活都只能取兩個值:+1或-1。但是計算機中二進制的位表示是不同的。因此在BNN中,我們將+1存儲為1為,將-1存儲為0。
這樣在BNN中乘法運算就變成了邏輯門中的同或運算,而邏輯門在《我的世界》中可以用紅石電路造出。
至此,用《我的世界》搭建神經網絡的理論基礎已經完成,下面開始實際操作。
神經網絡轉像素模塊
我們需要在電腦上安裝《我的世界》Java版,第三方Mod也是必不可少的。在這個項目裡,我們要安裝Litematica和carpetmod兩個Mod。
另外還需要通過Python3安裝PyTorch和nbtlib。
接下來就是“煉丹”,先在PyTorch裡訓練好你的二值神經網絡。
Litematica是一個幫助用戶從零開始繪製示意圖的模塊,它可以準確地構建結構,指定將塊放置在何處。
運行modeltolitematica.py將神經網絡的所有層轉換為不同的Litematica示意圖。每個示意圖僅包含一層神經網絡。
圖中以紫色表示+1的塊,以綠色代表-1的塊。
在這一步後,你會獲得一組示意圖文件,後綴名為.litematica。文件的名稱和你命名的網絡層相同,比如conv1.weight.litematica、fc2.weight.litematica等等。將相應文件導入即可。
把神經網絡鋪在地上
由於卷積層會出現4維數組,這在3維空間裡是沒法表示的,因此這個過程中還加入了壓縮。
一般卷積層的形式是:[c2, c1, fh, fw]。其中c2是輸出激活的通道數量,c1是輸入激活的通道數量,fh和fw是卷積濾波器的高度和寬度。
通過scarpet-nn將後兩個維度乘起來,變成[c2, c1, fh× fw],這樣就解決了3維顯示問題。
而全連接層都是2維的,不存在不能顯示的狀況,因此不需要做任何調整。
然後你就可以在空地上繪製一張16×16的輸入圖像了。
將卷積層導入地圖後,你就可以進行神經網絡運算了。
最後,作者還給出了一個MNIST示意圖MineCraft文件包,如果只想簡單看看實際運行效果,可以在我們的公眾號中回覆我的世界獲取。
不得不說,《我的世界》裡大神太多,之前有復旦本科生從零計算機,現在又有印度小哥從零打造神經網絡。
只是現在的模塊還不能在《我的世界》裡訓練神經網絡,相信在這些大神的努力下,未來用《我的世界》煉丹也不是夢。
傳送門
博客地址:https://ashutoshbsathe.github.io/scarpet-nn/scarpet-apps/twoclassmnist/
Litematica下載地址:http://minecraft.curseforge.com/projects/litematica
源代碼:https://github.com/ashutoshbsathe/scarpet-nn
閱讀更多 前端攻城師 的文章
關鍵字: 電腦 人工智能 Qwodeshijie