Deep learning 关于深剩余网络的直觉
我在读《深度剩余网络》的论文,论文中有一个我无法完全理解的概念: 问题:Deep learning 关于深剩余网络的直觉,deep-learning,deep-residual-networks,Deep Learning,Deep Residual Networks,我在读《深度剩余网络》的论文,论文中有一个我无法完全理解的概念: 问题: “希望2层重量适合F(x)”是什么意思 这里F(x)用两个权重层(+ReLu非线性函数)处理x,所以期望的映射是H(x)=F(x)?剩余的在哪里 “希望2层重量适合F(x)”是什么意思 因此,所示的剩余单位通过使用两个权重层处理x获得F(x)。然后将x添加到F(x)以获得H(x)。现在,假设H(x)是理想的预测输出,它与基本事实相匹配。由于H(x)=F(x)+x,因此获得所需的H(x)取决于获得完美的F(x)。这意味着剩
x
获得F(x)
。然后将x
添加到F(x)
以获得H(x)
。现在,假设H(x)
是理想的预测输出,它与基本事实相匹配。由于H(x)=F(x)+x
,因此获得所需的H(x)
取决于获得完美的F(x)
。这意味着剩余单元中的两个重量层实际上应该能够产生所需的F(x)
,然后获得理想的H(x)
这里F(x)用两个权重层(+ReLu非线性函数)处理x,所以期望的映射是H(x)=F(x)?剩余的在哪里
第一部分是正确的<代码>F(x)从x
中获得,如下所示
x -> weight_1 -> ReLU -> weight_2
F(x) + x -> ReLU
x -> weight_1 -> ReLU -> weight_2 -> ReLU -> ... -> x
x -> weight_1 -> ReLU -> weight_2 -> ReLU -> ... -> 0 # look at the last 0
H(x)
从F(x)
中获取,如下所示
x -> weight_1 -> ReLU -> weight_2
F(x) + x -> ReLU
x -> weight_1 -> ReLU -> weight_2 -> ReLU -> ... -> x
x -> weight_1 -> ReLU -> weight_2 -> ReLU -> ... -> 0 # look at the last 0
所以,我不明白你问题的第二部分。残差为F(x)
作者假设残差映射(即F(x)
)可能比H(x)
更容易优化。为了用一个简单的例子来说明,假设理想的H(x)=x
。那么对于直接映射来说,学习身份映射是很困难的,因为有一堆非线性层,如下所示
x -> weight_1 -> ReLU -> weight_2
F(x) + x -> ReLU
x -> weight_1 -> ReLU -> weight_2 -> ReLU -> ... -> x
x -> weight_1 -> ReLU -> weight_2 -> ReLU -> ... -> 0 # look at the last 0
这样,用所有这些权重和Relu在中间进行近似映射是困难的。
现在,如果我们定义所需的映射H(x)=F(x)+x
,那么我们只需要得到F(x)=0
,如下所示
x -> weight_1 -> ReLU -> weight_2
F(x) + x -> ReLU
x -> weight_1 -> ReLU -> weight_2 -> ReLU -> ... -> x
x -> weight_1 -> ReLU -> weight_2 -> ReLU -> ... -> 0 # look at the last 0
实现上述目标很容易。只要将任何权重设置为零,您将得到零输出。添加回x
,您就可以得到所需的映射
剩余网络成功的另一个因素是从第一层到最后一层的不间断梯度流。这超出了你的问题范围。有关这方面的更多信息,您可以阅读论文“深度剩余网络中的身份映射” 谢谢你的回答。对于简单的H(x)=x,残差是F(x)=H(x)-x,但我在维基百科中读到了“残差”的定义。当H(x)不是一个简单的函数时,这让我感到困惑,为什么我们仍然可以将残差表示为H(x)-x?问题不在于为什么我们仍然可以将残差表示为
H(x)-x
,因为这是通过构造实现的。您学习F(x)
并添加x
,因此H(x)-x
自动成为残差。这里的问题应该是为什么学习F(x)
可能比H(x)
容易。我不认为有任何具体的答案,因为作者自己在原始论文中假设了这一点。这种成功更多地归功于这样一个事实:通过构造,残余网络允许梯度不间断地流动,这与传统的非残余网络不同。