网络训练的过程参数不断的改变导致后续每一层输入的的分布也发生改变,而学习的过程又要使每一层适应输入的分布,因此我们不得不降低学习率、小心地初始化。作者将分布发生变化称之为internal covariate shift。
关于BN层,这一篇博客讲得很好,我在这里转一下。
但是作者又说如果简单的这么干,会降低层的表达能力。比如下图,在使用sigmoid激活函数的时候,如果把数据限制到0均值单位方差,那么相当于只使用了激活函数中近似线性的部分,这显然会降低模型表达能力。为此,作者又为BN增加了2个参数,
用来保持模型的表达能力把BN放在激活函数之前,这是因为Wx+b具有更加一致和非稀疏的分布。
n∗n的卷积核都可以通过1∗n一维卷积后接n∗1一维卷积来代替。例如,一个 3×3 的卷积等价于首先执行一个 1×3 的卷积再执行一个 3×1 的卷积。他们还发现这种方法在成本上要比单个 3×3 的卷积降低 33%,这种非对称的卷积结构拆分,节省了大量的参数,其结果对比将一个大卷积核拆分为几个相同的小卷积核 ,效果更明显。这一结构如下图所示:
此处如果 n=3,则与上一张图像一致。最左侧的 5x5 卷积可被表示为两个 3x3 卷积,它们又可以被表示为 1x3 和 3x1 卷积。
本文的主要目的是研究如何在增加网络规模的同时,能够保证计算的高效率。
Rethinking这篇论文中提出了一些CNN调参的经验型规则,暂列如下:
避免特征表征的瓶颈。特征表征就是指图像在CNN某层的激活值,特征表征的大小在CNN中应该是缓慢的减小的。
高维的特征更容易处理,在高维特征上训练更快,更容易收敛
低维嵌入空间上进行空间汇聚,损失并不是很大。这个的解释是相邻的神经单元之间具有很强的相关性,信息具有冗余。
平衡的网络的深度和宽度。宽度和深度适宜的话可以让网络应用到分布式上时具有比较平衡的computational budget。
更小的卷积核
Inception Net v3 整合了前面 Inception v2 中提到的所有升级,还使用了:
RMSProp 优化器;
Factorized 7x7 卷积;
辅助分类器使用了 BatchNorm;
标签平滑(添加到损失公式的一种正则化项,旨在阻止网络对某一类别过分自信,即阻止过拟合)。
简而言之,就是将尺寸比较大的卷积,变成一系列3×3的卷积的叠加,这样既具有相同的视野,还具有更少的参数。
实验表明,这样做不会导致性能的损失。
Grid就是图像在某一层的激活值,即feature_map,一般情况下,如果想让图像缩小,可以有如下两种方式:
右图是正常的缩小,但计算量很大。左图先pooling会导致特征表征遇到瓶颈,违反上面所说的第一个规则,为了同时达到不违反规则且降低计算量的作用,将网络改为下图:
结构如左图表示,左边两个代表的是右图中的左边分支。
label smoothing除了上述的模型结构的改进以外,Rethinking那篇论文还改进了目标函数。
原来的目标函数,在单类情况下,如果某一类概率接近1,其他的概率接近0,那么会导致交叉熵取log后变得很大很大。从而导致两个问题: