| While True: Learn() | |
| 原名 | While True: Learn() |
| 类型 | 解谜游戏 |
| 平台 | Windows macOS iOS Android Nintendo Switch PlayStation 4 Xbox One Xbox Series X/S |
| 开发 | Luden.io Nival International Limited |
| 音乐 | Broadcast of Variants |
| 引擎 | Unity |
| 模式 | 单人游戏 |
| 发行时间 | 2019年1月17日 |
| 相关作品 | 《学习工厂》(Learning Factory) |
《While True: Learn()》是由塞浦路斯游戏工作室 Luden.io 开发的解谜类游戏,于 2019 年 1 月发行。
| “ | 你是一个写神经网络的机器学习专家,但是你家猫主子貌似比你要牛啊。所以现在你必须要解决各种难题来创建一款猫语翻译器(谁知道你家主子还会干什么呢)!赚钱,给猫主子买皮肤,了解真正的机器学习的姿势! | ” |
本作的剧情围绕着自 20 世纪 40 年代以来,人工智能与机器学习的发展历程展开。游戏中,玩家将扮演一个不小心发现自己的宠物猫的代码竟然写的比自己还要棒的程序员,并设法开发一款猫语翻译器。
游戏的所有可玩要素全部在任务树(Task tree)上以不同的图案表示。其中:
在游戏中,各种机器学习算法(决策树、随机森林、卷积神经网络等)全部都是以节点的形式出现。所有需要处理的数据也全部抽象为红色、绿色和蓝色的圆形、方形和三角形,共 9 种不同的物件[2]。
在每一个关卡中会有 1~5 个输入流和 1~5 个输出流,每个输入流初始时会存放有一定数量的物件(资料)。游戏目标是通过放置和连接各种节点,组成一个网络来分类输入流里的资料,使得分类后的结果满足输出流的准确率和数量需求。在网络的编辑界面,玩家有 3 个独立的档案,可用于构建 3 个独立的解决方案(购买硬件升级后可以提升到 4 个)。
本要素仅在关卡模式出现。
游戏内对于每一个关卡有金牌、银牌和铜牌三种评级,相应的挑战要素分别是时间限制和节点数限制,达成要求依次降低。如果玩家设计的网络效率太低,达不到铜牌的要求,那么最终会导致超时,从而关卡失败Time Limit Exceeded。同时,每一个输出流也会有准确率和数量需求。如果输入流的资料全部处理完毕时,某个输出流的准确率或者资料数量达不到需求,也会导致关卡失败。
所有的机器学习算法全部会以小卡片的形式在面板中出现,游戏中称为节点(node)。每个节点的左侧有一个绿色三角形表示输入端口,右侧会有一个或多个输出端口,也是用绿色三角形标注。用鼠标单击端口并拖动即可拖出绿色的直线,连接不同节点的端口。右键单击连线,可以将已有的连线删除。构造网络完毕后,点击右上角的测试即可启动测试。
游戏中关于节点的许多机制也和现实中的机器学习和分布式计算吻合。在节点两侧的小三角形旁边会有一个黑色的容量条,表示节点的容量。启动测试后,如果流入某个节点的资料量过大(资料流入的速度超过流出的速度),会导致节点出现拥塞,严重降低网络效率,此时,端口的绿色三角形会变为红色叉号。在真实的计算机科学领域,这是一个典型的生产者消费者模型。黑色容量条相当于缓冲区,缓冲区满时,生产者若要继续加入数据,就会阻塞,必须等待消费者取走缓冲区已有的数据。
特别的,前期的某些关卡如果输入数据规模不大,则节点本身的缓冲区也可以当作垃圾桶来使用(但是这种做法在现实中显然是不可取的,性质上相当于资源泄漏)。游戏有一个成就叫做 stack overflow,需要玩家在能使用垃圾桶的情况下却不使用垃圾桶通关。
下面介绍游戏里出现的节点。在真实的机器学习里,这些节点里的算法主要从 Python 的 sklearn 或 torch 模块中调用,涉及到计算机视觉的部分也会使用 cv2(OpenCV)。
| 节点 | 游戏内功能 | 游戏内延迟(没有升级的初始值) | 备注 | 在三次元的世界里... | 对应 Python 中的... |
|---|---|---|---|---|---|
| 均衡器(balancer) | 将输入流的数据等分为两份,用来开展并行计算,避免单个节点陷入拥塞 | 0.05 秒 | 会引入服务器成本,服务器成本会从玩家游玩后获得的金币中扣除。 | 对应于现实中的分布式计算,许多参数规模较大的模型也会采用分布式训练。在真实的大数据与分布式计算中,数据的传输、节点的通信与协调也会带来一定的开销,和游戏的设定吻合。 | torch.nn.DataParallel
|
| 决策树:颜色(decision tree: color) | 将输入按照颜色分为两类,如果两个颜色不同,例如设置为红色和蓝色,则红色数据(不考虑形状)进入红色分支,蓝色数据进入蓝色分支,绿色的随机进入一个。 如果某一个分支设置为“任意”,则所有的资料都有概率进入任意分支。 如果两个分支相同,则相当于一个没有成本的均衡器。 |
0.30 秒 | / | 机器学习的基础分类算法,树的节点带有判断条件。对于一个新输入的数据,会根据每个分支节点的判断条件,顺着往下直到走入叶子节点,也即预测的类别。 分支节点的判断条件一般需要根据训练数据进行训练来确定。 |
sklearn.tree.DecisionTreeClassifier
|
| 决策树:形状(decision tree: shape) | 将输入按照形状分为两类,如果两个形状不同,例如设置为三角形和正方形,则三角形数据(不考虑颜色)进入三角形分支,正方形数据进入正方形分支,圆形的随机进入一个。 如果某一个分支设置为“任意”,则所有的资料都有概率进入任意分支。 如果两个分支相同,则相当于一个没有成本的均衡器。 |
1.00 秒 | / | 机器学习的基础分类算法,树的节点带有判断条件。对于一个新输入的数据,会根据每个分支节点的判断条件,顺着往下直到走入叶子节点,也即预测的类别。 分支节点的判断条件一般需要根据训练数据进行训练来确定。 |
sklearn.tree.DecisionTreeClassifier
|
| 垃圾桶 | 用于丢弃用不到的资料,避免节点陷入拥堵。 | / | 不论放置多少个垃圾桶,一律只视为 1 个节点。 | 在真实的数据科学领域一般称为数据清洗,包括清理无用数据、对数据进行预处理等操作。 | / |
| 专家系统 | 分离出特定的一种颜色。 | 1.00 秒 | / | 可以看作是一类具有专门知识和经验的计算机智能程序系统,这里的知识一般是预设的。 | / |
| 尺度不变特征变换 | 分离出特定的一种形状。 | 1.25 秒 | / | 一种用于图像处理和计算机视觉的经典算法,由David Lowe在1999年提出,并于2004年进行了详细阐述。主要目的是检测和描述图像中的局部特征点,利用其旋转不变性、平移不变性实现图像匹配、目标定位、目标识别等功能。 | cv2.SIFT_create
|
| 随机森林 | 能够同时根据颜色和形状对输入进行分离。 | 1.30 秒 | / | 由多棵决策树组成,每一棵决策树会分别从数据的不同方面进行分类。最终汇总每棵决策树的结果,便能得到最可能的类别。 | sklearn.ensemble.RandomForestClassifier
|
| Mark-1 感知器 | 可将输入按照颜色分为三类,是一个三分类的分类器。 | 1.30 秒 | 准确率不为 100%。初始时的错误率高达 75%,需要先进行训练。训练时,错误率会逐渐降低,直到 20% 封底。 | 由美国心理学家和计算机科学家弗兰克·罗森布拉特(Frank Rosenblatt)在 1957 年于康奈尔航空实验室开发的一种早期的人工神经网络模型。模型计算能力有限,但是足已完成比较简单的图像分类任务(例如区分简单的图形形状等)。 | sklearn.linear_model.Perception
|
| 颜色感知器 | 可将输入按照颜色分为三类,是一个三分类的分类器。 | 0.25 秒 | 准确率不为 100%。初始时的错误率高达 75%,需要先进行训练。训练时,错误率会逐渐降低,直到 9% 封底。 | 对应于神经网络的激活函数,会在网络中引入非线性成分。常见的包括 ReLU 函数、Tanh 函数等。 | torch.nn.ReLUtorch.nn.Tanh等
|
| 形状感知器 | 可将输入按照形状分为三类。 | 0.70 秒 | 准确率不为 100%。初始时的错误率高达 75%,需要先进行训练。训练时,错误率会逐渐降低,直到 9% 封底。 | 对应于神经网络的激活函数,会在网络中引入非线性成分。常见的包括 ReLU 函数、Tanh 函数等。 | torch.nn.ReLUtorch.nn.Tanh等
|
| 梯度下降 | 训练某些模型时,需要将数据先经过“梯度下降”,然后再流入模型,否则错误率会越训练越高,直到逼近 100%。 | 0.70 秒 | 一般只在训练阶段用预训练模型,模型训练完毕后,真实的测试阶段不会出现在最终解决方案里。 | 一种用于寻找函数极小值的优化算法,在机器学习和深度学习中广泛应用,用于优化模型参数,避免模型陷入局部最优。 | / |
| 随机梯度下降 | 训练某些模型时,需要将数据先经过“随机梯度下降”,然后再流入模型,否则错误率会越训练越高,直到逼近 100%。 | 0.20 秒 | 一般只在训练阶段用预训练模型,模型训练完毕后,真实的测试阶段不会出现在最终解决方案里。 | 梯度下降的改进版本 | torch.optim.SGD
|
| ARMA | (待补充) | 0.70 秒 | (待补充) | 全称是自回归滑动平均模型,是一种用于研究时间序列的重要方法。股市波动、天气变化、癌细胞扩散等观测随时间发生变化的数据皆属于时间序列信息。 | statsmodels.tsa.arima.model.ARIMA
|
| 循环神经网络 | (待补充) | (待补充) | (待补充) | 卷积神经网络的一种变体,对具有序列特性的数据非常有效,擅长挖掘数据中的时序与语义信息。 广泛用于语音识别、机器翻译等领域。 |
torch.nn.RNN
|
(待补充)
在游戏中玩家可以用过关赚来的钱购买硬件,硬件可用于提升节点的缓冲区容量、降低数据传输延时、降低服务器成本,这些增益有助于玩家冲击金牌。
| 硬件 | 价格 | 功能 | 原型 |
|---|---|---|---|
| 1MB 内存 | (待补充) | 接口队列大小(缓冲区容量)增加 3 | / |
| 铃鼓 | (待补充) | 数据传输速率增加 1%(传输延时的秒数减少 1%) | / |
| 奔腾 | (待补充) | 节点工作速度增加 1%,数据传输速度增加 1% | Intel 于 1992 年发布的 Pentium 系列处理器 |
| 家庭服务器 | (待补充) | 服务器成本减少 3% | / |
| 256MB 内存 现在随便一个笔记本电脑都是 8GB 以上的内存了 |
(待补充) | 接口队列大小增加 5 | / |
| G卡 250 | (待补充) | 节点工作速度增加 3% | Nvidia 于 2019 年发布的 MX250 显卡 |
| 30GB 硬盘 现在固态硬盘的容量一般都是 1TB,2TB 的量级 |
(待补充) | 提供 1 个额外的自定义方案接口(增加一个解决方案档案栏位) | / |
| 凯尔服务器 | (待补充) | 服务器成本减少 3% | / |
(待补充)
饰品包括猫皮肤、服装、手办、海报等物品。这些物品购买后不会直接对玩家过关、冲击金牌有帮助,但是会改变游戏界面的布局。
(待补充)
| “ | 给别人打工感觉太容易?来点新目标并成为一家企业的 CTO 吧!残酷的市场将大浪淘沙!腰缠万贯或折戟沉沙,由你决定。 | ” |
在任务树中完成“光明会起源”关卡后即可解锁。玩家需要构建符合输入输出要求的网络,并将其发布(部署)后开展业务。
| 初创公司 | 游戏里的电邮地址 | 原型 | 说明 |
|---|---|---|---|
| 必剩客 | pizzasmith@cat.meow | 必胜客 | 由法兰克·卡尼和丹·卡尼于 1958 年建立的美国披萨店。 |
| 自动驾驶汽车 | Yber@cat.meow | 优步(Uber) | 成立于 2009 年的美国科技公司,主营业务包括电话轿车等。相当于中国的“滴滴出行”以及高德地图的打车功能。 |
| 塔达利 | CoolHackers@cat.meow | 雅达利(Atari) | 成立于 1972 年的游戏开发商,业务包括游戏机、主机、电玩等。 |
| 跟踪系统 | Legitmateruler@cat.meow | / | / |
| 阿马逊 | Gamazon@cat.meow | 亚马逊(Amazon) | 成立于 1994 年的美国电商平台。 |
| 血液中心 | bloodsuckers@cat.meow | / | / |
| 稀有物品 | holadelivery@cat.meow | HOLA配送服务 | 参考:https://qikan.cqvip.com/Qikan/Article/Detail?id=7100998090 |
| 进化者 | Evolver@cat.meow | / | / |
| 猫先生的学校 | catschool@cat.meow | / | / |
| 高科技汽车 | tmotors@cat.meow | / | / |
| 肥皂 | TylerDurken@cat.meow | 搏击俱乐部 | 拍摄于 1999 年的悬疑电影,其中的一个主角就是一名肥皂商人。 |
强化学习是一种通过智能体(Agent)与环境交互,不断尝试与犯错从而探索出最优策略的过程。本作的强化学习部分基于自动驾驶汽车展开,涉及到汽车的寻路、避障等要素。
(待补充)
本作的音乐在 Steam 中以 DLC 的形式发布。
(音源待补充)