在《我的世界》裡創建神經網絡 開源

可能是疫情吧,大家在現實中行動受限,就越來越多去遊戲世界中釋放天性。

前有《我的世界》舉辦畢業典禮,後有《動物森友會》舉辦AI會議。最近《我的世界》又被大神帶來了硬核玩法:

在《我的世界》裡創建神經網絡    開源

你以為他在塗鴉?不!其實他在進行神經網絡的推理。

你如果是一個熟悉神經網絡的人,想必已經猜出來了。

圖片裡這位玩家做的正是MNIST手寫數字分類網絡。

只需用劍在牆壁上畫出數字,神經網絡就能知道你寫的是幾。不僅僅如此,神經網絡在推理過程中,哪些神經元被激活,都可以在這裡看得一清二楚。

在《我的世界》裡創建神經網絡    開源

這個腦洞大開的玩家是一位來自印度的小哥Ashutosh Sathe,遊戲項目叫做Scarpet-nn

Sathe不僅放出了試玩視頻,還開源了代碼,如果你是《我的世界》玩家+神經網絡煉丹師,那麼你也可以把自己的網絡放在遊戲裡。

Scarpet-nn支持卷積層和完全連接層,允許在單個世界中運行多個神經網絡。而且可以展示中間張量的逐塊激活,甚至還能一次運行多個神經網絡。

Sathe小哥到底是怎麼想到用《我的世界》來搭建神經網絡的呢?

像素風和神經網絡是絕配

我的世界裡那一個個像素色塊簡直就是顯示3維數組的神器。如果一個長方體的每個小塊都用不同顏色來展示數值,那麼一個長方體就可以表示一個張量。


在《我的世界》裡創建神經網絡    開源

但是用表示的範圍有限,我的世界地圖裡的資源也有限,在神經網絡中顯示BERT什麼的顯然不切實際。

所以用兩種顏色的色塊表示二值神經網絡(BNN)最合適了。


在《我的世界》裡創建神經網絡    開源

BNN是一種高度簡化的神經網絡,權重和激活都只能取兩個值:+1或-1。但是計算機中二進制的位表示是不同的。因此在BNN中,我們將+1存儲為1為,將-1存儲為0。


在《我的世界》裡創建神經網絡    開源

這樣在BNN中乘法運算就變成了邏輯門中的同或運算,而邏輯門在《我的世界》中可以用紅石電路造出。

在《我的世界》裡創建神經網絡    開源

至此,用《我的世界》搭建神經網絡的理論基礎已經完成,下面開始實際操作。

神經網絡轉像素模塊

我們需要在電腦上安裝《我的世界》Java版,第三方Mod也是必不可少的。在這個項目裡,我們要安裝Litematicacarpetmod兩個Mod。

另外還需要通過Python3安裝PyTorchnbtlib

接下來就是“煉丹”,先在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


分享到:


相關文章: