DenseNets与ResNet的本质区别

DenseNets与ResNet的本质区别

假设一张图片 x 0 {x_0} x0在卷积网络中传播。网络共有 L 层,每一层都有一个非线性转换函数 H ℓ ( ∙ ) {H_\ell }\left( \bullet \right) H()(定义为三种操作的组合函数,分别是:BN、ReLU和卷积),其中 ℓ \ell 表示第几层。用 x ℓ {x_\ell } x 表示第 ℓ \ell 层的输出。

传统的前馈网络是将 ℓ − 1 \ell-1 1 层的输出 x ℓ − 1 {x_\ell -1 } x1作为 ℓ \ell 层的输入,得到 ℓ \ell 层的输出 ,可用该 x ℓ {x_\ell } x方程来表示: x ℓ = H ℓ ( x ℓ − 1 ) {x_\ell } = {H_\ell }\left( {{x_{\ell - 1}}} \right) x=H(x1)

  • ResNets增加了一个跨层连接,将自身与非线性转换的结果相加: x ℓ = H ℓ ( x ℓ − 1 ) + x ℓ − 1 {x_\ell } = {H_\ell }\left( {{x_{\ell - 1}}} \right) + {x_{\ell - 1}} x=H(x1)+x1 所以对于ResNet而言, ℓ \ell 层的输出加上对 ℓ − 1 \ell-1 1层输出的非线性变换,这样可以直接将梯度从后层传向前层。然而,自身与经过 H ℓ {H_\ell } H得到的输出是通过求和的形式来连接的,这可能使网络中信息的传播受到影响。
    DenseNets与ResNet的本质区别_第1张图片
    图1.残余学习:构建块。

  • DenseNets为了更好的改善层与层之间信息的传递,提出一种不同的连接模式:将该层与之后的所有层进行连接。因此, ℓ \ell 层将之前所有层的特征图 [ x 0 , x 1 , … , x ℓ − 1 ] \left[ {{x_0},{x_1}, \ldots ,{x_{\ell - 1}}} \right] [x0,x1,,x1]作为输入: x ℓ = H ℓ ( [ x 0 , x 1 , … , x ℓ − 1 ] ) {x_\ell } = {H_\ell }\left( {\left[ {{x_0},{x_1}, \ldots ,{x_{\ell - 1}}} \right]} \right) x=H([x0,x1,,x1]),输入是之前所有特征图的拼接。而前面resnet是做值的相加,通道数是不变的。
    在这里插入图片描述
    图2:具有三个密集块的深DenseNet。 两个相邻块之间的层称为过渡层,并通过卷积和池化更改特征图大小。

通过卷积和池化更改特征图大小。

以上这两个公式就能看出DenseNet和ResNet在本质上的区别。

你可能感兴趣的:(机器学习/深度学习,图像处理与机器视觉)