点击上方“深度学习大讲堂”可订阅哦!
编者按:如果把深度学习比作一座城,框架则是这座城中的水路系统,而基于拓扑图的计算恰似城中水的流动,这种流动赋予了这座城以生命。一个优雅的框架在保证城市繁荣的同时,还能让这座城市散发出独特的魅力,使它保持永恒的生命力。本文中,年仅22岁的开源框架Dragon的设计者、中科院计算所博士研究生、中科视拓实习算法研究员潘汀,将结合独立开发深度学习框架的经验,介绍框架设计中的关键技术,并给出其发展趋势的简单分析。文末将分享讲者自己设计的开源框架:Dragon。
以下是本文作者在CCML2017-深度学习Tutorial上分享的报告:
在去年的CES展会上,英伟达CEO黄仁勋,放了这样一张图,上面列了近几年学术界工业界的一些杰出框架,并称赞这些框架是当代AI发展的引擎。
虽然略有广告之嫌,但深度学习框架确实是相当重要的。这体现在以下两个方面:
从工程性上来说,无论是工业界还是学术界都需要可靠的框架来支持计算量庞大的实验;
从学术性上来说,以深度学习为主的论文每周都有大量的更新,如果没有框架:
(1)一周内不可能复现完世界上各大研究组的工作
(2) 会议的deadline截止了,实验还没有跑完
MXNet框架作者之一的李沐博士曾经开过这样的玩笑:“我们这一群曾经一起写框架的小伙伴,如今都年薪百万了。”这间接体现了框架开发和维护人才的稀缺。
放眼Github,明明已经有那么多优秀的框架了,那么为什么我们还需要自己写框架呢?
这里就有俩种不同的声音了:
第一种声音来自地平线机器人的余凯博士,他曾公开表示对以TensorFlow为主的框架产生的垄断效应而产生担忧。
与之相对的是,LSTM作者之一的Schmidhuber教授在ICML15上的观点:AI研究的代码是非常自由,我们并非一定要局限使用固定的代码来源,总有人不喜欢TensorFlow,这就是它难以垄断的根本原因。
所以,无论是否会产生框架垄断,AI研究者都必须刻苦钻研代码技术,这才是最重要的。
以上是我今天报告的主旨。下面我将从4个方面,结合独立开发框架的一些经验,介绍目前深度学习框架设计中最新的一些关键技术。
框架设计界目前有两大阵营,命令与声明式,可以根据是否使用计算图来划分它们。基于计算图的声明式框架,需要先假设完整的模型,再对模型进行一次性求解。相反,不使用计算图的命令式框架,如其名,只能逐步求解了。
下面这张表列出了两个阵营的战力对比,我们可以看到,自2012年后,绝大多数深度学习框架都选择了基于计算图的声明式求解。
这并不是什么巧合,计算图表示本身是优雅的,它携带的上下文拓扑关系允许我们结合领域知识对组合运算做进一步优化。
计算图这个概念大家现在基本是比较熟悉了,它本质就是一个有向无环图。
那么为什么这么一个简单的小小有向无环图就能用于大部分基础表达式建模呢,这里列出两种较为广泛使用的观点:
(1) 表达式计算具有拓扑先后性,这意味着图的有向遍历可以用来建模表达式。
(2) 最早来自Bengio教授在著名的《Learning deep architectures for ai》文章中的观点,也就是神经网络是天然的有向图,注意这里是可以带环的,我们可以使用一些小技巧把环去掉。
同时注意到,这篇文章也是Theano框架的开发的参考之一,它也成为第一个基于计算图的深度学习框架。
传统的深度学习框架通常是双向的执行逻辑,它们使用Layer这种粗粒度的抽象结构,前向传播时,执行一个从0开始的递增循环。反向传播时,倒过来做一个递减循环。
这种多次执行的逻辑实际上是与有向图计算思想相悖的。有向图计算倡导的是”一波流“,控制逻辑简洁、简单,而Layer级别的抽象很难做到这一点。