Decoupled Neural Interfaces using Synthetic Gradients
Decoupled Neural Interfaces using Synthetic Gradients Abstract 神经网络的训练通常需要计算图向前推到,然后再向后传播误差更新权重。因此从某种意义上来说,网络的所有层都被锁定了,因为他们必须等待网络其他部分向前推理并向后传播才能对其进行更新。在这项工作中,我们引入了网络图的未来计算模型,来通过对模块进行解耦,从而打破这个约束。这些模型仅使用局部信息即可预测子图的结果。尤其是,当我们专注于对误差梯度进行建模:通过使用建模的合成梯度来代替真实的反向传播误差梯度,从而使得子图解耦,并且可以独立且异步的更新子图,即我们实现了解耦的神经网络接口。我们展示了前馈模型的结果,其中的每一层都是异步训练的;RNN的结果,可以预测其中一层的未来的梯度,从而延长了RNN有效建模的时间;还有分层的RNN系统的结果,在不同的时标有刻度。最后,我们证明了,除了预测梯度之外,相同的框架还可以用于预测输入,从而导致模型在向前传播和向后传播都是解耦的,等于两个独立的网络,他们可以共同学习,从而将其组成一个单独的功能网络。 Introduction 有向神经网络中的每个层(或者模块)都可以视为一个计算步骤,转换其输入数据。这些模块通过有向边链接,从而建立了前馈图,该图定义了网络输入的数据流,通过每个模块,产生网络输出。对输出定义loss函数来产生误差并通过网络图反向传播回去以更新每个模块的权重。 这种机制导致了如下几个形式的锁定locking: Forward Locking 前向锁定:在执行前向推理图中的先前节点之前,没有模块能够处理其输入数据。 Update Locking 更新锁定:在所有相关模块在前向图执行完毕之前,无法更新任何模块。 Backwards Locking 反向锁定:在所有相关模块在前馈和反向模型执行完之前,没有模块可以被更新。比如BP算法。 前向,更新,反向锁定限制了神经网络必须以顺序,同步的方式运行和更新。对于简单网络,看似良性,但是对于大型复杂不规则或异步时间尺度的多个环境中运行的网络系统就会有很大问题。 例如:分布式模型,其中模型的一部分是被许多下行的客户机共享和使用。这就意味着所有客户机必须完全执行并且将误差梯度传递会共享模型然后才能更新,这意味着这个系统训练速度由最慢的客户机决定。如果能够对当前网络的训练进行并行化,那么就可以极大地加快计算时间。 本项工作的目标是移除神经网络的更新锁定。这可以通过移除反向传播实现。为了更新模块i的权重θi\theta_{i},我们尽可能的近似了反向传播的函数: ∂L∂θi=fBprop ((hi,xi,yi,θi),…)∂hi∂θi≃f^Bprop (hi)∂hi∂θi \begin{aligned} \frac{\partial L}{\partial \theta_{i}} &=f_{\text {Bprop }}\left(\left(h_{i}, x_{i}, y_{i}, \theta_{i}\right), \ldots\right) \frac{\partial h_{i}}{\partial \theta_{i}} \\ & \simeq \hat{f}_{\text {Bprop }}\left(h_{i}\right) \frac{\partial h_{i}}{\partial \theta_{i}} \end{aligned} 其中h表示激活层,x是输入,y是监督(标签),L是总体损失。这使得其更新的依赖全部落在了h上,也就是模块i的局部信息。 该方法的前提是允许神经网络模块进行交互并且在没有更新锁定的情况下进行训练。在这里作者将传统的神经网络接口(神经网络中两个模块连接)替换为解耦神经接口(DNI)。简单来说,就是当一个网络层向另一个层传递激活值的时候,会有一个相关的模型,对该激活值产生一个预测的误差梯度。该预测的梯度仅仅是对该激活值的一个函数,而不依赖与其他事件状态或者损失。然后发送的那个网络层可以立即使用这个合成梯度来进行更新。通过移除更新和反向锁定,我们可以无需同步就能训练网络。我们还展示了初步的结果,将这一思想扩展并且也移除了前向锁定,从而使得网络的模块也可以在没有同步前向通过的情况下进行训练。当将其应用于RNN时,我们表明使用合成梯度可以使RNN建模的时间范围远大于BPTT的限制。我们还表明,使用合成梯度对两个在不同时间范围内的RNN进行解耦可以大大提高训练效果。 Decoupled Neural Interfaces 首先描述high-level的通信协议,该协议用于允许异步学习agents进行通信。 正如图1所示, Sender A 发送信息(激活值)ha给Receiver B。简单来说可以理解为A是前面的layer,B是后一个layer。B有一个utility是MB用于处理信号ha,来预测反馈。误差信号:δ^A=MB(hA,sB,c)\hat{\delta}_{A}=M_{B}\left(h_{A}, s_{B}, c\right) 其中,ha是信息(激活),B的状态SB,和一些其他的潜在信息c,例如标签或context。A可以立即利用该误差信号进行更新。B也可以及时完全评估真是的sigmaA,因此,B的utility模型可以被更新用于fit真是的utility,减少真实误差和合成误差的差异。 该协议允许A以A和B更新解耦的方式向B发送消息– A不必等待B评估真实效用就可以对其进行更新–并且A仍然可以学习发送消息到B。 我们可以将该协议用于网络的通信过程,从而产生所谓的去耦神经接口(DNI)。对于神经网络,反馈误差信号sigma_hat_A可以采用不同的形式,例如:梯度可以用作与反向传播一起使用的误差信号,目标信息可以用作与目标传播一起使用的误差信号,甚至可以用作结合到强化学习框架中的值。本文专注在通过反向传播和基于梯度更新的可微网络上。因此,专注于产生的误差梯度作为反馈sigma_hat_a,称为合成梯度。 ...