深度学习成长的烦恼
【编者按】 深度学习尽管对当前人工智能的发展作用很大,然而深度学习工作者并非一帆风顺。Chris Edwards发表于Communications of the ACM的这篇文章,通过不同的深度学习研究人员的现身说法,列举了深度学习在不同场景下面临的一些挑战以及目前的解决方案。CSDN翻译此文,希望对国内深度学习从业者有借鉴意义。
理论和计算机硬件的进步促使神经网络成为在线服务的核心部分,如微软的Bing,采用神经网络驱动图像搜索和语音识别系统。这些公司提供这样的能力是希望在未来该技术能驱动更先进的服务,因为他们扩展了神经网络来处理更复杂的问题。
神经网络从50年前的最初设想,到成为信息技术应用的公认部分,花了很长的时间。上世纪90年代,在一阵混乱的兴趣之后,部分支持通过发展高度专业化的集成电路设计来克服传统计算机性能的不足,神经网络在各类算法中脱颖而出,比如在图像处理中的支持向量机以及语音识别中的高斯模型。
旧版简单的神经网络最多使用三层结构,分为输入层、中间“隐藏”层和输出层。神经元跨层高度关联。每个神经元将其输出馈送到下一层的每个神经元。该网络是这样训练的:迭代地调整每个神经元施加到其输入的数据,来尽量减少整个网络的输出与所希望的结果之间的误差。
虽然神经科学表明人脑具有涉及多个隐藏层的更深结构,但是这类系统的早期实验结果比浅层网络更糟糕。2006年,Geoffrey Hinton和Ruslan Salakhutdinov在多伦多大学的工作使得深度架构的研究获得一个显著的提升。他们开发的训练技术能更有效地用于包含多个隐藏层的网络。 其中一种技术是“预训练(pre-training)”,用于在移动之前独立地调整每一层的输出以优化整个网络的输出。该方法使得上层能够提取可用于下面的隐藏层有效地进行数据分类的高级特征。
即使训练有所改善,规模还是深度学习的一个问题。充分互连的神经元,特别是在较高的层,需要巨大的计算能力。用于图象处理应用程序的第一层可能就需要分析一百万个像素。深度网络的多个层连接的数量将会大几个数量级。总部位于瑞士Manno的Dalle Molle Institute人工智能研究院(IDSIA)研究员Dan Cireşan认为,“每个图像有几十亿甚至上千亿的连接待处理”,训练这样的大型网络需要数千万亿(quadrillions)的浮点运算。
Cireşan这样的研究人员发现,可以使用非传统的计算机体系架构来大规模加快处理速度。 诸如AMD和nVidia公司的图形处理单元(GPU)提供了并行执行上百个浮点运算的能力。 先前加快神经网络训练的努力围绕较慢但更容易编程的集群工作站。在一个深度神经网络训练用于寻找生物细胞分裂视觉特征的实验中,Cireşan认为在传统的CPU上训练阶段花费五个月,“它在GPU上只花了三天时间。”
非死book人工智能研究技术总监、纽约大学数据科学中心创始人Yann LeCun认为:“以前,神经网络没有打破识别连续语音的记录;它们还不够大。当人们更换为深度神经网络的高斯模型,误差率又一路下跌。”
根据他们的介绍,深度神经网络显示了超过三分之一的改善,将带有少量背景噪声的语音识别的错误率从35%减小至25%以下,并且进一步优化还有更大的改进。
这种学习形式有一些限制。总部位于伦敦、在2014年年初被谷歌以4亿美元收购的DeepMind,使用电脑游戏来评估深度神经网络面对不同类型问题的性能。谷歌研究员Volodymyr Mnih认为,该系统无法处理类似穿越迷宫这样的情况,即奖励只在成功地完成若干阶段后发放。在这些情况下,当网络尝试各种随机初始操作并且失败时,基本什么都学不到。深度神经网络在如Breakout和Virtual Pinball等游戏中表现比较好,这些游戏成就可能会推迟,但它可以从随机响应学习。
在商业应用中部署深度网络,团队都转向定制计算机的设计,使用现场可编程门阵列(FPGA)。这些实现的自定义电子电路使用可编程逻辑查找表,硬连线算术逻辑单元优化数字信号处理,以及存储器单元矩阵来定义所有这些元件如何连接。
中国搜索引擎和网络服务公司百度(使用深度神经网络来提供语音识别、图像搜索,并服务于语境广告)决定服务器生产中使用FPGA而不是GPU。百度高级架构师Jian Ouyang表示,虽然个别的GPU提供峰值浮点性能,在百度使用的深度神经网络的应用中,相比相同的性能水平FPGA消耗更少的功率,并可以安装在刀片式服务器上,完全由连接在主板上的PCI Express总线供电。 FPGA的一个主要优点是:因为一个计算得到的结果可以被直接馈送到下一个而无需在主存储器临时保存,存储器带宽需求比使用GPU或CPU实现时低得多 。
“使用FPGA,我们不需要修改服务器设计和环境,所以很容易大规模部署。我们需要许多功能来支持那些无法在同一时间部署到FPGA中的。但是,我们可以使用他们的可重配置在FPGA中按需移入和移出功能。重构时间小于10μs。” Ouyang说。
百度团队通过使用一个简化的浮点引擎来进一步节省空间。“处理器提供的标准浮点实现可以处理所有可能的异常。但以我们的情况来看,我们并不需要处理所有IEEE[754]标准以外的情况。”
还有,设法使用更有效的处理器,研究人员正试图利用分布式处理来构建更广泛的深度学习网络以应对更大的数据集。通过网络传送的等待时间严重影响训练速度。然而,与一个提供更低延迟的从以太网络到互联结构的转换一起重新整理训练算法,使得来自斯坦福大学的团队在2013年为多个并行的GPU实现近线性的加速。在最近的工作中使用CPU集群而不是GPU,微软开发出一种放松同步要求的训练方法,允许跨数千机器执行。
更具扩展性的网络使得百度有可能实现一个名为Deep Speech的“端到端”语音识别系统。该系统不依赖于传统语音处理算法的输出,例如使用隐式的马尔可夫模型来提高有噪声输入时的性能。在一个噪音频发的数据集上,相比于2014年年底最佳商业系统错误率可达到的30.5%,它将单词识别的错误率减少到刚刚超过19%。
然而, 预处理数据以及合并从多个较小网络得到的结果比纯粹依靠神经网络更有效。 Cireşan已联合使用图像扭曲和小网络“委员会”来减少相比较大单一深度学习网络的错误率。在交通标志识别的一个测试中,技术的结合产生了比人类观察者更好的性能。
决定为一个给定模式的类使用扭曲需要人工干预。Cireşan认为,网络自主学习扭曲的最佳组合是困难的,但对于人来说设置系统通常是一个容易的决定。
谢菲尔德大学计算机科学系机器学习教授Neil Lawrence认为, 传统深度学习的一个潜在的问题是数据的访问 。他说,当数据集很好地表示并且可以在大量的适当标签数据上训练时,深度模型往往表现良好。“然而,激励我的其中一个领域是临床数据,并不是这种情况。对于临床数据,大多数人大部分时间并没有大量的临床试验来使用。此外,临床试验也在不断发展,就像患者的疾病一样。这是一个‘大量丢失的数据’的例子。”
Lawrence等人曾建议使用概率论中的高斯过程层代替神经网络,以提供对较小数据集的有效学习,对于应用程序,神经网络表现并不良好,比如那些相互连接贯穿于许多不同数据库的数据,这是医疗的情况。 因为数据可能不会呈现在某些数据库作为一个给定的候选,概率模型处理这种情况要比传统的机器学习技术更好。这项工作落后于神经网络,但研究人员已开始着手于有效的训练技术,以及扩大处理来工作在如多核GPU机器一样的平台上。
“我们有额外的算法负担,即围绕网络传播不确定性,”Lawrence说。“这就是算法问题的开始,但也是在这里,我们已经有大部分的突破。”
Lawrence表示,基于高斯过程的深度学习系统可能会要求更高的计算性能,但系统能够自动判断网络内部需要层,这是基于神经网络的系统目前所不能实现的。“这种类型结构的学习是非常令人兴奋的,并且是考虑这些模型的原始动机之一。”
对于目前更广泛的神经网络系统,Ciresan提到去除更多限制建造更大、更有效的模型的工作正在进行,“但我想说,我们最想要的是更好地理解深度学习为什么能实现。”
原文链接: Growing Pains for Deep Learning (翻译/王玮 责编/周建丁)