干货 | 深度学习的实践应用之路互联网+

雷锋网 2017-07-14 20:55
分享到:
导读

  预训练的数据来源   弱标记的数据因为我们会在一个更精确的数据集上对神经网络进行调整,获取用于解决现实问题的标记数据的成本非常高,对一个神经网络(或另一个机器学习算法)进行训练。

近年来,人工智能的崛起可以说是得益于深度学习的成功。驱动深度神经网络突破的三个主要因素分别是:海量的训练数据、强大的计算架构和学术领域的相关进展。因此,深度学习在图像分类、面部识别等任务的表现上不仅超越了传统方法,还超越了人类水平。这一

  近年来,人工智能的崛起可以说是得益于深度学习的成功。驱动深度神经网络突破的三个主要因素分别是:海量的训练数据、强大的计算架构和学术领域的相关进展。因此,深度学习在图像分类、面部识别等任务的表现上不仅超越了传统方法,还超越了人类水平。这一切都为那些使用深度学习解决实际问题的新业务创造了巨大的发展潜力。

  在位于柏林的Merantix总部,我们致力于研究这项新业务在不同行业下的应用。(目前,我们的研究对象是汽车业、医疗保障业、金融业和广告业。)

  学术理论与现实生活通常有很大不同(来源:mimiandeunice.com)

  现在训练一个神经网络比以往任何时候都要简单。然而,这并不意味着你可以将教程中的代码直接应用到应用程序中。有趣的是,学术理论对这些至关重要的训练技巧几乎不予讨论,而这些技巧恰恰是产品的关键所在。

  将深度学习应用于现实问题可能会比较麻烦(来源:pinsdaddy.com)

  因此,我想理解和掌握这些技巧,对于那些计划在生意上应用深度学习的人来说将会大有裨益。

  在本文中,我想分享三点关键的心得和经验。当我们在Merantix用深度学习应对现实问题时,这些心得给了我们很大的帮助和启发:

  心得I:预训练的重要性

  心得II:实际标签分布的注意事项

  心得III:理解黑箱模型

  声明:

  本文介绍的内容不代表完整的方法,还有很多其他的方法和技巧本文没有涉及。

  ・ 本文分享的大部分心得体会不仅适用于深度学习,还适用于其他机器学习算法。

  ・ 所有的心得都不是针对某一行业的。

  ・ 本文中的大多内容都适用于有监督式学习的问题。

  这篇文章是根据我在5月10日“柏林人工智能大会”上的演讲修改而成的。

  心得I:“预训练”的重要性

  在机器学习学术界,对获取数据集的关注微乎其微。相反,为了将深度学习方法与其他方法作比较,并最终确定一个最优方法,标准做法是在一个标准数据集上,以相同的评估程序来评测不同方法的表现。然而在现实情境中,你的新算法性能比另一算法高出1%并不重要,重要的是建立一个强大稳健的,并且能够准确地解决目标任务的系统。对所有机器学习系统来说,这需要一些算法能够从中学习的标记训练。

  对许多现实问题来说,获取标注的训练数据的成本相当昂贵。为了详细地阐述这个问题,我们来看两个案例:

  1. 医学影像

  如果我们想要建立一个在CT图像中检测人体淋巴结的系统,我们需要对CT图像中的淋巴结进行标记。这是一项非常耗时的工作,因为这些图像都是3D的,而且我们需要在3D图像中识别出非常小的结构。假设,一个放射科医生一小时能标记4张图像,他的时薪是100美元;这就意味着标记一张CT图像将花费我们25美元,而标记一万张CT图像,我们要花25万美元。因此,我们需要几个医生来对同一张图像进行标注,以确保接近100%的诊断准确性。这样一来,一个医学任务的数据集的成本很容易就会超过25万美元。

  2. 信用评分

  如果我们想建立一个能够对客户信用等级进行评估的系统,我们就需要知道存在潜在违约风险的客户,这样我们才能让一个机器学习系统提前识别出他们。不幸的是,只有当违约真正发生的时候我们才能确定违约的客户。因此,一个比较天真的策略是给每个人发放贷款(假如是每人一万美元)。但这就意味着每一个人违约我们就将损失一万美元,这无形中就使得每一个标注数据点的价格都非常昂贵。

  显然我们可以通过一些方法来降低这些成本,但总体来说,获取用于解决现实问题的标记数据的成本非常高。

  那么,我们究竟该如何解决这个问题呢?

  “预训练”

  预训练能有效降低成本(来源:massivejoes.com)

  “预训练”的基本操作是――首先,我们需要在一个相关领域的廉价大数据集上,或者是在同一领域的“非纯净训练数据”上,对一个神经网络(或另一个机器学习算法)进行训练。尽管这样做不能直接解决问题,但这能让神经网络对你需要解决的问题有初步的了解。接下来的第二步,我们要在一个更精细的、成本更高的小数据集上进一步优化神经网络的参数。下图是“预训练”的操作示意图:

  当训练数据集很难获取时,首先在相对廉价的大型数据集上对神经网络进行“预训练”;然后,在一个成本相对高的、相对精细的数据集上调整神经网络。在对神经网络进行微调时,类别的数目可能会发生改变。

  人们通常会在有着1000个类别的ImageNet数据集上对神经网络进行“预训练”,然后根据他们实际需要解决的问题对神经网络进行微调,而微调过程中的类别数与“预训练”中的类别数很可能是不一样的。这就意味着神经网络的最后一层需要重新初始化。通常情况下,神经网络中最后一层的学习效率要相对高一些,因为最后一层需要从头开始学习,而前面的层的学习速率会低一些。对于像ImageNet这样的数据集,这样的特征学习是通用的,因此它能直接用于解决其他的计算机视觉问题。

  我们应该如何获取“预训练”的数据?

  “预训练”数据的来源1. 预训练模型:网络上有很多经过训练的模型,其中最应该指出的就是Model Zoos。Model Zoos包含了一系列不同的训练数据,这些数据经过了专家学者、公司企业和深度学习爱好者的训练。

  2. 公共数据集:网上有很多数据集,所以不要在收集数据集上浪费时间,花时间看看网上有没有能够解决你的问题的数据集。

  3. 数据抓取:如果网上既没有一个公共的“预训练”模型,也没有你需要的数据集,那么你可以通过一个小门路来生成一个数据集。你可以建立一个所谓的“抓取器”,让它自动从特定的网站上收集数据集。这样你就能建立一个新的数据集了。

  预训练的数据来源

  弱标记的数据因为我们会在一个更精确的数据集上对神经网络进行调整,所以在调整之前我们是可以在所谓的“弱标记”数据集上对其进行“预训练”的。之所以称之为“弱标记”数据集,是因为其中的数据标记并非是完全正确的(可能有90%的数据是正确的,10%是错误的)。“弱标记”数据的好处在于它能够轻松获取,不需要人工参与标记。这与那些人工参与标记的数据集相比成本要低很多。

  举个例子来说,在攻读博士学位期间,我从维基百科和IMDb上获取了一个数据集,这个数据集中包含了50万张人脸图像。将照片中每个人的出生日期和照片底部显示的拍摄日期结合起来,这样我们就能大致判断出每张图像的年龄。需要注意的是,在某些情况下,照片底部显示的拍摄日期可能是错的,或者一张照片中可能有多个人而面部检测器在识别人脸时出现了差错,因此,我们不能完全保证图像年龄的判断都是正确的。尽管如此,我们还是应该在这个“弱标记”数据集上进行“预训练”,以提高神经网络的性能,而仅在准确标记了的数据集上训练是完全不够的。

数据 训练 学习 需要 网络
分享到:

1.TMT观察网遵循行业规范,任何转载的稿件都会明确标注作者和来源;
2.TMT观察网的原创文章,请转载时务必注明文章作者和"来源:TMT观察网",不尊重原创的行为TMT观察网或将追究责任;
3.作者投稿可能会经TMT观察网编辑修改或补充。


观点约架