夏乙 发自 凹非寺 作为一名(华山派新弟子)深度学习新手,该先学会用框架快速搭出神经网络,用到实际问题中去,还是该先练习用Python基本徒手搭建模型,在小数据集上训练,了解它们的工作原理? 谷歌的两位研究员最近在Twitter上展开了一场旷日持久的争论,两派主要代表都是圈子里大名鼎鼎颇有建树的人物: “气宗”代表 谷歌大脑的研究员David Ha(@hardmaru),SketchRNN的爸爸。 “剑宗”代表 谷歌研究员François Chollet(@fchollet),Keras的爸爸。 注: “气宗”“剑宗”无任何道德、派系等层面的影射,不要多心 剑气之争这两位所争论的问题,正是 内力和剑法哪个更重要 深度学习新手的入门路径问题:了解模型的内部原理,和快速实现模型解决问题,哪个更重要呢? 量子位越洋围观了这场辩论,觉得他们的观点很值得搬回来让大家了解、思考一下。 在David Ha看来,想搞好深度学习,当然要先打基础,“练气”很重要。他在一个月前抛出了这样一个观点:
新手入门,难道不该用最简单的高层框架吗?Keras作者Chollet就更支持初学者们先“练剑”。他对David的反驳是这样的:
>
究竟谁更有道理?两位过招七八条Twitter,来详细论证自己的观点,看完再选适合你的方法也不迟。 以气驭剑徒手搭模型,拿MNIST这样的小数据集、甚至XOR来琢磨其中奥妙,显然不是速成之法。那么,花这么多时间“打坐练气”的意义何在? 追求的,当然是一个以气驭剑。 David Ha说,深度学习框架都是些样板化的模型,入门就用框架,会限制眼界,让你泯然众人。 从零开始徒手搭模型就不一样了,对于那些跨行业入门深度学习的人来说,有机会从自己的独特视角,看到大多数人忽略的东西。 “气宗”不止David一人。李飞飞的得意门生、现任特斯拉AI总监的Andrej Karpathy也表达过类似观点。 他在斯坦福CS231n课上就要求学生将神经网络的向前和向后传递都用numpy实现一遍。学生当然有意见:拿个框架就能自动算的东西,我为什么要徒手来搭? 最重要的原因是,徒手将向前和向后传递都实现一遍才能真正理解其中的工作原理。如果单纯依赖框架的自动计算,在反向传播出现问题时就无法应对。 Karpathy为此专门写过博客一篇: https:///@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上参与到这场争论中来的路人,支持哪一方的都有,当然,最多的观点是“都重要,要兼顾”。 不知道国内的小伙伴怎么看? 祝气宗的徒儿剑法高,剑宗的师叔内力强。 — 完 — 诚挚招聘 |
|
来自: 遁地的蜘猪侠 > 《Python学习》