深度学习究竟怎么入门?两位Google大神掀起剑气之争

夏乙 发自 凹非寺 量子位 出品 | 公众号 QbitAI

作为一名 华山派新弟子 深度学习新手,该先学会用框架快速搭出神经网络,用到实际问题中去,还是该先练习用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…量子位休假应该闭关写稿?)。

身为资深高阶码农,Carmack没装TensorFlow没用PyTorch,而是用C++从零开始写了一些神经网络实现,包括其中的反向传播,然后用MNIST做了一些实验。

他说经过这一番折腾,他对过度训练、泛化、正则化有了更好的深层理解。

BTW 插播一个推荐,Carmack作为一个不爱看视频课程的人,高度赞扬了斯坦福CS231n公开课。

还有更极致的。另一位资深码农Thomas Lahore说他当年入门机器学习时,故意先什么文献、课程都不看,自己思考了几个月,这段经历对他来说非常宝贵。

他们,都是David心目中基础扎实的好学生。David特别强调对背后原理的理解,他说这不仅有利于更快消灭bug,在现有范式之外进行延展解决新问题的时候也更有信心。

更重要的是,“(基本徒手搭个神经网络)真没那么难,又不是让你写个像Keras那样深思熟虑的框架出来。:)”

一招制敌

对于上面这种学习方法,Fast.ai创始人Jeremy Howard路过参与到话题中来,吐槽了“气宗”的最强大势力:高校里的计算机专业。

他说,计算机学位教育非要让人先从底层开始构建一堆东西,然后才能学习那些抽象的东西,结果他有很多朋友大一没读完就退学了。

枯燥,确实是徒手搭建神经网络的一大缺陷。

不过,Chollet对这种方法的反对是出于别的原因。这位大佬能造个Keras出来,当然不至于认为实现神经网络太难或者太枯燥,他觉得这种方法,实在不够学以致用。

招式内部原理分析得再清楚,不知道该用在哪儿,也是白搭。

Chollet举了很多例子来说明这一观点:

练习手写奇异值分解(SVD)有什么用?写完还是不知道SVD能干什么,把它用到各种数据集上看结果,才能获得直观的印象。

研究生们2000年就会用C语言写神经网络了,可是他们对神经网络的理解,可能还不如一名只会鼓捣框架的2018年高中生,毕竟现在有更多的应用环境。

现在很多人从没动手实现过,也对神经网络挺熟练的,知道这个东西如何工作。10年后,这样的人可能会占90%,就像现在的软件工程师了解操作系统,但基本都没开发过操作一样。

还来了一段现身说法:

“我2009年念书的时候,第一次用C语言写了神经网络,从中学到的C比神经网络多。后来又过了好几年我才开始理解神经网络能干什么,为什么有用。关键在于更好的工具+现实世界数据集上的应用。”

总之,时代在进步,下一代学的东西就是更抽象,不该拿老一套方法来要求学生们了。

他建议学生们去参加Kaggle竞赛,除了神经网络之外也用一用其他的机器学习模型,再通过可视化方法来探索其中的特征。

“剑招”已经打包好了。Chollet希望未来的学生们知道什么时候该出哪一招,对于内部的原理,其实不必深究。

要兼顾?

在Twitter上参与到这场争论中来的路人,支持哪一方的都有,当然,最多的观点是“都重要,要兼顾”。

不知道国内的小伙伴怎么看?

祝气宗的徒儿剑法高,剑宗的师叔内力强。

本文分享自微信公众号 - 量子位(QbitAI)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-03-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能LeadAI

TensorFlow从0到1丨第3篇:人类学习的启示

上一篇TensorFlow的内核基础介绍了TF Core中的基本构造块,在介绍其强大的API之前,我们需要先明了TF所要解决的核心问题:机器学习。 什么是机器学...

44340
来自专栏大数据文摘

机器也有品味:谷歌最新算法让街景图具有专业摄影师审美

18620
来自专栏量子位

能把晦涩难懂的研究工作讲清楚,Distill就奖你10000美刀

Root 编译整理 量子位 出品 | 公众号 QbitAI 在机器学习研究圈里,大家可能都有这样的赶脚: 大部分从事机器学习研究的人,不太擅长写作,无法清晰地呈...

34860
来自专栏人工智能头条

【无人驾驶技术系列】光学雷达(LiDAR)在无人驾驶技术中的应用

37150
来自专栏新智元

【CVPR智慧城市挑战赛】无监督交通异常检测,冠军团队技术分享

【新智元导读】“智能交通视频分析界的ImageNet竞赛”——英伟达城市挑战赛落下帷幕。新加坡松下研究院联合中科院自动化所,提出了一种双模态动静联合检测方案,在...

24200
来自专栏专知

【经典重读】统计学习那些事

!【导读】 这是杨灿博士在早年写的关于统计学习的一些见解,尤其关于Lasso与Boosting。当年我读博2011年时期间看到这篇文章,也是受益良多。作者文采很...

35830
来自专栏张红林的专栏

机器学习入门书籍简介

在AIclub看到一篇机器学习入门的文章,回想自己磕磕碰碰走过的弯路,颇有感触,因此对自己从懵懂到稍稍入门过程中看过的教程做一个简单的介绍,希望帮到后来人。

4.6K30
来自专栏玉树芝兰

文科生如何理解卷积神经网络?

不愿意看那一堆公式符号,却想知道卷积神经网络(Convolutional Neural Network)如何做图像分辨?分享一段我给自己研究生的讲解答疑视频,希...

14730
来自专栏ATYUN订阅号

研究人员利用重音训练AI,以提高模型对口音的识别

没有什么东西比不懂你口音的语音识别系统更令人沮丧。发音的语言差异使数据科学家多年来一直困扰,训练模型需要大量数据,而某些方言不像其他方言那么常见。

14220
来自专栏机器学习AI算法工程

网易云音乐歌单的推荐算法解析

网易云音乐的歌单推荐算法是怎样的呢?最近有很多人关心这个问题。调查了一些网易云音乐的重度患者,小咖带你来看一些路过大神的精辟分析。 分析一: “商品推荐”系统...

58040

扫码关注云+社区

领取腾讯云代金券