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

    文章

    4562

    浏览量

    98643
  • 电子游戏
    +关注

    关注

    0

    文章

    39

    浏览量

    9793
  • 程序员
    +关注

    关注

    4

    文章

    931

    浏览量

    29565

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    卷积神经网络的优点

    卷积神经网络的优点  卷积神经网络(Convolutional Neural Network,CNN)是一种基于深度学习神经网络模型,在图像识别、语音识别、自然语言处理等领域有着广泛
    的头像 发表于 12-07 15:37 2911次阅读

    深度学习神经网络架构解析

    感知器是所有神经网络中最基本的,也是更复杂的神经网络的基本组成部分。它只连接一个输入神经元和一个输出神经元。
    发表于 08-31 16:55 810次阅读
    深度<b class='flag-5'>学习</b>的<b class='flag-5'>神经网络</b>架构解析

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

    人工神经网络和bp神经网络的区别  人工神经网络(Artificial Neural Network, ANN)是一种模仿人脑神经元网络结构和功能的计算模型,也被称为
    的头像 发表于 08-22 16:45 3405次阅读

    卷积神经网络和深度神经网络的优缺点 卷积神经网络和深度神经网络的区别

    深度神经网络是一种基于神经网络的机器学习算法,其主要特点是由多层神经元构成,可以根据数据自动调整神经元之间的权重,从而实现对大规模数据进行预
    发表于 08-21 17:07 2211次阅读

    卷积神经网络是什么?卷积神经网络的工作原理和应用

      卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习神经网络,主要用于图像和视频的识别、分类和预测,是计算机视觉领域中应用最广泛的深度学习
    发表于 08-21 17:03 1168次阅读

    卷积神经网络的介绍 什么是卷积神经网络算法

    的深度学习算法。CNN模型最早被提出是为了处理图像,其模型结构中包含卷积层、池化层和全连接层等关键技术,经过多个卷积层和池化层的处理,CNN可以提取出图像中的特征信息,从而对图像进行分类。 一、卷积神经网络算法 卷积神经网络算法
    的头像 发表于 08-21 16:49 1406次阅读

    卷积神经网络的基本原理 卷积神经网络发展 卷积神经网络三大特点

    卷积神经网络的基本原理 卷积神经网络发展历程 卷积神经网络三大特点  卷积神经网络的基本原理 卷积神经网络(Convolutional Ne
    的头像 发表于 08-21 16:49 1414次阅读

    卷积神经网络三大特点

    卷积神经网络三大特点  卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习模型,其具有三大特点:局部感知、参数共享和下采样。 一、局部感知 卷积神经
    的头像 发表于 08-21 16:49 3450次阅读

    卷积神经网络概述 卷积神经网络的特点 cnn卷积神经网络的优点

    卷积神经网络概述 卷积神经网络的特点 cnn卷积神经网络的优点  卷积神经网络(Convolutional neural network,CNN)是一种基于深度
    的头像 发表于 08-21 16:41 1909次阅读

    卷积神经网络的应用 卷积神经网络通常用来处理什么

    的前馈神经网络,卷积神经网络广泛用于图像识别、自然语言处理、视频处理等方面。本文将对卷积神经网络的应用进行详尽、详实、细致的介绍,以及卷积神经网络通常用于处理哪些任务。 一、卷积
    的头像 发表于 08-21 16:41 3885次阅读

    卷积神经网络原理:卷积神经网络模型和卷积神经网络算法

    卷积神经网络原理:卷积神经网络模型和卷积神经网络算法 卷积神经网络(Convolutional Neural Network,CNN)是一种基于深度
    的头像 发表于 08-17 16:30 887次阅读

    什么是神经网络?为什么说神经网络很重要?神经网络如何工作?

    神经网络是一个具有相连节点层的计算模型,其分层结构与大脑中的神经元网络结构相似。神经网络可通过数据进行学习,因此,可训练其识别模式、对数据分类和预测未来事件。
    的头像 发表于 07-26 18:28 1871次阅读
    什么是<b class='flag-5'>神经网络</b>?为什么说<b class='flag-5'>神经网络</b>很重要?<b class='flag-5'>神经网络</b>如何工作?

    浅析三种主流深度神经网络

    来源:青榴实验室 1、引子 深度神经网络(DNNs)最近在图像分类或语音识别等复杂机器学习任务中表现出的优异性能令人印象深刻。 在本文中,我们将了解深度神经网络的基础知识和三个最流行神经网络
    的头像 发表于 05-15 14:20 600次阅读
    浅析三种主流深度<b class='flag-5'>神经网络</b>

    三个最流行神经网络

    在本文中,我们将了解深度神经网络的基础知识和三个最流行神经网络:多层神经网络(MLP),卷积神经网络(CNN)和递归神经网络(RNN)。
    发表于 05-15 14:19 1171次阅读
    三个最流行<b class='flag-5'>神经网络</b>