Minecraft可以说是近十年玩家数量最多的游戏之一,发售快15年了,月活跃玩家仍有1.5亿之多,大人小孩都喜欢。
在Minecraft的像素方块世界里,你能砍树挖矿,打造神装,搭建基地,也能养马养鸡,探索世界,体验冒险人生。
这样的开放世界游戏很多,但像Minecraft这么开放的没多少。当我还在地下深处的矿洞和绿皮僵尸激情肉搏时,博主Sammyuri已经在游戏里造出了一个能运行的简化版 ChatGPT,他将其称为CraftGPT。

CraftGPT全貌
在游戏里,CraftGPT的交互界面是一个显示器和一个键盘,玩家用键盘输入文字,CraftGPT通过显示器回复。

CraftGPT正在和你闲聊
事情是这样的:Sammyuri团队在外部训练好了模型,把神经网络的计算图翻译成红石电路,使用了4.39亿个方块,把五百万参数的模型的各个成分导入了Minecraft中,直接用红石电路硬编码了神经网络。
如何搭建缸中缸中之脑在游戏里追求真实本来就有点问题,在游戏里搭建一个AI更是有套娃一样的诡异效果。
实现这个效果就好像把大象关进冰箱——在Minecraft中搭建大模型AI只需要四步。
1:在外部训练好数据集;
2:把训练好的数据编译成红石电路,导入Minecraft;
3:把红石电路层层堆叠,组成神经网络;
4:最后搭建输入键盘以及输出的屏幕,愉快地开始与大模型聊天。
第一步是大模型数据集的训练。
虽然叫做CraftGPT,但这个模型和ChatGPT关系不大,是Sammyuri从0搭建起来的。他用Python训练了一个参数为500万的小模型,可以识别1920个词、维度为240、6层、5头。
一个参数可以看作是一种词与词之间的联系,参数越多,模型对语言的理解就越细致,而维度、层数、头数代表着模型思考的深度,数字越大,模型思考的深度就越深。
在今天已经没人瞧得上的元祖GPT-1,都有着1.17 亿的参数,可以识别5万多个词、有着768个维度、12层和12头。并不是作者不想整个大活,Minecraft中的“模拟计算机”的计算速度远比不上真实电脑,为了在Minecraft中运行后,还能在有生之年看到结果,这个模型不得不经过相当的瘦身。
右下角的蓝色曲线——训练损失(train loss)代表了模型对训练集的学习效果,而橙色曲线——验证损失(val loss)代表了模型在验证集上对新句子的表现。如果只有蓝色下降,橙色不变甚至升高,说明模型学傻了,只能死记硬背教材内容,出现了过拟合;但如果这两个同时下降,说明模型学得不错,不仅记住了知识,还对未知文本具备了理解力。

训练阶段的CraftGPT
当这两条曲线都下降到稳定水平后,研究者会再拿出最后一部分从未使用过的测试集进行检验。不过,CraftGPT 在测试集上的表现,Sammyuri 团队并未公开提及。
第二步就是逐步将训练好的神经网络大模型搬进Minecraft里。为了在Minecraft中能让AI跑起来,Sammyuri使用了游戏中一种叫做红石电路的玩意。
红石是Minecraft里的矿物,可以理解为一种兼具了导体和移动电源功能的资源,在红石之外还有不少配套的组件,比如开关、按钮、压力板等。通过开关的通断,红石电路可以在游戏中模拟二进制的0或1,从而构建出基础的三种逻辑门。


红石电路中的非门、或门、与门 | 哔哩哔哩 @yhDAF
三种门是所有计算机的基础,有了它们,任何逻辑关系都能被实现。不过这只是开端,想要做出更厉害的东西,玩家们还需要像乐高一样堆叠出能存储、计算、传输的复杂结构。
在Python中训练完成的大模型仍然是一组组抽象的数字,如何在方块世界中赋予它们形状呢?
第二步中,这些训练出来的数字就要被编译成红石电路。在编译过程中,每个参数的数值会被转换成红石信号的强弱,而参数在模型中的位置则决定了方块的摆放位置和连线方式。就这样,500万个参数都会变成Minecraft中的方块组合。

CraftGPT宏大的结构,模拟了大模型的功能
当数据全部完成了方块化,第三步神经网络的搭建就要开始了。Sammyuri团队选择与ChatGPT相同的transformer架构,这种架构会通过横向联想和纵向联想,让模型既能理解上下文,又语义丰富。最后,为了让语义关系更稳固,在输出前,纵横联想会重复六轮,逐层深化。
最后,搭建完键盘与屏幕,CraftGPT的效果就可以展现在我们眼前了。

虽然因为词汇量有限让孩子有点车轱辘话,但CraftGPT也有着自我认知
CraftGPT的完成度相当高。
虽然它的词汇量和生成的句子长度有限,但它依然能进行简单的对话,回答基础的事实问题。更有趣的是,由于游戏中的seed(在世界生成时产生的一种随机参数)不同,它给出的回答也会随之变化,这让CraftGPT的输出带有一定的随机性和多样性,而不是每次都一模一样。

虽然简单,但每次CraftGPT提供的户外活动建议都略有不同
不过,它的运行效率极低。因为红石信号传播的距离有限——只能传播15个游戏方格的长度,15格后就需要中继器来延长信号。问题就在这里,通过中继器虽然会给信号再次续命15格,但是会产生0.1秒的延迟。一个复杂的计算模块可能包含成千上万个中继器,这意味着一次运算要等待几分钟才能完成。相对现实中接近光速的电子流动来说,红石电路简直是蜗牛蠕动。
即便在经过特别优化,速度超快的服务器上,生成一个回答也可能需要耗费数小时;如果换到普通电脑上运行,回答一次的时间甚至可能长达十年。毕竟这是一个由红石电路堆出来的小模型,能运转就足够让人惊叹了。
CraftGPT就像那位试图徒步环球的探险家卡尔·布什比(Karl Bushby),从智利出发,历尽艰难险阻,花了整整27年才在今年5月重新踏上欧洲大陆,就算加快脚步,坐上飞机绕地球赤道一圈,也需要约 42 小时。至于真正的计算机,它们的速度更像0.134 秒就能绕地球一圈的光。
红石电路,三体里的人列计算机CraftGPT项目的核心——红石电路诞生于2010年的Minecraft Alpha 1.0.1版本。
在一款冒险游戏里,红石原本应该是什么角色呢?
一个2010年的攻略贴展示了当时最流行的红石用法:踩下踏板就会开的自动门、TNT地雷陷阱等,用来让生活更方便,或者坑朋友。
红石在游戏里引发了第二次工业革命,很快,玩家们迈入了电气自动化的新时代。他们制造出了可以检测矿车经过的“自动地铁站”,能自动收集农作物、杀怪收集掉落物品的自动化农场,还有转动式灯塔、机关式雕塑等有趣又实用的建筑。
这些用途是大多数玩家最早接触红石的起点。

当时的红石农场,红石实用派代表作之一
Minecraft的最初创造者Notch从一开始就知道红石的潜力,他在一次访谈里提到,红石系统使得Minecraft具备了图灵完备性,也就是说,在Minecraft中只要有足够多的时间和储存,玩家理论上就能在游戏中计算出任何可计算的东西。
早在红石刚推出的2010年,就有人跟随着《计算机系统要素》的指导,试图在Minecraft中模拟简单的计算机。从机关陷阱到逻辑电路,再到 CPU 雏形,红石的发展轨迹也从单纯的游戏机关,走歪出了一个“吃力不讨好”的模拟计算机之路。

当时简陋的计算机结构
超复杂结构,还真给他们手搓出来了在社区中,玩家们开始交流设计工具,优化红石电路的经验,大大推动了技术的发展,加上随着游戏版本更新,更多好用方便的红石组件加入了游戏,大型计算机项目的实现成为了可能。
Minecraft项目的成型,就像原始人手搓喷气机,从炼铁开始。
红石电路只提供了表现0和1的信号的功能,也就是开关的闭合与开启,更加进阶的逻辑门、寄存器、时钟电路则需要玩家自己搭建,让信号能计算、存储并循环。而上述结构只有继续堆叠成更加复杂的部件,才可以组成完整的系统。可以说,这其中每一步都必须从项目底层的计算逻辑以及原理出发,逐个组件拼接,可以说是费工又费力。
不过,就是有这么一些团队痴迷于手搓一切,做出让人惊艳的杰作。
WildEngineering手搓过GPU;MattBatWings 做出了8-bit 可编程计算机;而Craftgpt的创造者Sammyuri更进一步,做出过16 bit电脑,在那上面可以运行多种程序,甚至还能终极套娃,在Minecraft里玩Minecraft。
看着他们的作品,仿佛是在上计算机组成原理。

WildEngineering的GPU,运算速度达到了惊人的5Hz(每秒计算五次),虽然现代GPU的运算次数以万亿次/秒计
中国也有不少红石电路高手。
2022年,up主辰占鳌头就早于Sammyuri,把神经网络搬进过Minecraft,并实现了堪称机器学习届“Hello World”的手写数字识别。除此之外,他还实现过汉字编码全像素显示屏,把中国特色创意发挥到了极致。

辰占鳌头的汉字编码全像素显示屏
有意义吗?这是技术成为艺术的一刻虽然这些红石作品在实用性上几乎没有意义,远不如现成的计算机高效,但他们展现出的好奇和探索,也是人类文明繁荣的源头所在。
手搓电脑不是为了造出一台真正能使用的机器,只为了证明:即便是在像素方块的虚拟世界中,也可以从0起步,堆出复杂的逻辑和计算。
这也是工程师的浪漫精神所在,拼接简单的开与关、0和1,直到成为让人直呼“漂亮”的精妙工程。这是一种浪漫,是对我们为什么要钻研技术的一种艺术性的回答。
参考文献
[1]https://www.youtube.com/watch?v=VaeI9YgE1o8
3年手搓ChatGPT!剑桥天才少年在Minecraft游戏中爆火回归[2]https://mp.weixin.qq.com/s/fmgsWl-HNBlRo9O7V-gg1Q
[3]https://Minecraft.fandom.com/wiki/
[4]https://gaming.stackexchange.com/questions/7852/what-is-redstone-used-for-in-Minecraft
[5]https://www.youtube.com/watch?v=LGkkyKZVzug
[6]https://www.bilibili.com/video/BV1wP4y1s7jy/
[7]https://www.bilibili.com/video/BV1JzNUeuEg2/
作者:李小雅
编辑:翻翻
