可微分式编程:深度学习发展的新趋势?

  • 杜小芳

2016 年 1 月 8 日

话题:语言 & 开发架构深度学习AI

人工智能领域的突破

近几年来,人工智能领域许多存在了几十年的挑战忽然间被攻克了,几乎没有任何预兆。以长期以来被人工智能纯化论者所鄙视的途径——从海量数据中学习概率的方式——解决了。

从此你无需把问题编码成可运行的格式,更不依赖人自身解决问题的技巧——从目标分类和语音识别到图片标注和合成特定艺术家风格的图像,甚至指导机器人执行尚未被编程的任务,都被一一解决。这个占主导地位的新进展最初被冠以“神经网络”之名,如今被称作“深度学习”——用来定性地强调相比以前的长足进展。

“深度学习”最近的成功常被归功于更大量的可用数据、更强大的计算系统,以及大科技公司对这一领域突然增加的兴趣和投入。这些不断增长的资源确实客观上有助于当前人工智能的快速发展,虽然大公司一直以来都投入了大量资源到各种机器学习方法中,但只有深度学习取得了如此令人难以置信的进展;其他机器学习方法虽然也有改进,但是远远没有达到可以与深度学习相提并论的程度。

探寻深度学习成功的秘诀

到底是什么因素将深度学习与其他方法区分开?它是否能够解决那些到目前为止没有人能用编程提供解决方案的问题?

第一个成功因素,是自神经网络早期以来就不断被重复发现、一直行之有效的算法,被称之为“后向传输”。它其实只是规则链(一种简单的微积分技巧)以非常简洁优雅的方式被应用。它被深入应用于连续数学和离散数学领域,使得一系列复杂的潜在解决方案可以在矢量微积分运算过程中自动优化。

关键之处在于,将这些潜在解决方案的模板组织成一个有向图(例如,在很多节点中,给一幅照片自动添加标注说明),反向遍历这个图使得算法可以自动计算“梯度矢量”,而梯度矢量指导搜索进一步优化的解决方案。你只要稍微检视一下大部分当前深度学习技术就不难发现,他们与传统神经网络在结构上有诸多相似之处。因此,后向传输算法无论对传统的还是新的构架都至关重要。

但是传统神经网络对后向传输的使用远不及新的深度学习技术,哪怕使用现有的硬件和海量数据来实现也如此。

所以当前架构成功的另一个关键是又一个简单到具有欺骗性的想法:神经网络的组件可以同时被用在多个地方。当神经网络被优化后,它的每个组件的拷贝都被强制保持不变(这个想法被称作“权重绑定”)。这一点给权重绑定的组件附加了一个限制条件:它们必须同时学习在不同地方生效,而不是局限在特定位置。权重绑定驱使神经网络去学习更普遍有效的函数功能,因为一个单词可能出现在一段文字中的任意位置,或者一个实际物体可能会出现在图像中的任意位置。

把普遍适用的组件放在神经网络中的很多位置,可以类比于在程序中编写一个函数然后在全局调用它——这是计算机科学另一个完全不同领域的核心概念,即函数式编程。实际上它不只是类比,权重绑定的组件其实跟编程中可重用函数的理念不谋而合,而且权重绑定更加深入——最近大获成功的许多架构里都在复用组件,跟函数式编程里“高阶函数”的编写模式一模一样。这暗示其他来自函数式编程的算子可以借鉴到深度学习结构中。

可微分式编程?

要探索以深度学习神经网络训练的函数式结构,最自然的方式是一款新语言,它能够直接在函数式程序上运行后向传输。正如目前所展现的那样,这种结构隐藏于实现细节之中,函数式程序实际上被编译进一个类似后向传输所需要的计算图,图中每个组件必须是可微分的。而 Grefenstette 等人最近发表了关于许多简单数据结构的可微分构造(栈,队列,双端队列),他们的研究表明进一步可微分的实现可能只需要一点聪明的数学技巧。

这一领域的后继进展很可能会创造一个新的编程范式 --可微分式编程。用可微分式语言编程将会像起草一个函数式的结构,并把细节留给优化器;语言本身将会使用后向传输从而根据整个程序的目标来自动学习细节实现——正如深度学习中的自动优化权重值一样,但函数式编程可作为更有表达力的权重绑定实现。

总结

深度学习看上去可能很像"专家系统"或“大数据”领域里的另一个暂时性的狂热。可微分式编程是一个很新的概念,但它是后向传输和权重绑定思想的一个自然而然的延伸,而且可能会被证明跟前两者一样长期有效。哪怕特定的实现、架构、技术术语不断出现又消失,这些核心概念将会一直是人工智能成功的核心要素。


感谢魏星对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ@丁晓昀),微信(微信号:InfoQChina)关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群InfoQ 好读者(已满),InfoQ 读者交流群(#2)InfoQ 好读者)。

语言 & 开发架构深度学习AI