天天看點

印度小哥在「我的世界」裡搭神經網絡,做圖像識别,網友:這是「别人的世界」

對于計算機科學愛好者們來說,有關《我的世界》中的環境是否「夠格」作為各種嚴肅實驗的話題,早已經過了充分讨論:

印度小哥在「我的世界」裡搭神經網絡,做圖像識别,網友:這是「别人的世界」

答案是肯定的,《我的世界》中紅石電路和指令方塊體系已經分别圖靈完備了。這意味着我們理論上可以在其中建構一個通用圖靈機(雖然難度比較大),進而造出一台功能完整的正常架構計算機。

既然如此,我們能不能在遊戲裡「敲出」一個神經網絡模型呢?

已經有人做到了。最近,一名來自印度的程式員 Ashutosh Sathe 向我們展示了真正的技術,他在《我的世界》裡運作起了一個具有圖像識别能力的神經網絡。

隻要在遊戲裡的「畫闆」上寫字,《我的世界》裡的「計算機」就可以識别出你寫的内容是什麼:

印度小哥在「我的世界」裡搭神經網絡,做圖像識别,網友:這是「别人的世界」
在《我的世界》裡進行 MNIST 式的手寫數字識别。
印度小哥在「我的世界」裡搭神經網絡,做圖像識别,網友:這是「别人的世界」

「神經網絡推斷出畫闆上的文字為數字 1」。

除了給出識别的結果,神經網絡識别的過程也是清晰可見:

印度小哥在「我的世界」裡搭神經網絡,做圖像識别,網友:這是「别人的世界」
印度小哥在「我的世界」裡搭神經網絡,做圖像識别,網友:這是「别人的世界」

在看了這波操作之後,衆多吃瓜網友留下了不争氣的淚水,感慨道:「這是『别人的世界』……」

這一炫酷的技術被稱為 scarpet-nn,是一套可以讓玩家在《我的世界》遊戲中運作二值神經網絡(BNN)的工具。BNN 是一種激活、權重被固定為 1 或-1 的特殊神經網絡,大幅度簡化了神經網絡的運算量,最早由 Yoshua Bengio 等人提出。正是這些特性,讓 BNN 的權重可以由單個二進制位來表示,并在《我的世界》裡運作。

與此前人們在《我的世界》中運作神經網絡的一些嘗試不同,scarpet-nn 的 API 允許人們在遊戲中運作任何二值神經網絡的體系架構。也就是說,任何人都可以訓練自己的二值神經網絡,然後将其運作在《我的世界》裡。

此外,Ashutosh Sathe 還開放了代碼。

項目位址:

https://github.com/ashutoshbsathe/scarpet-nn

技術細節:投影(Litematica)原理圖生成

要想在我的世界裡運作神經網絡,你首先需要安裝一個 Java 版遊戲,Litematica 和 carpetmod 兩個 mod,另一方面還需要有 Python 3,深度學習架構 pytorch 和 nbtlib 庫。

通用表征标準

在 scarpet-nn 中,nn-to-litematica 子產品将 pytorch 檢查點的二值化權重轉換為 litematica 原理圖。每個 litematica 的排列方式是讓前兩個次元位于 (x,z) 平面上。此外,原理圖的加載點(加載原理圖時玩家所在的區域)總是表示權重數組中的第一個數字。權重數組中的第一個次元是從加載點到 X 軸正半軸,第二個次元是從加載點到 Z 軸正半軸。超過 3 的次元會被重塑成第 3 個軸(Y 軸)。

卷積層的表征

這裡遵循上述通用表征标準。由于卷積層是以四維數組的形式存儲的,是以需要壓縮額外的次元,使其變成三維。卷積層的典型 shape 是 [c_2,c_1,f_h,f_w]。其中,

  • c_2 = 輸出激活應有的通道數
  • c_1= 輸入激活應有的通道數
  • (f_h,f_w)= 卷積濾波器的高度和寬度

為了将此轉換成三維的表征,scarpet-nn 将 (f_h,f_w) 壓縮成一個大小為 f_h×f_w 的單一次元。是以,生成的原理圖中新的卷積層将會是 [c_2,c_1,f_h×f_w]。

為了直覺地了解這一點,請看下面的樣例圖檔。該圖展示了第三個卷積層(conv3)權重的塊表征,它的權重從 [16, 8, 3, 3] 壓縮成了 [16, 8, 9]。

印度小哥在「我的世界」裡搭神經網絡,做圖像識别,網友:這是「别人的世界」

全連接配接層的表征

全連接配接(fc)層也符合 scarpet-nn 的通用表征标準。全連接配接層的典型 shape 是 [n,k],輸入是 [m,n],輸出是 [m,k]。由于所有的操作都是二維的,是以不需要做次元調整。由于也沒有第三維,是以整個的權重數組都在 X-Z 平面内。

如下是 fc1 層的示意圖。該層的 shape 是 [8, 16]。

印度小哥在「我的世界」裡搭神經網絡,做圖像識别,網友:這是「别人的世界」

看完技術細節,有人覺得,在這種像素化的沙盒遊戲裡,用紅石搭建神經網絡,未免也太過複雜……

印度小哥在「我的世界」裡搭神經網絡,做圖像識别,網友:這是「别人的世界」

但也有人覺得,恰恰是因為用紅石邏輯建構網絡,才讓人印象深刻。

印度小哥在「我的世界」裡搭神經網絡,做圖像識别,網友:這是「别人的世界」

作者本人回複說,scarpet-nn 比指令方塊體系的性能要好得多,《我的世界》可以将其用于繪制地圖時在隐蔽模式下打開隐藏内容。

印度小哥在「我的世界」裡搭神經網絡,做圖像識别,網友:這是「别人的世界」

隻是目前,在《我的世界》中可以實作的神經網絡功能仍然有限:看起來隻有前向傳播而沒有反向傳播。

印度小哥在「我的世界」裡搭神經網絡,做圖像識别,網友:這是「别人的世界」

不過在玩家們的不懈努力下,又有什麼是不能實作的呢?

參考連結:

https://ashutoshbsathe.github.io/scarpet-nn/ https://www.reddit.com/r/MachineLearning/comments/gb08da/p_i_wrote_an_api_to_build_neural_networks_in/