public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World.");
}
}
我问他:“这段代码干吗用的?”程序员
他答道:“它会在屏幕上打印‘Hello World’。”算法
“public 是什么?class 是什么?static 是什么?……”编程
“先不要在乎这些,它们都只是模板代码。”浏览器
但这些所谓的模板代码让我感到很疑惑,因而我开始了解这些关键字的意思。事实证实,这些复杂而无聊的东西给我年轻的编程梦想蒙上了一层阴影。网络
如今学习软件开发比我上高中时要容易得多,这要感谢像 codecademy.com 这样的网站,它们提供了基本的开发环境,倾向于教授解释型编程语言,好比 Python 和 Javascript。你能够在几分钟内从对编程一无所知变成可以写出第一条能够在浏览器上执行的条件语句。没有繁琐的环境设置、安装、编译器或样板代码——你直接进入编程最有趣的部分。架构
这是人类最好的学习方式。首先,咱们被灌输高层次的核心概念,而后开始理解具体细节。咱们先学习 Python,而后是 C 语言,而后是汇编,而不是反过来。app
不幸的是,如今不少学习 ML 的人跟我第一次接触 Java 时的状况彻底同样。他们最早被灌输全部的底层细节——分层架构、反向传播、dropout 等,而后会以为 ML 很复杂,认为须要先掌握线性代数,最后就想着要放弃。框架
这个有点遗憾,由于在不久的未来,大多数 ML 开发人员将再也不须要考虑或了解任何底层的东西,就像咱们一般不须要编写汇编代码或本身实现 TCP 协议栈或加密库同样,ML 将成为咱们的工具,工具的实现细节交给一小部分专家就能够了。到了这个时候——也就是在 ML 被“大众化”以后——开发人员须要了解的不是实现细节,而是如何部署这些智能算法。机器学习
ML 发展到了什么程度编程语言
如今,若是你想要开发一个神经网络来识别照片中的猫或者预测你的下一条推文是否会被疯传,能够学一下 TensorFlow 或 PyTorch。这些基于 Python 的深度学习库是目前最流行的设计神经网络的工具,它们都不到 5 岁。
在它短暂的生命周期中,TensorFlow 已经变得比 5 年前友好得多。在早期,要成为一个高效的 TensorFlow 程序员,你不只要了解 ML,还要了解分布式计算和图架构。即便是写一个简单的打印语句也很费劲。
今年秋季,TensorFlow 2.0 正式发布,它对开发人员更加友好。下面是使用 TensorFlow 2.0 构建一个“Hello World”模型的代码:
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(512, activation='relu'),
tf.keras.layers.Dropout(0.2),
tf.keras.layers.Dense(32, activation='relu'),
tf.keras.layers.Dense(1, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy'),
metrics=['accuracy']))
model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)
若是你之前设计过神经网络,就很容易看懂上面这段代码。但若是以前没学过,或者正在学习,可能就会有一些问题。好比,dropout 是什么意思?这些密集的层是什么东西?你须要多少层,应该把它们放在哪里?sparse_categorical_crossentropy 又是什么?TensorFlow 2.0 确实简化了构建模型时的一些繁文缛节,但并无将模型的实际架构设计抽离出去。
将来会怎样
那么,ML 工具的将来会是什么样子呢?谷歌、亚马逊、微软和苹果公司的人都在花时间研究这个问题。另外,做为谷歌的一名工程师,我也花了不少时间思考这个问题。
首先,咱们将会看到愈来愈多的开发人员使用预先训练好的模型来完成常见的任务。也就是说,咱们将再也不本身收集数据和训练神经网络,而是使用谷歌、亚马逊和微软提供的模型。不少云厂商已经在作相似的事情了。例如,你能够经过调用谷歌云的 REST 端点来使用预先训练好的神经网络,用它们来:
其余
你也可使用谷歌的 ML Kit 或苹果的 Core ML 等工具在移动设备上运行预先训练好的模型。
坦率地说,与本身使用 TensorFlow 构建的模型相比,预先训练好的模型更加准确,由于它们是由谷歌研究人员基于整个互联网的数据训练出来的,他们使用了大量的 GPU 和 TPU。
预训练模型的缺点是,它们解决的是通常性问题,好比识别图像中的猫和狗,而不是特定领域的问题,好比识别装配线上某个部件的缺陷。
但即便是为特定领域的任务训练特定的模型,ML 工具对咱们也很友好。
Teachable Machine——一个在浏览器中构建视觉、手势和语音模型的工具
谷歌的 Teachable Machine 为用户提供了拖放式界面,能够直接在浏览器中收集数据和训练模型。今年早些时候,麻省理工学院发布了一个相似的无代码界面,用来构建在触摸屏设备上运行的模型,这个界面是为医生等非编程人员设计的。微软和一些初创公司(lobe.ai)也提供了相似的解决方案。Google Cloud AutoML 是一个企业级的自动化模型训练框架。
如今要学些什么
随着 ML 工具变得愈来愈容易使用,(不须要成为专家的)开发人员的技能也将发生变化。因此,你如今应该学些什么?
要知道何时该用 ML 并不容易
ML 算法与其余软件的不一样之处在于它们具备几率性。即便是一个高度精确的模型有时也会出错,这意味着它并非不少问题的正确解决方案。以基于 ML 的语音到文本转换算法为例:有时候,你想让 Alexa“关掉音乐”,它却帮你把闹钟调到凌晨 4 点。若是医学版的 Alexa 把医生说的 Adderall(一种治疗多动症的药)误解成 Enulose(一种缓泻药),那就糟糕了。
知道什么时候以及如何在生产环境中使用 ML 模型始终是一个难题,在这些状况下尤其如此:
人类有偏见,预测不许确。
以医学成像为例。如今全球范围内都很缺医生,而 ML 模型在诊断疾病方面每每比训练有素的医生更准确,但你会但愿让一个算法来决定你是否患有癌症吗?用于帮助法官判决刑期的 ML 模型也相似。模型是有偏见的,人也是。
知道何时可使用 ML 以及如何正确地部署 ML 模型并非一件容易的事情,而这个问题不会很快获得解决。
可解释性
众所周知,ML 模型是不透明的,因此它们有时候也被叫做“黑匣子”。若是你只是把“这是个人神经网络告诉个人”做为惟一的证据,就不太可能说服你的副总裁作出重大的商业决策。另外,若是你不明白为何你的模型会作出这样的预测,也可能就意识不到它会作出有偏见的决定(例如,拒绝贷款给特定年龄层或属于某个邮政编码区域的人)。
正由于如此,ML 领域的不少参与者都专一于构建“可解释的 AI”特征工具——可让用户检查模型使用了什么特征进行预测。但从整个行业的角度来看,咱们尚未彻底解决这个问题,不过咱们正在取得进展。11 月份,谷歌发布了一套可解释性工具和 Model Cards——一种帮助用户理解 ML 模型局限性的可视化指南。
谷歌的脸部识别 Model Card 显示了该模型的局限
创造性的应用
有些开发人员擅长机器学习,有些研究人员擅长神经科学,但不多有人同时精通这两个领域。这个问题几乎在任何复杂的领域中都存在。将来几年,ML 的主要进步可能不是数学方法方面的改进,而是来自不一样专业领域的人学会了足够多的机器学习知识,并将其应用到他们的领域中。例如,医学成像领域最使人感到兴奋的突破——经过扫描就能发现有害疾病——并非由于应用了新的神经网络架构,而是由于将标准模型应用在了新奇的问题上。所以,若是你是一名软件开发人员,而且掌握了额外的专业知识,那你就已经走在了别人的前面。
若是我如今从头开始学习 AI,至少会关注这些问题。我发现本身花在从头构建模型上的时间愈来愈少,而是愈来愈多地使用高级工具,如 AutoML 和 AI API,并将注意力集中在应用程序开发上。