前言
本周看了ResNet V2的论文以及对相关变体做一个简短介绍
ResNet V2
公式推导
V2论文提出了将激活函数位置调整到残差分支上。
-
深层单元的特征可以由浅层单元的特征和残差函数相加得到。残差网络是连加,普通网络是连乘。
-
回传的梯度不会消失,不论网络中的权值的值再小都不会发生梯度消失现象
任意深层单元的特征都可以由起始特征 x 0 与先前所有残差函数相加得到,这与普通(plain)网络不同,普通网络的深层特征是由一系列的矩阵向量相乘得到。
反向传播也是两条路径,其中之一直接将信息回传,另一条会经过所有的带权重层。另外可以注意到第二项的值在一个 mini-batch 中不可能一直是 -1
恒等映射的重要性
不同形式的变换映射也都会阻碍信号的有效传播,进而影响训练进程
恒等映射是最好的选择
预激活
将激活函数(ReLU和BN)移到权值层(Conv)之前,形成一种“预激活(pre-activation)”的方式,而不是常规的“后激活(post-activation)”方式得到的新的残差单元作为网络的基础结构,通过将激活函数不同的位置进行对比实验得出预激活形式下网络表现更好。
网络优化
使用原来设计的网络在起始阶段误差下降很慢,因为f是 ReLU 激活函数,当信号为负时会被截断,使模型无法很好地逼近期望函数;而使用预激活网络中的f是恒等映射,信号可以在不同单元直接传播。本文使用的 1001层网络优化速度很快,并且得到了最低的误差。
如图上所示,对于浅层网络,f为Relu对网络影响不大,但是在深层网络中差距还是比较明显的。同时使用了预激活的网络的训练误差稍高,但却得到更低的测试误差,本文推测是BN的正则化所致。
ResNet 变体
Wide-ResNet
DenseNet
SENet
ResNeXt
引入了一个被称为“基数”(cardinality)的超参数——即独立路径的数量,以提供一种新方式来调整模型容量。实验表明,通过增加“基数”提高准确度相比让网络加深或扩大来提高准确度更有效。作者表示,基数是衡量神经网络在深度(depth)和宽度(width)之外的另一个重要因素