原文:
www.kdnuggets.com/2018/04/high-level-apis-dumbing-down-machine-learning.html
Google 的研究科学家 David Ha(@hardmaru),最近(2018 年 2 月 9 日)发推道:
从头实现全连接网络、卷积网络、RNN、反向传播和 SGD(使用纯 Python、numpy,甚至是 JS)并在小数据集上训练这些模型,是学习神经网络如何工作的一个极好的方法。在跳入框架之前,花时间获得宝贵的直觉。
t.co/biP02iWsjd
— hardmaru (@hardmaru) 2018 年 2 月 9 日
这引发了 Keras 的创造者 François Chollet(@fchollet)的一系列回应推文,综合考虑这些回应,呈现出不同的观点。以下是几条突出的回应:
研究生在 2000 年就知道如何用 C 语言实现神经网络。那时他们对神经网络的直觉并不强。到 2018 年,一个高中生玩转神经网络框架,可以在几天内建立更强的神经网络理解——这全靠更好的应用背景。
— François Chollet (@fchollet) 2018 年 3 月 7 日
下一代在抽象层次上不断进步是一件好事,在我看来,让学生从头开始并不是一种好的学习策略。
— François Chollet (@fchollet) 2018 年 3 月 7 日
一些其他受人尊敬的机器学习研究人员和工程师也参与了讨论,包括Jeremy Howard和Emmanuel Ameisen等(值得一提的是,Ha 的原始推文实际上是对Denny Britz 的推文的回应)。双方在这种“争论”的“观点”上都提出了很好的观点。
高级机器学习 API——特别是Keras、TensorFlow Layers、Scikit Flow、TensorFlow Estimators等——将抽象提升到一个新的高度。与之相比,Theano 和普通的 TensorFlow 显得低层次得多。我们甚至可以进一步扩大范围,考虑像 Scikit-learn 这样的通用库;不久前,拥有一个包含各种有用实现的全方位算法工具包,并且提供一致的 API,在同一平台下,这几乎是不可想象的,更不用说它便利的抽象层次了。
使用这些库来实现机器学习模型变得更容易。然而,Scikit-learn 的标准 fit/predict API 或用 Keras 堆叠序列层的简单性是否将抽象层级提升得过高,以至于新手无法真正理解算法的基础理论?或者这些工具是否让从业者免于编写他们可能(或可能不会)完全理解的功能?
关于技术抽象的讨论同样适用于编程语言、机器学习,甚至更广泛的抽象概念。的确,汇编语言如今不是编程人员的首选武器,程序员们通常使用更高层次的抽象工具,并且什么构成高级语言的概念随着时间不断演变。
然而,我认为,自己在没有计算机科学基础的情况下随意编写 Javascript 的情况与具有扎实计算机科学基础的研究生(或者没有正式计算机科学教育但对其基础知识有牢固把握的人)使用相同语言实现他们的想法是不同的。我不认为这是 Chollet 提出的相同观点(他从未说过没有神经网络理解的人能够有效地编码神经网络),但他几乎肯定是在推动抽象层级的稳步上升作为更有效的学习体验。
虽然“最佳”学习方法,尤其是它们的不同细微差别,永远无法完全普遍适用,并且在一定程度上依赖于学习者,但似乎合理的是,将理论和实践相结合的渐进混合方法,不能被排除在作为学习神经网络及其实现的首选方法之外。同样,细节很重要,但保持理论不干扰实践以及避免理论前置的课程阻碍学习者早期看到(和做)深度学习的动机,似乎是有利的。这种方法似乎类似于 fast.ai 采取的方法,这也可能确认像 Keras 这样的项目在早期作为尝试的有效性,以及在你建立了一些更强的理解后如何完成任务。
仅仅是一个人的观点……你怎么看?
相关:
-
比较深度学习框架:罗塞塔石碑方法
-
今天我在午休时间用 Keras 构建了一个神经网络
-
谷歌 Tensorflow 目标检测 API 是实现图像识别的最简单方法吗?
1. 谷歌网络安全证书 - 快速进入网络安全职业轨道。
2. 谷歌数据分析专业证书 - 提升你的数据分析水平
3. 谷歌 IT 支持专业证书 - 支持你的组织进行 IT 工作