写点什么

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

2016 年 1 月 08 日

人工智能领域的突破

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

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

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

探寻深度学习成功的秘诀

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

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

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

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

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

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

可微分式编程?

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

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

总结

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


感谢魏星对本文的审校。

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

2016 年 1 月 08 日 18:0013315
用户头像
Tina InfoQ高级编辑

发布了 393 篇内容, 共 198.1 次阅读, 收获喜欢 983 次。

关注

评论

发布
暂无评论
发现更多内容

游戏夜读 | 改写图形API的意义

game1night

用户故事为什么要关联开发数据?

Worktile

敏捷开发 开发数据

GrowingIO 大数据多维分析自动化测试实践

GrowingIO技术专栏

大数据 自动化测试 parewise

10分钟了解Flink

代码诗人

kudmp介绍和安装

唯爱

券商也“网红”,证券行业IT服务运维发展按下“快进键”

BonreeAPM

运维 APM 证券 券商 行情

这场大数据+AI Meetup,一次性安排了大数据当下热门话题

Apache Flink

大数据 flink 流计算 实时计算 大数据处理

“Plus Token”传销主犯被公诉!警惕,区块链不是“取款链”!

CECBC区块链专委会

1024讲话 CECBC 区块链技术 人才发展 培训

奈学干货分享:分布式CAP实践分析

奈学教育

分布式

如何设计数据中台

数据社

大数据 数据中台 数据仓库

Android 通过opencv实现人脸识别,追踪

sar

android OpenCV 人脸识别

从位图到布隆过滤器

王坤祥

位图 布隆过滤器

工厂模式(三)泛型工厂的概念以及示例代码

LSJ

Nginx 基础原理和命令行的真相

子杨

nginx 运维

写代码没几天,遇到一堆报错,我该怎么办

刘早起😶

Python 程序人生 程序员成长

Weex开发:页面跳转以及Android端多应用选择窗口的处理

brave heart

android Vue 大前端 跨平台 Weex

2020智源-京东多模态对话挑战赛开战 产学研联合推动AI技术发展

DT极客

关于软件测试的三点思考

卓然

软件测试 测试 测试的价值 联现技术咖

Nginx 入门及命令行操作

子杨

nginx 运维

原创 | 使用JUnit、AssertJ和Mockito编写单元测试和实践TDD (十一)JUnit概述

编程道与术

Java 编程 软件测试 TDD 单元测试

Server Queue 提高 QPS

风含叶

Python kafka 后端 队列

架构师训练营0期开营

刁架构

架构师

你有信息焦虑症吗?

Neco.W

学习 创业 知识体系

“新基建”方兴未艾,Smartbi Mining如何为产业数字化转型赋能?

infoq小陈

一个在游戏行业摸爬滚打了十几年的人,为何我对这本书情有独钟

图灵社区

游戏开发 游戏制作 世嘉培训教材

卧槽,接到一个阎王的需求

码农神说

程序员

神经网络中为什么不能将权重初始值设置为一样的值

王坤祥

神经网络 学习

幂等问题及解决方案

Joker

幂等 解决方案

探索 Go 语言数据类型的内部实现

TuringTuring

golang 内存模型 高效

「首度揭秘」大规模HPC生产环境 IO 特征

焱融科技

sds io 高性能 存储 焱融科技

Mysql常用删除方式比较

云也退

MySQL

微服务架构下如何保证事务的一致性

微服务架构下如何保证事务的一致性

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