丰色 发自 凹非寺
量子位 | 公众号 QbitAI

非计算机专业、神经网络小白,爆肝六个月——

在《我的世界》里搭建一个卷积神经网络,这是什么神操作?

最近,来自B站up主@辰占鳌头的作品着实火了一把。

他和朋友们合作完成的这个号称“世界首个纯红石神经网络”,神经元、卷积层、全连接层、激活函数、乘法器、输入、输出……样样俱全、蔚为壮观,而且可以真的实现手写数字识别,准确率还达到了80%

这波,妥妥就是如网友所说:

简直是实力与耐心做出来的超凡成果。

目前,这个视频的播放量已经上了一百万,在外网,它甚至还引起了LeCun的注意:不仅转发了他们的作品,还给出了“Very meta”的评价。

耗时6个月,用红石搭建卷积神经网络

红石是我的世界里一种可以传递信号的矿石资源,可以用来制作红石电路,进而完成小到如自动门、光开关、频闪电源的简单机械,大到电梯、自动农场、盾构机、小游戏平台甚至计算机的复杂工具。

本次作者们搭建的这个神经网络的架构,基于LeCun于1998年提出的经典卷积结构LeNet-5,它就是用来实现手写数字识别的。

相比传统的全精度计算(乘法器和加法器),作者经过一番思考和估算,决定采用随机计算的方式来实现这个神经网络,这样可以让设计和布局都简单一些。

毕竟对于用随机计算实现乘法来说,只需一个与门就可以表示单极,一个同或就能表示双极。

由于在我的世界中进行反向传播不太可能,网络的权重都是先在Pytorch中训练好,然后直接搬进去。

为了生成由随机串组成的权重,作者利用“投掷器投掷物品是随机的”这一原理造了一个随机数生成器。

总的来说,他们采用的是一个压缩的LeNet-5,先使用一个带权重的窗口(卷积核)逐次扫描图像并提取笔画特征,然后将这些笔画特征馈入到深度神经网络(全连接层)进行分类识别。

具体来说:

首先由输入设备:一个单脉冲式压力板手写板和15×15坐标屏,产生坐标信号,并在屏幕上绘制出笔迹。

然后手写数字进入卷积层,累加卷积核被遮盖的部分,并将结果输出到下一层。

其中:

(1)在卷积层,作者没有使用随机计算,而是使用我的世界中的模拟信号进行加法运算;

(2)为了保证输入数据可以非线性地映射到高维度特征空间然后进行线性分类,输出经过了激活函数ReLU;

(3)由于卷积无法随意移动,所以采用直接堆叠的方式,再通过硬连线连接到手写板输入上。

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

全连接层使用的是随机计算,

激活函数用的是非线性的tanh。

实际的神经元电路如下:

最后一层的输出使用一个模电计数器,用来统计5Hz串中“1”的数量,容量则为1024。

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

结构总览:

网络架构总览:

作者介绍,该神经网络在MNIST数据集上约实现了80%的准确率,作为对比,同权重的全精度网络的准确率为88%

另外,它的单次理论识别时间约为5分钟,但没想到Minecraft的运算能力实在有限——在实际测试中,可能要40分钟以上。

由此作者得出,Minecraft随机计算神经网络在时间开销上未必优于全精度网络。不过全精度网络目前还没有人做出来。

“工作量和难度都很大”

在这个作品的评论区,都是一水儿的称赞有加与膜拜(连大V籽岷都冒泡了)——

看完大佬的巨作,有网友甚至开始怀疑自己和up主们玩的不是一个游戏。(手动狗头)

还有人指出,别看最终实现的功能只是相当于机器学习中的“hello world”,但用游戏中提供的红石元件复现出来,可以说是“工作量和难度都很大”。

因为“这要求作者对算法的底层实现或者硬件执行原理(类似cuda编程)有深刻的理解,还能使用游戏机制来优化执行过程以及完成并行计算”。

虽然最终识别速度比较慢,但“在这里探讨效率的意义不大”。

言外之意,它本身就很有价值,“我们不能拿cpu的两个线程经过无数层模拟器嵌套后的识别效率去跟显卡识别效率比较”。

最后,还有人感叹:好了,现在红石神经网络有了,硬盘、CPU、显示器也早就有了,红石超级电脑是不是也不远了?

“说不定到时我们就能在MC里玩MC了~”

关于作者

这个红石卷积神经网络一共有5位作者,up主@辰占鳌头是主要贡献者,负责电路的总体设计、搭建和调试。

他和另外一位作者@学杂不善(GitHub@leamoon)都是香港科技大学的学生,现在分别攻读理论物理学博士和电子工程学博士

其他3位合作者中,有一位高中刚毕业(@NKID00),另外两位(@enadixxoOxoxO和@爱红石的小章鱼)没有透露自己的身份。

@辰占鳌头在2014年的时候就开始接触《我的世界》这款游戏了,曾做过一个编码汉字的显示器和一个8位的CPU。

问及为什么一个非计算机专业的学生想要搭建一个神经网络时,他告诉我们,其实自己参加过信息竞赛,由于之前接触过随机计算(stochastic computing),最初是想展示一下随机计算在特定任务下的优越性所以开始了这个项目。

最终为了搭建完整的神经网络,他看了50+页英文文献,写了1000多行代码。

要说最难/耗时最久的部分,他回答:是全连接层调试,因为运行速度很慢而且使用随机计算很难找到问题所在。

对于未来,up主表示,他正在考虑搭建一台支持RISC-V指令集的红石CPU

查了一下,目前似乎还没人做出来,值得期待~

B站视频:
https://www.bilibili.com/video/BV1yv4y1u7ZX?vd_source=6eb6d925760348954531a2288dcd74be

原理介绍:
https://www.bilibili.com/video/BV1wF411F7PU/?spm_id_from=333.788&vd_source=6eb6d925760348954531a2288dcd74be

—  —

「量子位·视点」直播报名

什么是“智能决策”?智能决策的关键技术是什么?它又将如何打造引领企业二次增长的“智能抓手”?

7月7日周四,参与直播,为你解答~

点这里

B站大佬用我的世界搞出卷积神经网络,LeCun转发!爆肝6个月,播放破百万相关推荐

  1. LeCun大佬点赞转发!B站大佬爆肝6个月,目前播放量破百万!

    来源:量子位 非计算机专业.神经网络小白,爆肝六个月-- 在<我的世界>里搭建一个卷积神经网络,这是什么神操作? ‍‍ 最近,来自B站up主@辰占鳌头的作品着实火了一把. 他和朋友们合作完 ...

  2. 高二学生爆肝10个月!自学数电在《我的世界》里打造理论最快计算器,5天涨粉1万...

    金磊 梦晨 发自 凹非寺 量子位 报道 | 公众号 QbitAI 辛丑牛年(2021),<我的世界>,一高二学生因爆肝在B站火了. 他从未接触过数电,一切从零开始,仅仅是为了搞清计算器的原 ...

  3. 牛掰!阿里P7大佬爆肝半个月,把安卓源码解析编成了508页的PDF

    前言 有一部分人拥有非常宝贵的精神,因为他们的坚持和贡献,我们中国的技术才一步步前进,一步步走向世界.Android行业一直在进步和发展,也正是因为这些人坚持总结经验和分享. 比如有位阿里P7大牛,每 ...

  4. PyTorch 深度学习实践 GPU版本B站 刘二大人第11讲卷积神经网络(高级篇)GPU版本

    第11讲 卷积神经网络(高级篇) GPU版本源代码 原理是基于B站 刘二大人 :传送门PyTorch深度学习实践--卷积神经网络(高级篇) 这篇基于博主错错莫:传送门 深度学习实践 第11讲博文 仅在 ...

  5. b站前端大佬_知乎大佬强烈热推的5个自学网站,看了几个月,月薪三千涨三万...

    原标题:知乎大佬强烈热推的5个自学网站,看了几个月,月薪三千涨三万 现在很多踏入了社会的小伙伴们经常会觉得为什么工作能力提升不上去,主要是因为很少利用业余的时间来学习一些跟自己工作有关的专业知识来充实 ...

  6. ❤️大佬都在学什么?Python爬虫分析C站大佬收藏夹,跟着大佬一起学, 你就是下一个大佬❤️!

    ❤️大佬都在学什么?Python爬虫分析C站大佬收藏夹,跟着大佬一起学,你就是下一个大佬❤️! 前言 程序说明 数据爬取 获取 CSDN 作者总榜数据 获取收藏夹列表 获取收藏数据 爬虫程序完整代码 ...

  7. b站大佬稚晖君的首次直播分享学习

    1.学习方法:项目多并非一蹴而就,靠的是不断积累:边"打仗"边学习边做项目,在做项目的过程中不断提升自己:找到短板进行补充,给自己一定成就感:实践与理论同样重要,要注意结合,例如算 ...

  8. 狂肝10个月手搓GPU,他们在《我的世界》里面玩《我的世界》

    梦晨 衡宇 萧箫 发自 凹非寺 量子位 | 公众号 QbitAI 自从有人在<我的世界>里用红石电路造出CPU,就流传着一个梗: 总有一天,这帮红石佬能在我的世界里玩上我的世界. 这一天, ...

  9. 07 | 卷积神经网络:给你的模型一双可以看到世界的眼睛

    欢迎来到深度学习的 07 讲,上一讲我说到了线性回归模型,它可以帮助我们解决房价预测等回归.拟合的问题,我们也可以对回归方程 f(x)输出加一个 Sigmoid 函数,使其也能应用在分类问题上. 但现 ...

最新文章

  1. spring boot: GlobalDefaultExceptionHandler方法内的友好错误提示,全局异常捕获
  2. java 线程的基本概念_Java多线程——多线程的基本概念和使用
  3. pytorch每次迭代训练前都重新对数据集进行采样形成平衡数据集
  4. php抽奖概率算法(刮刮卡,大转盘)
  5. 比较全的 Java8 9 lambda 应用
  6. android listview 自适应列宽_Android 开发技术周报 Issue#272
  7. python如何创建txt_如何通过读取.txt文件为每个键创建包含多个“列表”的Python字典?...
  8. Haskell生成数字的LED字符形式
  9. VC无进程木马下载器源码
  10. 【NLP】⚠️学不会打我! 半小时学会基本操作 2⚠️ 关键词
  11. 【pytest】之parameterize()参数化,实现测试方法数据化
  12. 【软件工程】实验九 建立动态模型--自行车租赁管理系统
  13. PHP易联云打印机实现打印小票
  14. 从同花顺获取涨停数据,视图化分析优质板,方便投资。
  15. 10.高光反射Blinn
  16. 【C++】Dijkstra算法
  17. 用c语言绘制数学函数图像,用c语言画数学函数图像.DOC
  18. Sourcetree安装详细(最新版本)
  19. SLAM总结(三)-传感器之各传感器特性
  20. 牛客SQL 大厂面试真题 某滴打车 6套代码及解析

热门文章

  1. 怎样调整计算机视角,迷你世界电脑版怎么调整视角 | 手游网游页游攻略大全
  2. S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则
  3. 数据结构与算法笔记:图搜索之DFS详解
  4. 远程ubuntu桌面_如何在Ubuntu上设置远程桌面
  5. shell命令 ffmpeg 批量提取视频的音频文件
  6. 还记得那些老国手吗? 07
  7. win8虚拟机_VMware 15虚拟机VM软件安装教程
  8. 数仓工具—Hive源码之SQL解析Antlr入门(7)
  9. BTC EmbeddedPlatform安装手记
  10. vuex 中出现[vuex] module namespace not found in mapActions(): money找不到的报错