当前位置: 首页 > 科技观察

在《我的世界》中搭建神经网络,运行过程一目了然-开源

时间:2023-03-14 21:53:18 科技观察

本文经AI新媒体量子比特(公众号ID:QbitAI)授权转载,转载请联系出处。或许是疫情的缘故,现实中每个人的行动都是有限的,所以越来越多的人去游戏世界释放自己的天性。之前有《我的世界》的毕业典礼,后面有《动物森友会》的AI会议。最近《我的世界》被大师带来了一款硬核游戏:你觉得他是涂鸦吗?不!其实他是在做神经网络推理。如果你是熟悉神经网络的人,你一定猜到了。图中的播放器正在做MNIST手写数字分类网络。只要用你的剑在墙上画数字,神经网络就会知道你写的是什么。不仅如此,在神经网络的推理过程中,哪些神经元被激活,在这里也能一目了然。这位脑洞大开的选手是来自印度的小弟AshutoshSathe,游戏项目名为Scarpet-nn。Sathe不仅发布了演示视频,还开源了代码。如果你是《我的世界》玩家+神经网络炼金术士,那么你也可以在游戏中放入自己的网络。Scarpet-nn支持卷积层和全连接层,允许多个神经网络在一个世界中运行。它可以显示中间张量的逐块激活,甚至可以同时运行多个神经网络。Sathe哥是怎么想到用《我的世界》搭建神经网络的?像素风格和神经网络是绝配。Minecraft中的像素色块只是用来显示3维数组的神器。如果长方体的每个图块都以不同的颜色显示一个值,则长方体可以表示一个张量。不过表示的范围是有限的,我的世界地图里面的资源也是有限的。在神经网络中展示BERT显然是不切实际的。所以用双色块来表示二进制神经网络(BNN)是最合适的。BNN是一个高度简化的神经网络,其中权重和激活只能取两个值:+1或-1。但是二进制在计算机中的位表示是不同的。所以在BNN中我们把+1存为1,-1存为0。这样,BNN中的乘法运算就变成了逻辑门中的异或运算,可以用《我的世界》中的红石电路制作逻辑门。至此,使用《我的世界》构建神经网络的理论基础已经完成,下面开始实际操作。神经网络转像素模块我们需要在电脑上安装《我的世界》Java版,第三方Mod也是必不可少的。在这个项目中,我们将安装两个模组,Litematica和carpetmod。另外,需要通过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原理图我的世界文件包。如果你只是想简单的看看实际运行效果,可以在我们的公众号里回复我的世界。不得不说,《我的世界》的高手太多了。之前有复旦本科生从零开始做计算机,现在有印度小哥从零开始搭建神经网络。(相关阅读:《我的世界》从零开始造一台电脑到底有多难?复旦本科硕士花了一年的心血)只是目前的模块无法在《我的世界》训练神经网络。相信在这些高手的努力下,以后用《我的世界》炼丹不是梦。传送门博客地址:https://ashutoshbsathe.github.io/scarpet-nn/scarpet-apps/twoclassmnist/Litematica下载地址:http://minecraft.curseforge.com/projects/litematica源代码:https://github。com/ashutoshbsathe/scarpet-nn