作为一名 华山派新弟子 深度学习新手,该先学会用框架快速搭出神经网络,用到实际问题中去,还是该先练习用Python基本徒手搭建模型,在小数据集上训练,了解它们的工作原理?
谷歌的两位研究员最近在Twitter上展开了一场旷日持久的争论,两派主要代表都是圈子里大名鼎鼎颇有建树的人物:
“气宗”代表 谷歌大脑的研究员David Ha(@hardmaru),SketchRNN的爸爸。
“剑宗”代表 谷歌研究员François Chollet(@fchollet),Keras的爸爸。
注:“气宗”“剑宗”无任何道德、派系等层面的影射,不要多心剑气之争
这两位所争论的问题,正是 内力和剑法哪个更重要 深度学习新手的入门路径问题:了解模型的内部原理,和快速实现模型解决问题,哪个更重要呢?
量子位越洋围观了这场辩论,觉得他们的观点很值得搬回来让大家了解、思考一下。
在David Ha看来,想搞好深度学习,当然要先打基础,“练气”很重要。他在一个月前抛出了这样一个观点:
从零开始(用纯Python、numpy、甚至JS)实现全连接网络、卷积神经网络、RNN、反向传播、SGD,然后用小训练集来训练这些模型是一种学习神经网络如何工作的好方法。在跳到框架上之前,应该花时间从这里收获宝贵的直觉力。
新手入门,难道不该用最简单的高层框架吗?Keras作者Chollet就更支持初学者们先“练剑”。他对David的反驳是这样的:
实现神经网络能教你怎样实现神经网络,让你从算法上理解它们的工作原理。
但这不能教会你它们是做什么的,或者说能否实现哪些功能。要学习这些,你应该把它们应用到一系列真实问题上去(而不是XOR、MNIST)。
究竟谁更有道理?两位过招七八条Twitter,来详细论证自己的观点,看完再选适合你的方法也不迟。
以气驭剑
徒手搭模型,拿MNIST这样的小数据集、甚至XOR来琢磨其中奥妙,显然不是速成之法。那么,花这么多时间“打坐练气”的意义何在?
追求的,当然是一个以气驭剑。
David Ha说,深度学习框架都是些样板化的模型,入门就用框架,会限制眼界,让你泯然众人。
从零开始徒手搭模型就不一样了,对于那些跨行业入门深度学习的人来说,有机会从自己的独特视角,看到大多数人忽略的东西。
“气宗”不止David一人。李飞飞的得意门生、现任特斯拉AI总监的Andrej Karpathy也表达过类似观点。
他在斯坦福CS231n课上就要求学生将神经网络的向前和向后传递都用numpy实现一遍。学生当然有意见:拿个框架就能自动算的东西,我为什么要徒手来搭?
最重要的原因是,徒手将向前和向后传递都实现一遍才能真正理解其中的工作原理。如果单纯依赖框架的自动计算,在反向传播出现问题时就无法应对。
Karpathy为此专门写过博客一篇: https://medium.com/@karpathy/yes-you-should-understand-backprop-e2f06eab496b
有些知行合一的实践者,说这样学习很有收获:
比如说Oculus VR的CTO John Carmack也在琢磨深度学习,前不久,不擅长休假的他花了一周时间专门休假闭关写代码 (So…量子位休假应该闭关写稿
本文来自量子位,创业家系授权发布,略经编辑修改,版权归作者所有,内容仅代表作者独立观点。[ 下载创业家APP,读懂中国最赚钱的7000种生意 ]
领取专属 10元无门槛券
私享最新 技术干货