好生猛,游戏里爆肝创纪录,太强了!

👇👇关注后回复 “进群” ,拉你进程序员交流群👇👇

转自:机器之心 | 杜伟

这两天逛 B 站,发现了一个非常有意思的视频!

在我的世界(Minecraft)中,红石是一种非常重要的物品。它是游戏中的一种独特材料,开关、红石火把和红石块等能对导线或物体提供类似电流的能量。

90a6ac806548fb7d9e306a512d3ce647.png

红石电路可以为你建造用于控制或激活其他机械的结构,其本身既可以被设计为用于响应玩家的手动激活,也可以反复输出信号或者响应非玩家引发的变化,如生物移动、物品掉落、植物生长、日夜更替等等。

因此,在我的世界中,红石能够控制的机械类别极其多,小到简单机械如自动门、光开关和频闪电源,大到占地巨大的电梯、自动农场、小游戏平台甚至游戏内建的计算机。

近日,B 站 UP 主 @辰占鳌头等人在我的世界中实现了真正的「红石人工智能」,他们耗时六个月,构建了世界上首个纯红石神经网络,任务是识别 15×15 手写数字

作者表示,他们使用非传统的计算方式——随机计算来实现神经网络,在设计和布局上比传统全精度计算简单许多,并且单次理论识别时间仅为 5 分钟。

51e8df99631a8963fa56162051bf035b.gif

这个纯红石神经网络完成了机器学习领域常见的图像识别任务——手写数字识别,并且准确率达到了 80%(在 MNIST 数据集上模拟)。

1c14b659a8d115d19e35ad6b2fbc1334.gif

‍在实现的过程中,作者使用到的各种元素包括如下:

单个神经元接受多个输入并产生一个输出。

加入「乘法器」,仅使用随机数和单个逻辑门运算小数乘法。

0b5262cf83b217d7aa4c3e905d27dce5.gif

神经元阵列输出识别结果或传递到下一层。

各数字的置信度。

550ed18fa635fcb8b3c1045b0633732c.gif

卷积层用来提取笔画特征。

全连接第一层:压缩信息并分类。

激活函数阵列:将数据非线性地映射到高维特征空间。

全连接第二、三层:进一步分类并输出识别结果。

作者表示,该网络使用的架构是压缩的 LeNet-5,准确率达到 80%。

不过,受限于 Minecraft 的运算能力,实际识别时间超过 20 分钟。尽管如此,这仍是红石数电领域的重大突破,也可能启发现实中的硬件神经网络。

目前,视频的播放量已经超过 80 万,全 B 站排行榜最高第 39 名,让各路网友叹为观止。就连图灵奖得主 Yann LeCun 也在 Facebook 上转发了该视频,表示「一位非常有耐心且坚持不懈的人使用红石在我的世界中实现了 LeNet-5。」LeCun 是 LeNet 架构提出者。

e510ade22a7d6221e471bd05b8084c40.png

视频地址:

https://www.bilibili.com/video/BV1yv4y1u7ZX

https://www.bilibili.com/video/BV1wF411F7PU

背后的原理

在另外一个视频《【Minecraft】红石卷积神经网络——原理》中,作者详细解释了红石卷积神经网络的原理。

总的来说,他们使用的是压缩的 LeNet-5 卷积神经网络,卷积是网络的第一步计算,使用一个带权重的窗口(卷积核)逐次扫描图像并提取笔画特征。

e6a29f1493021e7c91749f1518ca46e3.gif

然后将这些笔画特征馈入到深度神经网络(全连接层)进行分类识别。

fa96c86e2f96806e20e43cf6c7b601bd.gif

在我的世界中实现红石神经网络

作者首先列出了输入设备,包括一个单脉冲式压力板手写板和 15×15 坐标屏。其中手写板每次产生 2tick 的坐标信号,接着由屏幕绘制。

f597d515f525dfa13c937e3fa2144e56.gif

随后输入的手写数字进入卷积层,计算方法是累加卷积核被遮盖的部分,并将结果输出到下一层。并且,为了保证非线性,输出还经过了 ReLU 函数。

97933bdac77ac34c2a6a8d3c1dc4e313.gif

由于卷积核只有 3×3,因而作者直接使用了电模运算,并在输出端自动进行 ReLU。

fe2c254e19239c6e1afe6eea37296ed8.gif

‍另外,又由于卷积无法像动画里那样移动,所以采用了直接堆叠的方式,再通过硬连线连接到手写板输入上。

504b85fff849bf870cfb2f1af45eaa55.gif

到了全连接层,它的每层由若干神经网络构成。每个神经元都连接多个输入,并产生一个输出。神经元将每个输入加权累加,然后带入一个激活函数输出。

需要注意的是,加权求和是「线性分割」,而激活函数一定是非线性的,用于提升维度。作者使用了 tanh(双曲正切)作为了激活函数

1a60050455d0a0e3f7a73d89a2c55045.gif

反映到实际的神经元电路中,如下图所示。

9b2c29b677cfcb46a1a6ddd78c919294.png

同时,权重被储存在投掷器(用来调整物品配比生成不同频率的随机串)中,输入乘以权重后通过模电累加。

5b990c9c48fcf74d52b8021b1ac397cc.gif

最终电路实现

关于电路实现,首先通过模电计算加法,然后转为数电信号。

df35e0a274cd5d7acdba6e2b8ba606ac.gif

累加器则是改装了另一位 Up 主提供的 2tick 流水线加法器,使之不会溢出。

8b41ed4bdcd8b23de840d8dae2366fa5.gif

接着堆叠神经元,构成一个全连接层。

5adabda566080ffac5ecc491475c40b4.gif

‍最后一层的输出以及层间缓存使用如下模电计数器,它可以统计 5Hz 串中「1」的数量,容量则为 1024。

00baa3b0430660f91d5258cda0813bf0.gif

最后在输出层,计数器的高 4 位被连接到计数板上,然后电路选取最大的值并在输出面板上显示。

a5b3a0b86055c1542f1de72d9a30a9bc.gif

‍视频最后,作者展示了最终的网络结构,如下图所示。其中,权重范围为 [-1, 1],随机串长度为 1024,MNIST 数据集上的准确率约为 80%。不过当串长为 256 时,准确率仅为 62%。

927cfd09331edd2fbdb4c6b26ea6e020.png

最后

非常有意思的时间换空间算法,感兴趣的小伙伴,可以自己去试试。

我的世界真是一款无与伦比的佳作,可以做的东西真多07155f5d77912b96d4cb8171c83a45d5.png

不说了,这就去学习。

-End-

最近有一些小伙伴,让我帮忙找一些 面试题 资料,于是我翻遍了收藏的 5T 资料后,汇总整理出来,可以说是程序员面试必备!所有资料都整理到网盘了,欢迎下载!

f303b2bf0f1a62c5a266e36cb73f9238.png

点击👆卡片,关注后回复【面试题】即可获取

在看点这里fa7b32a3244e943a4600e885b4293eb9.gif好文分享给更多人↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值