随着理论和硬件的飞速发展,神经网络已经成为了在线服务(比如微软的必应)的核心部件,推动着它们图像搜索和语音识别系统的发展。这些公司仰赖于这项技术来驱动未来更先进的服务,所以他们扩大了神经网络的规模,用来处理更加复杂的问题。 算起来,神经网络已经发展了很多年,从50年前的最初构想,到现在已经成为信息技术应用不可或缺的部分。20世纪90年代,神经网络曾引起了一阵热潮。但那之后,为了克服它们在传统计算机上的惨淡性能,高度专业化的集成电路逐步发展起来了,神经网络慢慢被其他算法所超越,比如图像处理中的支持向量机和语音识别中的高斯模型。 在过去,人们使用的神经网络都很简单,最多只有三层,包括一个输入层、一个中间的「隐藏」层,还有一个输出层。跨层的神经元之间联系得非常紧密。每个神经元都将它的输出灌输给下一层神经元。训练神经网络的方法是反复地调整每个神经元应用在输入数据上的权重,以便将整个网络的输出结果与理想值之间的误差减少到最小。 尽管神经科学告诉我们,人脑拥有更加复杂深邃的结构,包含着许多隐藏层,但早期的此类深层网络实验结果却比浅层网络还糟糕。2006年,深层网络终于取得了重要的进展,这要归功于多伦多大学的Geoffrey Hinton和Ruslan Salakhutdinov。他们改进了训练技术,对包含多个隐藏层的神经网络尤其有效。其中一个技术是「预训练」(pre-training),即在优化整个网络的输出之前,先分别独立地调整每层的输出。这种方法使得较上层可以抽象出高层特征,较下层的隐藏层就可以更有效地运用这些特征来对数据进行分类。 然而,尽管训练技术有了进步,深度学习的规模还是存在问题。神经元之间需要完全地相互连接,尤其是在较上层,这需要强大的计算能力。一个图像处理应用的首层就可能需要分析上百万个像素。而对深度网络来说,多层神经元之间的相连会产生数量级的增长。瑞士Dalle Molle人工智能研究所(IDSIA)的Dan Cireşan说:「每张图片都需要处理几十亿,甚至几千亿个连接。」他还补充道,训练如此巨大规模的神经网络,需要一千万亿个浮点运算。 一些研究人员,诸如Cireşan,发现可以使用另类的计算机结构来大量地提升处理速度。AMD及年Vidia出产的图形处理器(GPU,也就是显卡的处理器)为研究人员提供了足以并行处理上百个浮点运算的计算能力。此前,神经网络训练算法的提速研究主要都围绕相对于比较好编程,但是相对较慢的计算机集群而展开。在一项深度学习网络被训练寻找生物细胞分裂的视觉特征的实验中,Cireşan表示整个训练过程在传统的CPU上将花费5个月的时间;「然而在GPU上只需要3天。」 人工智能研究主管、纽约大学数据科学中心创始人Yann LeCun说:「过去,神经网络并没能在持续语音识别方面得到什么突破;这是因为他们(过去使用的神经网络)不够大。当人们开始尝试使用深度神经网络代替高斯模型的时候,错误率大大地下降了。」 使用深度神经网络表现出超过三分之一的提高,将语音识别的错误率从35%降低到低于25%。在此基础上对其进行优化,还可以带来的更多的提高空间。 这种形式的学习依然有一定的局限性。DeepMind —— 一家在2014年初被谷歌以4亿美金收购,位于英国伦敦的公司 —— 使用电子游戏来评估深度神经网络解决各种不同类型问题的能力。谷哥研究员Volodymyr Mnih说这种系统无法处理寻找迷宫出口这类需要完成多个阶段才能获得奖励的游戏。这种情况下,神经网络基本无法从随机开始的失败尝试中学到什么东西。深度学习网络在类似Breakout和Virtual Pinball这类游戏中表现还是不错的,虽然成功或许会来得比较慢,但是还是可以从随机的尝试结果中学到些什么。 在深度学习的商业化应用方面,研究团队都将目光集中于使用现场可编程门阵列(FPGA,一种可以被编程改变自身结构的硬件——译者注)设计的定制计算硬件。这些定制的电路设计结合了可编程逻辑查找表,为优化数字型号处理优化的特别设计的计算逻辑元件,以及一矩阵的用于定义这些部分之间是怎么连接起来的内存条。 目前国内的百度正使用深度神经网络来进行语音识别和图像搜索,从而优化基于上下文内容的广告。百度此前决定在成品服务器中使用现场可编程门阵列(FPGA,一种可以被编程改变自身结构的硬件——译者注)而非图像处理器群(GPUs)。百度高级架构师Jian Ouyang表示,虽然单个的图像处理器群在百度使用的深度神经网络中能够提供最高峰值的浮点运算表现,但现场可编程门阵列在同样表现下需要的功率更低,因为能够安装在刀锋服务器上,依靠主板上的串行总线连接就能供电。现场可编程门阵列的核心优势在于,因为上一次的计算结果能够直接供给下一次计算,而不需要保存在主存储器中,因此,所需要的存储带宽要远低于使用GPU或者CPU。 「使用现场可编程门阵列,我们不需要对服务器设计和环境进行修改,从而易于配置在大规模服务器上。同时,我们也需要在现场可编程门阵列上配置很多得到支持的功能。但它们的可重构性可以帮助我们根据实际需求来选择将它们移入或移出现场可编程门阵列。重新配置的时间少于10微秒。」Ouyang说。 他进一步谈到:「百度团队在使用了一种简化过的浮点运算引擎后,进一步节约了空间。处理器提供的标准浮点运算实现能够处理所有可能的意外。更何况在我们的情况下,我们不需要处理IEEE标准下的所有意外。」 除了想方设法使用更有效的处理器,研究者还在尝试使用分布式处理方式来构造更大的深度神经网络,它们能够应对更加庞大的数据集。深度网络中的转移延迟会对训练速度产生严重影响。但是,用无限带宽技术来取代以太网就可以对训练算法进行重排,这会降低延迟,2013年,一支来自斯坦福的团队就是借助这种方法使多重并行GPUs几乎达到了线性加速。微软在近期研究中用CPUs群取代GPUs群,开发了一种对训练的同步需求进行放松的方法,从而可以交叉在几千台机器中执行。 这种更具扩展性的深度网络使百度得以实施一种「端对端」的语音识别系统,它被称之为Deep Speech。该系统不依赖于传统语音处理算法的输出,例如使用隐马尔科夫模型来提高输入较为嘈杂时的表现水平。针对嘈杂环境下的数据集,Deep Speech将词汇识别的错误率降低到了19%,相比之下,2014年底最好的商用系统的错误率为30.5%。 但是,通过多个更小规模的网络进行数据预处理和结果汇总将比完全依靠神经网络更加有效。Cireşan已经借助于图像失真的借口结合和较小网络的「委员会」(即将多个较小网络整合在一起)来降低错误率,效果要优于单独一个更大的深度学习网络。在一次交通信号识别测试中,多种技术的结合取得了比人类观察者更好的表现。 研究人员试图用分布式处理来构建更广泛的深度学习网络,以便能处理更大的数据集。 决定使用哪种变形来针对某一类模式是需要人为干预的。Ciresan称,让网络自己学习最佳的变形组合是非常困难的 ,但对建立系统的人来说却很容易。 一个传统深入学习的潜在问题是对数据的访问,Neil Lawrence是谢菲尔德大学计算机科学系机器学习领域的教授,他认为,深入学习模型在数据集被妥当归类,和模型能以大量妥善标注的数据训练的情况下表现的很好。「但是,临床数据,作为激起我兴趣的一个领域,并非是这种情况。临床数据中,在多数情况下,很多人没有得到广泛的临床测试。另外,临床测试在不断变迁,影响病人的疾病也在不断进化。这是一个『缺乏大量数据』的例子。」 和其他人建议在神经网络中使用涉及概率论的高斯处理,用以提高对较小数据和神经网络表现不佳的应用领域的学习聊率, 比如在健康领域,其数据和不同数据集有相互关联。所选定的数据可能不在某些数据集里,对此类情况,概率模型比传统的机器学习能够有更好的表现。这项研究的进展落后于对神经网络的的研究,但研究人员已开始研究有效的训练方法,并采用多GPU系统来扩大处理的规模。 Lawrence说:「算法是个额外的负担。它使得网络中产生不确定性,这就是算法问题所在,但是也我们突破最多的地方。」 在Lawrence看来,基于高斯处理的深入学习系统往往需要更多的计算能力,但系统能自动决定网络需要几层高斯处理。基于神经网络的系统目前还做不到这点。「这种结构式的学习很令人兴奋,也是让我们考虑这类模型的最初动机之一。」 针对目前更被熟知的神经网络系统,cirensan表示,他们在研究超越极限去建造更大更有效的模型,「但是我们更想做的事是:更好地了解深入学习为何会有效。」本文选自ACM,作者Chris Edwards,机器之心汪汪、张之乎、Wangyue翻译,Rita校对。