『网络』在《我的世界》里搭建神经网络,运行过程清晰可见,这位印度小哥开发的新玩法火了

晓查 凌晨 发自 凹非寺
量子位 报道 | 公众号 QbitAI
可能是疫情吧 , 大家在现实中行动受限 , 就越来越多去游戏世界中释放天性 。
前有《我的世界》举办毕业典礼 , 后有《动物森友会》举办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等等 。 将相应文件导入即可 。
『网络』在《我的世界》里搭建神经网络,运行过程清晰可见,这位印度小哥开发的新玩法火了


推荐阅读