我到处找,找不到任何可以解释残差层反向传播的实际推导的东西。这是我最好的尝试,也是我卡住的地方。值得一提的是,我希望的推导是从通用角度出发的,不必局限于卷积神经网络。
如果计算普通隐藏层输出的公式是 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*w=x 表达式(其中 x 将是输入值)。我认为这一定表明残差层不能源自输入层,但由于我已经看到具有源自输入的残差连接的网络架构图,这使我对上述推导产生怀疑。我看不出我哪里出错了。如果有人可以提供有关如何正确计算残差合并点的梯度的推导或代码示例,我将不胜感激。
编辑:
我的问题的核心是,在使用残差层并进行vanilla反向传播时,是否对添加残差的层处的错误进行了特殊处理?由于残差来自的层与添加残差的层之间存在“连接”,因此错误是否需要通过此“连接”向后分布?我的想法是,由于残差层提供从网络开始到更深层的原始信息,更深的层应该向较早的层提供原始错误。
根据我所看到的(阅读可搜索论坛的前几页、阅读基本论文和观看视频讲座)和下面的 Maxim 帖子,我开始认为答案是 ∂o/∂x = 0 并且我们将 o 视为常数。
有没有人在通过带有残差层的 NN 进行反向传播的过程中做任何特别的事情?如果不是,那么这是否意味着残差层仅在前向传递中是网络的“事件”部分?
最佳答案
我认为您使残差网络过于复杂了一点。这是 Kaiming He at al 的 the original paper 链接。
在 3.2 节中,他们将“身份”快捷方式描述为 y = F(x, W) + x
,其中 W
是可训练的参数。你可以看到为什么它被称为“身份”:上一层的值按原样添加,没有任何复杂的转换。这使得两件事:
F
现在学习残差 y - x
(在 3.1 中讨论),简而言之:它更容易学习。 通过恒等映射的后向流是微不足道的:错误消息原封不动地传递,不涉及逆矩阵(实际上,它们不涉及 in any linear layer )。
现在,论文作者更进一步,考虑了一个稍微复杂一点的
F
版本,它改变了输出维度(你可能已经想到了)。他们通常将其写为 y = F(x, W) + Ws * x
,其中 Ws
是投影矩阵。请注意,虽然它被写成矩阵乘法,但这个操作实际上非常简单:它向 x
添加额外的零以使其形状更大。您可以在 this question 中阅读有关此操作的讨论。但这对后向的改变很少:错误消息只是简单地裁剪为 x
的原始形状。
关于neural-network - NN 残差层反向传播推导说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46639188/