3

我到处寻找,找不到任何解释残余层反向传播的实际推导的东西。这是我最好的尝试,也是我陷入困境的地方。值得一提的是,我希望的推导是从一个通用的角度来看的,而不必局限于卷积神经网络。

如果计算普通隐藏层输出的公式是 F(x),那么带有残差连接的隐藏层的计算公式是 F(x) + o,其中 x 是前一层的权重调整输出,o 是前一层的输出,F 是激活函数。要在反向传播期间获得正常层的增量,需要计算输出的梯度∂F(x)/∂x。对于残差层,这是∂(F(x) + o)/∂x,可分离为∂F(x)/∂x + ∂o/∂x (1)。

如果所有这些都是正确的,那么如何处理∂o/∂x?在我看来,这取决于网络 o 来自多远。

  • 如果 o 仅来自前一层,则 o*w=x 其中 w 是将前一层连接到 F(x) 层的权重。对每一边求导得到 ∂(o*w)/∂o = ∂x/∂o,结果是 w = ∂x/do,这正好是 (1) ) 多于。在这种情况下,残差层的梯度只是 ∂F(x)/∂x + 1/w 是否有意义?将 1/w 解释为矩阵逆是否准确?如果是这样,那么实际上是由使用残差连接的 NN 框架计算的,还是有一些捷径可以从残差中添加误差?

  • 如果 o 来自网络中更远的地方,那么我认为推导会变得稍微复杂一些。这是一个示例,其中残差来自网络中更靠后的一层。网络架构为 Input--w1--L1--w2--L2--w3--L3--Out,从 L1 到 L3 层有残差连接。为了明确起见,第一个示例中的符号 o 被层输出 L1 替换。我们试图在反向传播期间计算 L3 的梯度,它具有 F(x)+L1 的前向函数,其中 x=F(F(L1*w2)*w3)。这个关系的导数是∂x/∂L1=∂F(F(L1*w2)*w3/∂L1,比较复杂,但是用数值求解似乎也不是太难。

如果上述推导是合理的,那么值得注意的是,存在推导失败的情况,即残差连接源自输入层。这是因为输入不能分解为 ao*w=x 表达式(其中 x 是输入值)。我认为这一定表明残差层不能源自输入层,但是由于我已经看到具有源自输入的残差连接的网络架构图,这使我的上述推导受到质疑。我看不出我哪里出错了。如果有人可以提供他们如何正确计算残差合并点的梯度的推导或代码示例,我将不胜感激。

编辑:

我的问题的核心是,在使用残差层并进行香草反向传播时,是否对添加残差的层的误差进行了特殊处理?由于残差来自的层和添加残差的层之间存在“连接”,因此错误是否需要通过该“连接”向后分布?我的想法是,由于残差层提供了从网络开始到更深层的原始信息,因此更深的层应该为更早的层提供原始错误。

根据我所看到的(阅读 googleable 论坛的前几页、阅读基本论文和观看视频讲座)和下面 Maxim 的帖子,我开始认为答案是∂o/∂x = 0 并且我们将 o 视为常数。

有没有人在通过带有剩余层的 NN 进行反向传播期间做任何特别的事情?如果不是,那么这是否意味着残差层仅在前向传递中是网络的“活跃”部分?

4

1 回答 1

3

我认为您使残差网络有点过于复杂。这是Kaiming He的原始论文的链接。

在第 3.2 节中,他们将“身份”快捷方式描述为y = F(x, W) + x,其中W是可训练的参数。你可以看到为什么它被称为“身份”:上一层的值是按原样添加,没有任何复杂的转换。这有两件事:

  • F现在学习残差y - x(在 3.1 中讨论),简而言之:它更容易学习。
  • 网络获得了与前一层的额外连接,从而改善了梯度流。

通过恒等映射的反向流程是微不足道的:错误消息原封不动地传递,不涉及逆矩阵(实际上,它们不涉及任何线性层)。

现在,论文作者走得更远,考虑了一个稍微复杂一点的版本F,它改变了输出维度(可能你已经想到了)。他们通常将其写为,投影矩阵y = F(x, W) + Ws * x在哪里。请注意,虽然它被写成矩阵乘法,但这个操作实际上非常简单:它添加了额外的零以使其形状更大。您可以在此问题中阅读有关此操作的讨论。但这几乎没有向后改变:错误消息被简单地裁剪为原始形状。Wsxx

于 2017-10-10T16:15:39.267 回答