关于NN残余层反向推导的澄清

问题描述 投票:2回答:1

我到处寻找,找不到任何可以解释残余层的背撑的实际推导的东西。这是我最好的尝试,也是我被困的地方。值得一提的是,我希望的推导是从一般性的角度来看,不必局限于卷积NN。

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

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

  • 如果o仅来自前一层,那么o * w = x其中w是将前一层连接到F(x)的层的权重。将每一边的导数相对于o得到∂(o * w)/∂o=∂x/∂o,结果是w =∂x/ do,它恰好是出现在(1)的项的倒数。 ) 以上。在这种情况下,残留层的梯度是∂F(x)/∂x+ 1 / w吗?将1 / w解释为矩阵逆是否准确?如果是这样,那么实际上是由使用剩余连接的NN框架计算的,还是有一些用于从残差中添加错误的快捷方式?
  • 如果o来自网络的后面,那么,我认为,推导变得稍微复杂一些。这是一个例子,残差来自网络中的一层。网络架构是输入 - 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,这更复杂,但似乎不太难以数值求解。

如果上述推导是合理的,那么值得注意的是,存在导出失败的情况,即剩余连接源自输入层的情况。这是因为输入不能分解为o * w = x表达式(其中x将是输入值)。我认为这必须表明残留层不能来自输入层,但是因为我看到网络架构图具有源自输入的剩余连接,这使我对上述推导产生怀疑。我无法看到我出错的地方。如果有人能够提供一个推导或代码样本来正确计算剩余合并点的梯度,我将深表感激。

编辑:

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

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

有没有人在通过具有剩余层的NN进行反击时做任何特殊事情?如果不是,那么这是否意味着剩余层只是前向传递的网络的“活跃”部分?

neural-network deep-learning bigdata deep-residual-networks generic-derivation
1个回答
3
投票

我认为你的遗留网络过于复杂了一点点。这里是Kaiming He在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的原始形状。

© www.soinside.com 2019 - 2024. All rights reserved.