【VALSE前沿技术选介16-23期】
http://mp.weixin.qq.com/s/zYUh1UtKpxf2CkdZ0Hykmg【VALSE前沿技术选介16-23期】无锁的神经网络训练方式 Winsty
首先跟大家说声抱歉,这个栏目由于两位作者工作和学习的原因,停更了一段时间,我们下面会逐步恢复更新。同时也希望有兴趣一起维护这个栏目的同学在后台联系我们~
下面开始正文~
今天给大家介绍的文章是来自于DeepMind的“Decoupled Neural Interfaces using Synthetic Gradients”, 这篇文章最大的意义不在于其性能,而在于提供了一种全新认识神经网络训练的方式,十分有启发性。
现代神经网络一般可以被看作一个有向无环图DAG模型。在训练过程中,基本都是依赖反向传播算法和其变种优化。由于深度神经网络本质上是一个嵌套层数非常多的复合函数,所以在其工作的时候,必须严格依赖其前序层完成forward操作进行预测,以及后续层完成backward操作进行更新。这种天然的属性使得每层之间的并行优化变得非常困难,这也是这篇文章想要解决的问题。
于是…… 作者在这里就开了一个非常清新的脑洞:既然神经网络已经被证明在各种问题中是非常成功的functional approximator,那是不是NN也可以用来直接预测gradient呢?正是基于这样的一个想法,作者将神经网络训练的过程分为了相互解耦的两部分( Decoupled Neural Interfaces):通过gradient predictor无锁地同时更新神经网络每一层,以及通过BP传回的gradient更新gradient predictor。其中这个gradient predictor使用其对应层的输出作为输入,输出的便是”猜测”到的gradient。其示意图如下:
这样,每一层在得到了其输出之后,可以立刻通过gradient predictor得到更新用的gradient进行更新不必等待整个网络forward+backward到此层。
同样的思路也可以应用的RNN中,除了前面提到的解耦之外,在RNN中还有另外一个好处:我们知道在传统使用BP训练RNN中由于不可能将RNN unroll到无限长度,我们经常做的一个近似就是给定最长展开时间T,忽略更久的依赖。然而如果我们有了这样的一个gradient predictor,我们可以将更长时间的gradient通过predictor表达。在实验中,作者也确认了类似的结果。而且传统的BPTT也可以结合DNI,其中使用BPTT展开T时刻,同时使用DNI预测超过T部分的gradient,不出所料这样的模型在结果上更胜一筹。
作者对这种基本的模型做了两种拓展:
因为原始网络和gradient predictor是完全解耦的,那么我们完全可以以不同频率来训练这两部分。尤其对于这样一个情况而言,因为要等待backward传回的准确gradient,gradient predictor的训练频率应比原始的网络更低。
我们可以使用标签信息来改善gradient predictor的精度,这里最简单的一种方式就是对于每一类数据训练不同的gradient predictor。作者把这种模型叫做cDNI。
脑洞开得更大一些,将每一层的输入也用一个NN模拟,这样就可以做到完全无锁更新。
下面是针对这两种拓展的一些测试,可以看到cDNI可以非常显著地改善结果。更低的update频率,尤其是在cDNI的setting下,对结果无太大影响。在MNIST这种简单任务上,完全无锁更新也取得了相当不错的结果。当然我是不相信每一层的输入是可以通过一个小的NN直接从输入来模拟的,否则我们为什么还需要更深的网络呢?尤其这样的近似误差对于后续层来讲会越来越大,对于较深的网络应该是不work的。
另外一点可能有改进的地方:既然都是用了predictor去预测gradient,那是否在这个gradient中引入一些随机性会带来更好的结果呢?之前有不少paper分别证明,随机的gradient noise对于提高泛化能力相当有帮助。
说了这么多,DNI在目前各种deep learning刷分的浪潮中给我带来了很多新的理念。虽然也许只是这浪潮中的一朵小浪花,但是作为一篇论文,能启发后续研究者的思考就已经非常优秀了。也希望能有更多优秀的工作革新深度学习中的优化问题,从根本上解决这个从理论到时见上都非常重要,然而相对来说进展并不多的问题。
页:
[1]