【问题标题】:Clarification on NN residual layer back-prop derivation关于NN残差层反向传播推导的说明
【发布时间】:2018-03-20 05:37:47
【问题描述】:

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

如果计算普通隐藏层输出的公式是 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求导得到∂(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,比较复杂,但用数值求解似乎不太难。

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

编辑:

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

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

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

【问题讨论】:

  • 我看到你已经更新了这个问题。你能说一下o到底是什么意思吗?
  • 当我定义关系ow=x时,我说o来自上一层。为了清楚起见,我真的应该说 o 是前一层的*输出
  • 好的,在论文和我的回答中,x 是上一层的输出。那么∂o/∂x是什么意思呢?
  • ∂o/∂x 的价值/意义正是我的问题所要求的。当获取残差层的输出梯度时,它出现在反向传播方程中。似乎没有任何剩余反向传播的有效示例方程,否则它必然需要在那里解决。我确信有人不得不在某个时候弄清楚这一点,但我找不到任何地方显示如何通常处理残差层的输出梯度的推导。顺便说一句,我很感激你在这方面与我合作。
  • 好的,只是为了确保,我已经重新阅读了这个问题。查看我的答案的更新。

标签: neural-network deep-learning bigdata deep-residual-networks generic-derivation


【解决方案1】:

我认为您的残差网络有点过于复杂。这是由 Kaiming He 等人提供的 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的原始形状。

【讨论】:

  • 我没有使用 o 代替 x 创建新的符号,因为它们的含义不同。激活函数的输入(表示为 x)是前一层的输出(表示为 o)乘以权重,真的不应该混淆它们。您已经创建了使用 x 作为解决矩阵尺寸不匹配的函数的约定;解决尺寸不匹配不是我的问题的一部分,我认为这对答案无关紧要。
  • 我相信我已经找到了答案。您能查看arxiv.org/pdf/1603.05027v1.pdf 的图 5 并告诉我这对您是否有意义吗?他们写道 ∂o/∂x 等于 1。我相信这意味着 o 可以被视为一个简单的变量,因此不应将其分解为对前一层变量的操作。
  • 如果你同意那篇论文澄清了事情,那么我认为这个问题已经解决了。我想将您的答案标记为正确,以感谢您在这个问题上坚持我。您是否介意删除我已指出为误解的部分答案?如果你改写专注于你写的地方“在反向传播中没有做任何特别的事情”(我假设你的意思是它与非剩余层上的反向传播没有区别,即在逐层误差计算中没有额外的术语)并在该论文中包含信息,然后我可以给你信用。
  • 当然,一旦我明白你的意思是什么乘法,我会很高兴放弃o。本文中的ox=o*w是什么?
  • 论文将残差网络建模为 XL=Xl + Σi=lL -1 F(Xi,Wi)。该等式出现的句子提供了术语定义。我提供了两个要点,说明 o 起源的两种不同情况,前一层 XL-1,或者更浅的层 Xl。我的浅层案例自然来自上一层 XL-1 案例,所以没有必要解决这个问题。你可以把 o 当作 XL-1 得到一个完整的答案。
猜你喜欢
  • 2020-07-27
  • 2016-05-09
  • 2012-03-28
  • 1970-01-01
  • 2016-04-09
  • 2015-08-16
  • 1970-01-01
  • 2016-06-07
  • 1970-01-01
相关资源
最近更新 更多