DenseNets与ResNet的本质区别
假设一张图片x0{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 }xℓ−1作为 ℓ\ellℓ层的输入,得到 ℓ\ellℓ层的输出 ,可用该xℓ{x_\ell }xℓ方程来表示: xℓ=Hℓ(xℓ−1){x_\ell } = {H_\ell }\left( {{x_{\ell - 1}}} \right)xℓ=Hℓ(xℓ−1)
-
ResNets增加了一个跨层连接,将自身与非线性转换的结果相加:xℓ=Hℓ(xℓ−1)+xℓ−1{x_\ell } = {H_\ell }\left( {{x_{\ell - 1}}} \right) + {x_{\ell - 1}}xℓ=Hℓ(xℓ−1)+xℓ−1 所以对于ResNet而言,ℓ\ellℓ层的输出加上对ℓ−1\ell-1ℓ−1层输出的非线性变换,这样可以直接将梯度从后层传向前层。然而,自身与经过 Hℓ{H_\ell }Hℓ得到的输出是通过求和的形式来连接的,这可能使网络中信息的传播受到影响。

图1.残余学习:构建块。 -
DenseNets为了更好的改善层与层之间信息的传递,提出一种不同的连接模式:将该层与之后的所有层进行连接。因此,ℓ\ellℓ 层将之前所有层的特征图[x0,x1,…,xℓ−1]\left[ {{x_0},{x_1}, \ldots ,{x_{\ell - 1}}} \right][x0,x1,…,xℓ−1]作为输入:xℓ=Hℓ([x0,x1,…,xℓ−1]){x_\ell } = {H_\ell }\left( {\left[ {{x_0},{x_1}, \ldots ,{x_{\ell - 1}}} \right]} \right)xℓ=Hℓ([x0,x1,…,xℓ−1]),输入是之前所有特征图的拼接。而前面resnet是做值的相加,通道数是不变的。

图2:具有三个密集块的深DenseNet。 两个相邻块之间的层称为过渡层,并通过卷积和池化更改特征图大小。
通过卷积和池化更改特征图大小。
以上这两个公式就能看出DenseNet和ResNet在本质上的区别。
DenseNets和ResNet是两种深度学习网络结构,它们的主要区别在于层间连接方式。ResNet通过跨层连接,将当前层与非线性转换的结果相加,而DenseNets则将每层与之后的所有层连接,输入是之前所有层特征图的拼接。这种设计使得DenseNets能更有效地传递信息。
868

被折叠的 条评论
为什么被折叠?



