作者 | Caleb Kaiser
编译 | 丛末
在不久之前,一个数据科学家团队要想有效地使用深度学习,需要满足以下几个条件:
- 设计一种新颖的模型架构,并且该架构可能需要在模型内部设计
- 可使用大型或专有的数据集
- 用于大型模型训练的硬件或资金
这就给深度学习带来了瓶颈,并将它局限在能够满足这些条件的少数项目中。
然而,在过去几年间,情况发生了变化。
在Cortex这一平台上,有不少用户发布了基于深度学习的新一代产品,并且与之前不同的是,这些产品并非都是使用独一无二的模型架构创建的。
这一进展背后的最大功臣便是迁移学习。
一、迁移学习
从广义上来看,迁移学习是一种在为特定任务而训练的模型中积累知识的思想,比如说,一个模型在识别图像中的花的任务中积累的知识,可以迁移到另一个模型上来帮助另一个不同但是相关的任务(例如识别某个人的皮肤上的皮肤上的黑素瘤)做预测。
如果想要深入了解迁移学习,可参考Sebastian Ruder 曾为迁移学习写过的一篇综述性的文章:https://ruder.io/transfer-learning/
做迁移学习的方法有很多,而其中微调的方法尤其被广泛采用。
在该方法下,研究者采用一个预训练模型并去除或重新训练模型最后的几层,来完成一个新的相关任务。
AI Dungeon 是一款开放世界的文字冒险游戏,根据 AI 生成的故事有多令人信服向前推进:
图源:AI Dungeon
值得一提的是,AI Dungeon 这款游戏并非诞生于谷歌的研究实验室,而是由一位工程师创建的黑客竞技项目。
这位工程师名叫 Nick Walton,不过他并没有从头开始为AI Dungeon 设计模型,而是采用了当前性能最佳的 NLP 模型——OpenAI 的GPT-2,并基于玩家自身选择的冒险文本来对模型进行微调。
这款AI 游戏的工作原理是:在神经网络中,前面的层专注于简单、一般的特征,而后面的层则更多地聚焦于特定任务的分类和回归。
吴恩达通过设想一个图像识别模型,对这些层和它们的相对独特度进行了可视化处理:
图源:Stanford
结果显示,基础层的通用知识往往能够很好地迁移到其他任务上。在AI Dungeon这一游戏示例中,GPT-2 在理解通用英文上已经实现了最佳性能,仅仅需要对模型后面的层稍微重新训练下,玩家就能够在自己选择的冒险题材的文本游戏中获得出色的表现。
通过这种处理方法,一位工程师在几天时间内,就能够独自将实现了最佳结果的模型部署到新的领域中。
二、为什么迁移学习是下一代 ML 赋能软件的关键所在
正如作者在开头提到的,深度学习要想得到有效地应用,需要具备三个支撑条件:大规模、干净的数据集、设计出高效模型的能力以及模型训练的方法。
这也就意味着在默认情况下,在某些领域或没有某些资源的项目中,深度学习很难得到很好的应用。
而现在,随着迁移学习的广泛应用,这些瓶颈都不再是瓶颈:
1、小数据集不再是“拦路虎”
深度学习通常需要大量的标注数据,然而很多领域目前甚至都还没有这类标注数据。迁移学习则能够解决这一问题。
例如,哈佛医学院麾下的一个研究团队最近就部署了一个能够“能够根据胸片预测包括非癌症死亡在内的死亡率”的模型:
图源:JAMA Network
有了超过 50000张标注图片的数据集后,他们并没有使用这些数据从头开始训练 CNN(卷积神经网络),而是采用了经过预训练的Inception-v4 模型(在有 1400万张ImageNet 数据集上训练),并且使用迁移学习和轻微的架构调整方法来使其模型适应新的数据集。
最终,他们训练的CNN 模型仅仅使用了每个病人的一张胸部图像,就能够生成与病人的实际死亡率对应相关的风险评分,应用得非常成功。
2、模型可以在几分钟训练完,而不需要数天
在海量数据上训练模型,不仅面临需要获得大规模数据集的问题,还面临着资源和时间消耗这一问题。
例如,谷歌在开发最前最先进的图像分类模型Xception时,训练了两个版本:一个是在ImageNet数据集(有 1400万张图像)上训练,另一个在JFT 数据集(有3.5亿张图像)上训练。
采用各种优化器在60 个NVIDIA 的K80 GPU上训练,前一个版本花了3天时间,而后一个版本则花了一个多月的时间。
而使用其发布的预训练 Xception模型。谷歌研究团队能够更快地对上述两个版本的模型进行微调。
另外一个案例是,伊利诺伊大学和美国阿贡国家实验室的联合团队最近训练了一个模型,来将星系的图像分类为螺旋状还是椭圆状:
图源:阿贡实验室
虽然只有一个拥有 35000 张标注图片的数据集,他们使用NVIDIA的 GPU,在仅仅8分钟内就完成了对Xception模型的微调。
最终的模型能够99.8%的正确率对星系进行分类,并且还在速度上超越了人类,每分钟能分类20000多个星系。
3、 训练模型不再需要承担投资风险
谷歌可能并不是很在乎他们每次都用 60 块 GPU 数月地训练Xception 模型所需要花费的成本。然而,其他的多数团队并不具有像谷歌一样的财力支持,模型训练的成本是一个非常实际的问题。
例如, OpenAI在首次公开GPT-2的结果时,一同发布了模型架构,但是由于担心被误用而没有发布完整的预训练模型。
随后,布朗大学的一个研究团队根据模型架构和论文中描述的训练步骤复现了 GPT-2,他们将这一模型称之为 OpenGPT-2。整个训练花费了超过 50000美元,然而表现却远不如 GPT-2。
花了50000美元来训练模型,结果性能却低于当前的最佳性能,对于在没有大量资金支持下开发应用型生产软件的团队而言,都是一个巨大的风险。
而值得庆幸的是,迁移学习能够极大地降低这种成本。
例如Nick Walton 就采用对GPT-2进行微调的方法开发出了 AI Dungeon。OpenAI 已经投入了大约 27118520 页文本和数千美元来训练GPT-2模型,所以 Walton 不需要重新创建。
相反地,他使用了从 chooseyourstory.com 上截取的一组小得多的文本,并在完全免费的 Google Colab 中对模型进行了微调。
三、机器学习工程正在变成一个真正的生态系统
如果将软件工程视作一个并行的操作,我们往往会看到这一生态系统正在以相当标准的模式「成熟」。
一种新的编程语言诞生往往伴随着一些令人兴奋的特性,人们将把它应用于特定的用例、研究项目和游戏。在这一阶段,任何使用它的人都必须从头开始构建所有基本的实用程序。
接着,再由社区中的研究者开发能够抽象出公共实用程序的库和项目,直到这些工具足够稳定地用于生产。
在该阶段,使用它来开发软件的工程师并不在意发送 HTTP 请求到数据库或者与数据库连接,毕竟所有这些都是抽象出来的。而工程师们基本上只聚焦于构建他们的产品。
换句话说,Facebook 开发 React,谷歌开发 Angular,而工程师则使用它们来开发产品。随着迁移学习的发展,机器学习工程也正迈着这样的步伐向前发展。
随着 OpenAI、谷歌、Facebook 等科技巨头先后发布强大的开源模型,机器学习工程师的「工具」也变得越来越强大和稳定。
机器学习工程师们不再需要把时间花在使用 PyTorch 或 TensorFlow 从头开始创建模型,而是使用开源模型和迁移学习来开发产品,这意味着全新一代的机器学习赋能的软件即将到来。
而现在,机器学习工程师只需要关心:如何将这些模型投入生产。
via: https://towardsdatascience.com/deep-learning-isnt-hard-anymore-26db0d4749d7?gi=f918c0f5f26f