ResNet研读的的一些杂记
网络结构的亮点(源于VGG19)
- 超深的网络结构
- 提出residual模块和短路连接,有效解决深层网络的退化问题。
- 使用Batch Normalization进行批归一化,有效解决梯度消失或者梯度爆炸的现象。
两种不同的block(维度匹配和参数减小的杀手锏)
右侧的NeckBottle,先使用1*1卷积用来升维或降维。
BasicBlock(左侧)
使用两层卷积完成。
BottleNeck(右侧)
使用三层卷积完成。第一层卷积大小33,stride为2,进行降维。最主要的是,对于shortcut捷径分支,也使用11卷积操作。方便了主干分支和捷径分支的维度匹配,因为不同维度是无法相加的。
ResNet18、34、152网络的输出(对原输入32倍下采样,最后平均池化拍平)
网络结构如下图所示
虚线残差结构
相比普通的残差结构,虚线残差结构通过1*1卷积改变维度。
残差学习有效解决深层网络退化问题(通过短路连接实现)
对于深层网络的学习,可以从浅层进行堆叠,极差的情况是什么也不学习,仅仅复制浅层特征,称为恒等映射。
短路连接的注意事项
对于短路连接,残差映射F(x)和x进行相加的时候,特征维度很重要,因此需要1*1的卷积做升维和降维,实现维度匹配。
但是对于1*1卷积去做维度的匹配会出现参数增加,计算量增大的情况。此时可以先用pooling进行下采样,在进行zero-padding
Batch Normalization的实现过程(更高维度的理解,求的是谁的均值谁的方差)
下面对于BN的理解纯属个人见解。首先需要知道通道是什么,其实卷积之后的feature map就是一个一个的通道。我们放入网络的输入,是一批一批的图片,那么经过卷积之后会生成多个feature map(即通道)。假设batch0,batch1的通道各有4个,那么对两个batch的channel0的所有元素求和、除以channel0的元素总数,就得到了这个通道的均值ui;对于方差的求解同理,之后对channel0进行归一化,以此类推完成channel2、3、4的归一化。这就是对batch0和batch1完成批归一化。
Batch Normalization详解(原理+实验分析)