2.3 残差网络 - 2
Residual Networks (ResNets)
ResNet论文中指出,如果没有残差、没有这些跳跃连接,随着网络深度的加深,训练错误会先减少,然后增多。而理论上,随着网络深度的加深,应该训练得越来越好才对。实际上,如果没有残差网络,对于普通网络来说,深度越深意味着用优化算法越难训练,随着网络深度的加深,训练错误会越来越多。
但ResNets不同,即使网络再深,训练的表现却依然不错,比如说训练误差减少,就算是训练深达100层的网络也不例外(甚至1000层)。但对x的**,或者这些中间的**能够到达网络的更深层。残差模块的方式有助于解决梯度消失和梯度爆炸问题,在训练更深网络的同时,也能保证良好的性能。也许从另外一个角度来看,随着网络越来深,网络连接会变得臃肿,但是ResNet确实在训练深度网络方面非常有效。
2.4 残差网络为什么有效
Why ResNets work?
假设大型网络Big NN,输入为X,输出**值为a[l]。给这个网络加上一个残差模块,类似上节,加入两层以及一个跳跃连接之后,输出的**值为a[l+2]。假设网络结构中的**函数均为ReLu,则有:
a[l+2] = g( a[l] + z[l+2] ) = g( W[l+2]*a[l+1] + b[l+2] + a[l] )
上式中,如果使用L2正则化或权重衰减,W[l+2]的值会进一步减小。假设W[l+2]为0,b[l+2]也为零,则有a[l+2] = a[l]。这表明,即使给神经网络增加了这两层,它的效率也不会弱于更简单的神经网络,因为学习恒等函数对它来说更简单。不论是把残差块添加到神经网络的中间还是末端位置,都不会影响网络的表现。
另一方面,如果这些隐藏层单元学到一些有用信息,那么它可能会比学习恒等函数表现的更好。而这些不含有残差模块的深度网络情况就不一样了,当网络不断加深时,就算是选用学习恒等函数的参数都很困难,所以很多层最后的表现反而变差。
此外,由于采用了跳跃连接,z[l+2] 与a[l]的维度需要相同,残差模块使用了很多same卷积。
Plain 转化为 ResNet
2.5 网中网以及1x1卷积
Network in Network and 1×1 convolutions
如上图所示,1×1卷积可以从根本上理解为对这32个不同的位置都应用一个全连接层,假设1x1的卷积核有m个,则6x6x32的输入,经过1x1x32的卷积后,输出为6x6xm。输入输出尺寸虽然一致,但经过卷积加入非线性的信息(参数更少)。
通过修改卷积核的个数,可以实现保持/压缩/增加通道个数作用。
2.6 Inception模块简介
Inception network motivation
Inception层类似结构
上图中,28x28x192的输入经过如下计算:
1、1x1卷积,输出为 28x28x69;2、3x3 same卷积,输出为28x28x128;3、5x5 same卷积,输出为28x28x32;4、MAX Pooling same s=1 输出为28x28x32 (在第三个维度192上也要改变步长,s=192/32=6)
最后将四种操作的输出,concat起来输出为28x28x256。
Inception网络的基本思想是不需要人为决定使用哪个过滤器或者是否需要池化,而是由网络自行确定这些参数,可以给网络添加这些参数的所有可能值,然后把这些输出连接起来,让网络自己学习它需要什么样的参数,采用哪些组合。
5x5卷积存在的计算量问题:
直接计算,将会有28x28x32 x 5x5x192 ≈ 1.2亿次乘法运算。
解决方案:引入1x1卷积层
中间引入1x1的卷积层,又称为瓶颈层,共有 28x28x16 x 192 + 28x28x32 x 5x5x16 ≈ 1244万次乘法运算,足足减少到了十分之一的运算量。这也是1x1卷积的有效之处。而且,事实证明,只要合理构建瓶颈层,既可以显著缩小表示层规模,又不会降低网络性能,从而节省了计算。