一. 背景
网络的结构越深,提取的特征越抽象,越具有丰富的语义信息。但是随着网络的加深,会存在梯度弥散或者梯度爆炸等问题(之前的解决方案是引入BN层(可以看成一种正则化的方式))。几十层的网络训练引入BN正则化能得到解决梯度问题,但是会引入网络“退化”问题,退化问题指的是:网络层数增加,但是在训练集上的准确率却饱和甚至下降了.
二. 怎么解决退化问题?–》 残差块
残差块打破了传统的神经网络n-1层的输出只能给n层作为输入的惯例,使某一层的输出可以直接跨过几层作为后面某一层的输入,其意义在于为叠加多层网络而使得整个学习模型的错误率不降反升的难题提供了新的方向。
残差块构成的网络叫残差网络:
没有残差块的网络叫做“plain network”,“plain network” 与 "resnet network"随着层数增加 精度的变化如下图所示:
shortcut connections 是实线(相加的维度一样),有的是虚线(相加的维度不一样,主要体现在filter个数不一样):
因为经过捷径连接, H(X)=F(X)+x,如果F(X)和x的通道相同,则可以直接相加(实线部分),不相同的话(虚线)有两种方法:
1). H(x)=F(x)+Wx,W是卷积操作,用来调整x维度
2). 直接通过zero padding 来增加维度(channel)
三. 瓶颈结构
网络结构深会导致时间花费更多,一般通过1*1的卷积核先进行降维后恢复维度。左图是两个3x3x256的卷积,参数数目: 3x3x256x256x2 = 1179648,右图是第一个1x1的卷积把256维通道降到64维,然后在最后通过1x1卷积恢复,整体上用的参数数目:1x1x256x64 + 3x3x64x64 + 1x1x64x256 = 69632,右图的参数数量比左图减少了16.94倍,因此,右图的主要目的就是为了减少参数量,从而减少计算量。