0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

约翰·卡马克:学习神经网络这一周

zhKF_jqr_AI 来源:未知 作者:邓佳佳 2018-03-21 16:54 次阅读

熟悉电子游戏的读者也许听说过约翰·卡马克(John Carmack),在游戏领域,这个名字称得上是偶像级别的存在:3D引擎之父、第一人称射击游戏教父、电脑怪才……和那个时代的科技大牛一样,他自学成才,考上名校,继而辍学入职,投身游戏软件开发。他是个兼具数学家和哲学家气质的程序员,也是个只想写出好代码的纯粹的天才。那么,面对汹涌而来的人工智能浪潮,这位老一辈的程序员会有什么看法呢?

经历了一周努力学习,近日,约翰·卡马克在他的Facebook上发表了一篇名为1-week experience learning neural networks from scratch的学习心得,引起了网友的广泛关注,以下是论智编译的原文

隔了这么多年后,我终于找了一个远离工作事务纷扰的角落,捡起编程,以一个隐居者的心态学习了一周。在过去的几年里,我的妻子一直慷慨地提供给我这样的环境,但我始终无法从工作中脱身,连休假期间都不得安宁。

而现在,随着我在Oculuss中工作进展的变化,我想从头开始用C++编写一些神经网络实现。我计划挑选的操作系统是标准、准确的OpenBSD,有人说我的选择太随意了,可事实证明它确实没问题。

说实在的,虽然我一直很欣赏OpenBSD的想法——这是一个相对简单同时又颇具见地的操作系统,它目标精准,重视程式码的品质和工艺,但之前我并没有用过它。Linux什么都好,可惜的是这些优点它都没有。

这倒也不是说我是个UNIX geek。我最喜欢的还是Windows的Visual Studio,所以其实我完全可以回避这些问题。我只是单纯觉得在老式UNIX风格下进行长达一周的沉浸式工作会很有趣,即使进度会慢一些。这是复古计算的一次冒险——是fvwm & vi,而不是vim,是BSD vi。

而且我并没有真正探索完整个系统,因为我把95%的时间都花在基础的 vi/make/gdb 操作上了。我很喜欢那些实用的帮助手册页面,虽然一直在摸索自己能在这个系统里做什么,但我实在不想上网直接搜。试想一下,我是在查阅30几年前的老东西,如Tektronix terminal的手册,这简直不能更有趣。

有一点让我比较惊讶,就是OpenBSD对C++的支持有点烂。G++不支持C++11,LLVM C++也不能很好地和gdb配合使用。我做gdb时系统崩了几次,我怀疑是C++导致的。当然,你不用跟我说它可以升级,我就想用最基础的操作系统。

现在回过头来看,我应该是完全复古了,而且写的东西完全符合ANSI C标准。和许多老程序员一样,有几天我会忍不住反思:也许C++并没有我们想得那么好……虽然我还喜欢很多其他的东西,但用普通的C语言写个小项目还难不倒我。当然,如果还有下次的话,我会试试Emacs,这是另一个我没怎么接触过的领域。

在这之前,我其实已经对大多数机器学习算法有了成熟的了解,而且也做过一些线性分类器和决策树之类的工作。但出于某些原因,我还没碰过神经网络,这在某种程度上可能是因为深度学习太时髦了,导致我对它持保守意见,或许也有一些反思性的偏见。我还不能接受“把所有东西丢进神经网络里,然后让它自己整理”这种套路。

而本着复古主义精神,我打印了几篇Yann LeCun的旧论文,然后脱机工作,假装自己正身处某地的山间小屋,但现实是——我还是偷偷在YouTube上看了不少斯坦福CS231N的视频,并从中学到了很多东西。我一般很少看这种演讲视频,会觉得有点浪费时间,但这样“见风使舵”的感觉也不赖。

我其实不认为自己对神经网络有什么独特的想法和建议,但就个人体验而言,这是高效的一周,因为我把书本上的知识固化成了真实经验。我的实践模式也很常规:先用hacky代码写一版,再根据视频教程重写一个全新的、整洁的版本,所以两者可以交叉检查,不断优化。

我也曾在反向传播上反复跌倒了好几次,最后得出的经验是比较数值差异非常重要!但很有趣的一点是,即使每个部分好像都错得离谱,神经网络似乎还是能正常训练的——甚至只要大多数时候符号是正确的,它就能不断进步。

对于最终得到的多层神经网络代码,我是很满意的,也产生了未来继续完善的想法。是的,对于这类非常严肃的问题,我一般会直接用已有的第三方库,但在过去的一周内,很多时候我会自己写单独的.cpp文件和.h文件进行编译,这也很方便。

现在我的CNN代码还需要优化,我大概会花几天时间做出一个干净、灵活的实现。之前我把没加进卷积的初始神经网络放到MNIST上测试时,发现它居然比LeCun论文里的结果更好——单个包含100个节点的隐藏层在测试集上的error是2%,论文里的网络更广更深,但它的error有3%。这个发现有点出乎我的意料,最后我总结的原因是激活函数——ReLU和Softmax。

如果要说这一周的学习有什么最精彩的心得,那应该就是神经网络非常简单,它只需寥寥几行代码就能实现突破性的进步。我觉得这和图形学中的光线追踪有异曲同工之妙,只要我们有足够的数据、时间和耐心,追踪与光学表面发生交互作用的光线,得到光线经过路径的物理模型,我们就能生成最先进的图像。

同样的,通过探索一系列训练参数,我也对 overtraining/generalization/regularization 有了更深的理解。回家的前一夜,我开心地调起了超参数。为了保持专注,“训练”肯定比“编译”更糟糕!

小结

读了约翰·卡马克的心得,不知各位读者获得了怎样的体验。作为一名成功的资深程序员,卡马克一直以来对编程的严苛要求是大家有目共睹的,而他这次抽出一周时间,以这么复古的形式学习神经网络,这样的娱乐精神堪称业界清流。这项“新技能”可能不会给他带来世俗的快乐,但在代码中创造世界的乐趣使他感到幸福,卡马克还是那个卡马克。

除此之外,许多国外读者又对深度学习的理论基础产生了担忧。正如文中所说的:“即使每个部分好像都错得离谱,神经网络还是能正常训练——甚至只要大多数时候符号是正确的,它还能不断进步”。就梯度下降而言,理论上我们想要的是不断走“下坡路”,走“上坡路”的结果注定是不理想的。但从长远来看,如果两者都能提高模型预测的结果,那走下坡的意义又在哪里?

这个领域内的所有人都在追求各种进步,担当他们被问及为什么,大多数答案只是“just work”,如果只看结果,我们又该怎么判断哪些是真正重要的东西?也许对于什么是“进步”,我们也需要重新设定一个更严格的标准。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4764

    浏览量

    100548
  • 电子游戏
    +关注

    关注

    0

    文章

    39

    浏览量

    9898
  • 程序员
    +关注

    关注

    4

    文章

    950

    浏览量

    29763

原文标题:约翰·卡马克(John Carmack):学习神经网络这一周

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    卷积神经网络与传统神经网络的比较

    在深度学习领域,神经网络模型被广泛应用于各种任务,如图像识别、自然语言处理和游戏智能等。其中,卷积神经网络(CNNs)和传统神经网络是两种常见的模型。 1. 结构差异 1.1 传统
    的头像 发表于 11-15 14:53 194次阅读

    神经网络辨识模型具有什么特点

    神经网络辨识模型是种基于人工神经网络的系统辨识方法,它具有以下特点: 非线性映射能力 :神经网络能够处理非线性问题,可以很好地拟合复杂的非线性系统。 泛化能力 :
    的头像 发表于 07-11 11:12 408次阅读

    BP神经网络学习机制

    BP神经网络(Backpropagation Neural Network),即反向传播神经网络,是种基于梯度下降算法的多层前馈神经网络,其学习
    的头像 发表于 07-10 15:49 459次阅读

    BP神经网络和卷积神经网络的关系

    BP神经网络(Backpropagation Neural Network)和卷积神经网络(Convolutional Neural Network,简称CNN)是两种在人工智能和机器学习领域
    的头像 发表于 07-10 15:24 1235次阅读

    BP神经网络和人工神经网络的区别

    BP神经网络和人工神经网络(Artificial Neural Networks,简称ANNs)之间的关系与区别,是神经网络领域中个基础且重要的话题。本文将从定义、结构、算法、应用及
    的头像 发表于 07-10 15:20 856次阅读

    rnn是递归神经网络还是循环神经网络

    RNN(Recurrent Neural Network)是循环神经网络,而非递归神经网络。循环神经网络种具有时间序列特性的神经网络,能
    的头像 发表于 07-05 09:52 491次阅读

    递归神经网络是循环神经网络

    递归神经网络(Recurrent Neural Network,简称RNN)和循环神经网络(Recurrent Neural Network,简称RNN)实际上是同个概念,只是不同的翻译方式
    的头像 发表于 07-04 14:54 643次阅读

    循环神经网络和卷积神经网络的区别

    循环神经网络(Recurrent Neural Network,RNN)和卷积神经网络(Convolutional Neural Network,CNN)是深度学习领域中两种非常重要的神经网络
    的头像 发表于 07-04 14:24 1141次阅读

    深度神经网络与基本神经网络的区别

    在探讨深度神经网络(Deep Neural Networks, DNNs)与基本神经网络(通常指传统神经网络或前向神经网络)的区别时,我们需要从多个维度进行深入分析。这些维度包括
    的头像 发表于 07-04 13:20 688次阅读

    卷积神经网络与循环神经网络的区别

    在深度学习领域,卷积神经网络(Convolutional Neural Networks, CNN)和循环神经网络(Recurrent Neural Networks, RNN)是两种极其重要
    的头像 发表于 07-03 16:12 2751次阅读

    如何使用神经网络进行建模和预测

    神经网络种强大的机器学习技术,可以用于建模和预测变量之间的关系。 神经网络的基本概念 神经网络
    的头像 发表于 07-03 10:23 678次阅读

    卷积神经网络训练的是什么

    卷积神经网络(Convolutional Neural Networks,简称CNN)是种深度学习模型,广泛应用于图像识别、视频分析、自然语言处理等领域。本文将详细介绍卷积神经网络
    的头像 发表于 07-03 09:15 352次阅读

    卷积神经网络和bp神经网络的区别

    化能力。随着深度学习技术的不断发展,神经网络已经成为人工智能领域的重要技术之。卷积神经网络和BP神经
    的头像 发表于 07-02 14:24 2975次阅读

    神经网络架构有哪些

    神经网络架构是机器学习领域中的核心组成部分,它们模仿了生物神经网络的运作方式,通过复杂的网络结构实现信息的处理、存储和传递。随着深度学习技术
    的头像 发表于 07-01 14:16 618次阅读

    详解深度学习神经网络与卷积神经网络的应用

    在如今的网络时代,错综复杂的大数据和网络环境,让传统信息处理理论、人工智能与人工神经网络都面临巨大的挑战。近些年,深度学习逐渐走进人们的视线,通过深度
    的头像 发表于 01-11 10:51 1918次阅读
    详解深度<b class='flag-5'>学习</b>、<b class='flag-5'>神经网络</b>与卷积<b class='flag-5'>神经网络</b>的应用