软件开发师:关于机器学习,你学反了……

全文共4221字,预计学习时长13分钟

软件开发师:关于机器学习,你学反了……

图源:Unsplash

随着越来越多的公司采用人工智能技术,机器学习工程师-即开发人工智能(AI)机器和能够学习并应用知识的高级程序员的需求量增大。

这些专业人员需要进行编程以应对复杂的数据集/算法,进而训练人工智能机器。

越来越多的软件工程师开始转型人工智能,而大多数人都是从头开始学的机器学习。

但是,相比于新框架机器学习更难掌握。

作为一个高效的实践者,你需要充分理解该领域的理论、广泛掌握当前最尖端的知识,并且有能力以不确定的方式塑造问题。

网上很多指南只会简单地教你如何在一个策划好的数据集上训练可以立即使用的模型,并达到一个不错的准确度,然后就结束了。事实上,要成为一个优秀的机器学习工程师必须掌握更广泛的技能。

那么,关于人工智能,有远见的软件工程师应该学习哪些内容呢?

软件开发师:关于机器学习,你学反了……

图源:Unsplash

笔者还记得自己第一次学习编码是在中学,父亲是一名程序员,他打开一个文本编辑器,在屏幕上输入了以下代码:

  1. public class HelloWorld {
  2. public static void main(String[]args) {
  3. System.out.println("HelloWorld.");
  4. }
  5. }

“这是干什么用的?”我问道。

“这会打印出‘Hello World’。”父亲回答。

“public是什么?Class是什么?static是什么?……”

“忽略这些词。这些只是样板文件。”

但是笔者被那些看不懂的所谓样板文件吓坏了,所以开始学习这些关键词的意思。结果发现,这复杂又无聊,几乎扼杀了笔者这个年轻程序员的远大抱负。

如今学习软件开发比笔者高中时候要容易得多,主要是因为有了像codecademy.com这样的网站,建立基本开发环境也更加容易,以及对像Python和Javascript这样高级、解释性语言的全面教授。

从对编码一无所知到在浏览器中编写下第一条条件语句,只需要几分钟即可。没有杂乱的环境设置、安装、编译器或样板需要处理——可以直接进入有趣的部分。

这正是最好的学习方式。首先,要学习高水平的核心概念,只有这样,才能欣赏和理解背后的细节以及它们为什么重要。先学习Python,然后是C语言,再然后是汇编语言,而不是反过来。

然而不幸的是,如今,很多人开始学习机器学习时和笔者学习Java时有着同样的经历。先学习最低级的细节——分层架构、反向传播、丢弃法(Dropout)等等——这让人以为机器学习是非常复杂的,也许应该先上一堂线性代数课,然后放弃。

这很遗憾,因为在不久的将来,大多数用机器学习的软件开发师是不需要去思考,也不需要知道任何低级的概念。正如(通常)不需要汇编代码,也不需要实现TCP栈或加密库一样,程序员只是将机器学习作为工具,而将细节留给一小部分专家去解决。在这一点上——机器学习“民主化”后——开发人员将不需要理解实现细节,而需要掌握应用这些智能算法的最佳实践。

软件开发师:关于机器学习,你学反了……

不要像这样

软件开发师:关于机器学习,你学反了……

现在进展到的阶段

如今,如果想建立一个神经网络来识别照片中猫的脸,或者预测下一条推特是否会走红,那么可能需要开始学习 TensorFlow或者PyTorch了。这些基于Python的深度学习库是当今设计神经网络最流行的工具,而它们的出现都还不足5年。

在其短暂的生命周期中,TensorFlow已经成为一种比五年前更加方便用户的方式了。在早期,想要成为一名合格的TensorFlow程序员,不仅要了解机器学习,还要了解分布式计算和延迟图形架构。即使是写一份简单的书面声明也困难重重。

软件开发师:关于机器学习,你学反了……

Keras/TensorFlow/PyTorch受欢迎程度细细分, 由Quora提供

就在今年早秋,TensorFlow 2.0正式发布,新框架对开发人员更加友好。下面是TensorFlow 2.0的Hello-World式模型:

  1. model = tf.keras.models.Sequential([
  2. tf.keras.layers.Dense(512, activation='relu'),
  3. tf.keras.layers.Dropout(0.2),
  4. tf.keras.layers.Dense(32, activation='relu'),
  5. tf.keras.layers.Dense(1, activation='softmax')
  6. ])
  7. model.compile(optimizer='adam',
  8. loss='sparse_categorical_crossentropy'),
  9. metrics=['accuracy']))
  10. model.fit(x_train, y_train, epochs=5)
  11. model.evaluate(x_test, y_test)
  12. viewrawhello_world_keras.py hosted with ❤ by GitHub

如果以前设计过神经网络,那上面的代码是简单易读的。但是如果没有设计过神经网络或者正处于学习阶段,可能会产生一些疑问。

比如,丢弃法(Dropout)是什么?这些密集的层(layers)是什么,需要多少,又该放在什么位置?sparse_categorical_crossentropy是什么?TensorFlow 2.0消除了一些构建模型的阻碍,但并没有抽象出设计那些模型的实际架构。

软件开发师:关于机器学习,你学反了……

发展方向

那么,操作简便的机器学习工具未来会是什么样子呢?从谷歌、亚马逊到微软、苹果,每个人都在探索这个问题的答案。此外——免责声明——这也是笔者作为谷歌工程师一直在思考的问题。

首先,人们将会看到更多的开发人员使用预先训练好的模型来完成常见任务,也就是说,不需要收集自己的数据或训练自己的神经网络,而是可以使用谷歌/亚马逊/微软的已有模型。许多云提供商已经这样做了。例如,通过点击谷歌云REST终端,就可以使用预先训练的神经网络来:

· 从图像中提取文本

· 标记照片中的常见对象

· 将语音转换为文本

· 语际翻译

· 识别文本的情感

· 其他

也可以使用谷歌的ML Kit或苹果的Core ML等工具,在设备上的移动应用程序中,运行预先训练好的模型。

坦白说,与使用TensorFlow构建的模型相比,使用预训练的模型优势在于(除了易用性之外),谷歌研究人员在整个数据网络和大量GPUs 和TPUs上训练神经网络模型,会比程序员自己构建的更精确。

使用预先训练的模型的缺点是,它们解决的是一般性问题,比如在图像中识别猫和狗,而不是特定领域的问题,比如识别装配线上某个部件的缺陷。

但是,即使在为特定领域的任务训练自定义模型时,这些工具也正在变得更加易于使用。

软件开发师:关于机器学习,你学反了……

可教机器的屏幕截图,这是一个在浏览器中建立视觉、手势和语音模型的工具。

谷歌的免费 可教机器网站允许用户使用拖拽操作在浏览器中收集数据和训练模型。今年早些时候,麻省理工学院发布了一个类似无代码的界面,用于构建在触摸屏设备上运行的自定义模型,该界面是为医生等非编码人员设计的。微软以及像lobe.ai这样的初创公司也提供类似的解决方案。同时,谷歌云自动机器学习是一个针对企业工作负载的自动化模型训练框架。

软件开发师:关于机器学习,你学反了……

接下来学什么

随着机器学习工具更加易于使用,希望使用这种技术(但不是成为专家)的开发人员,其技能将会发生变化。所以,如果想像韦恩-格雷茨基(Wayne-Gretsky)那样计划冰球的走向,现在应该学什么呢?

知道什么时候使用机器学习总是很难……

机器学习算法不同于标准软件的地方在于它们是概率性的。即使是一个高度精确的模型有时也会出错,这意味着对很多问题来说它不是最佳解决方案,特别是对于它本身。以基于机器学习的语音转换为文本的算法为例:当让Alexa“关掉音乐”时,她错把闹钟调到凌晨4点,这影响不大。但如果医学版的Alexa错把医生给开的药Adderall听成了Enulose,影响就大了。

理解什么时候以及如何在生产中使用模型始终是一个微妙的问题。在以下情况下尤其棘手:

1. 风险很高

2. 人力资源有限

3. 人类对预测有偏见或预测不准确

以医学影像为例。在全球范围内都缺少医生,在诊断疾病方面,机器学习模型通常比训练有素的医生更准确。但是人们会想让算法对自己是否患有癌症持最后的发言权吗?帮助法官判刑的模型也是如此。模型可能有偏见,但人也是如此。

理解什么时候使用机器学习是有意义的,如何正确地应用它不是一个容易解决的问题,但是这个问题不会很快消失。

软件开发师:关于机器学习,你学反了……

图源:Unsplash

可解释性

众所周知,机器学习模型是不透明的。这就是为什么它们有时被称为“黑匣子”。人不太可能用“神经网络告诉我的”作为唯一的证据,来说服副总裁做出重大的商业决策。另外,如果不明白为什么模型会做出这样的预测,人可能就不会意识到它在做出有偏见的决定(比如拒绝贷款给特定年龄或特定地区的人)。

正是因为这个原因,机器学习领域的许多玩家都着眼于构建“可解释的人工智能”性能——让用户更仔细地检查模型用什么性能来进行预测的工具。人们还没有将解决其作为一个行业问题进行解决,但正在取得进展。例如,在11月,谷歌推出了一套解释工具以及一种叫做模型卡的东西——一种帮助用户理解机器学习模型局限性的可视化指南。

软件开发师:关于机器学习,你学反了……

谷歌的人脸识别模型卡显示了该模型的局限性。

通过应用取得创新

有些开发人员擅长机器学习,有些开发人员擅长神经科学,但很少有人两者都擅长。几乎任何复杂的领域都是如此。未来几年,人们从机器学习中看到的最大进步可能不是来自改进的数学方法,而是来自不同专业领域的人,他们学习了足够多的机器学习并将其应用到自己的领域。例如,在医学成像中,最令人兴奋的突破——能够在扫描中发现恶性疾病——不是由新的神经网络架构取得的,而是由应用于新问题的相当标准的模型取得的。

所以,如果软件开发人员幸运地拥有额外的专业知识,那么他就已经领先了。

软件开发师:关于机器学习,你学反了……

软件开发师:关于机器学习,你学反了……

留言点赞关注

我们一起分享AI学习与发展的干货

如转载,请后台留言,遵守转载规范

相关推荐