CNN网络介绍与实践:王者荣耀英雄图片识别 (4)

VGGNet并没有疯狂的架构选择,没有在如何设定滤波器的个数,尺寸大小上做非常多的工作。整个VGG网络只用3*3卷积核,滑动步长2和2*2池化窗口,滑动步长2。整个过程就维持了这样的参数设定。VGG的关键点在于这个操作你重复了多少层,最后同样的这组参数设定的网络结构重复了16层。选择这个层的原因可能是他们发现这样有最好的表现。对于每张图片需要200M内存,所有的参数加起来,最终总的参数量会达到1.4亿。

为什么使用3*3滤波器?3*3是最小的能够捕获上下左右和中心的感受野,多个3*3的卷积层比一个更大尺寸滤波器卷积层有更多的非线性。在步长为1的情况下, 两个3*3的滤波器的最大感受野区域是5*5, 三个3*3的滤波器的最大感受野区域是7*7, 可以替代更大的滤波器尺寸多个3*3的卷积层比一个大尺寸的filter有更少的参数,假设卷积层的输入和输出的特征图大小相同为10,那么含有3个3*3的滤波器的卷积层参数个数3*(3*3*10*10)=2700, 因为三个3*3的filter可以看成是一个7*7的filter分解而来的(中间层有非线性的分解), 但是1个7*7的卷积层参数为7*7*10*10=4900 1*1滤波器作 用是在不影响输入输出维数的情况下,对输入线进行线性形变,然后通过Relu进行非线性处理,增加网络的非线性表达能力。

VGGNet不好的一点是它耗费更多计算资源,并且使用了更多的参数,结构图如下所示:

1.3.5 GoogLeNet

VGGNet性能不错,但是有大量的参数。一般来说,提升网络性能最直接的办法就是增加网络深度和宽度,这也就意味着巨量的参数。但是,巨量参数容易产生过拟合也会大大增加计算量。

一般文章认为解决上述两个缺点的根本方法是将全连接甚至一般的卷积都转化为稀疏连接。一方面现实生物神经系统的连接也是稀疏的,另一方面有文献表明:对于大规模稀疏的神经网络,可以通过分析激活值的统计特性和对高度相关的输出进行聚类来逐层构建出一个最优网络。“稀疏连接结构”的理解是这样的,用尽可能的“小”、“分散”的可堆叠的网络结构,去学习复杂的分类任务,Inception之所以能提高网络精度,可能就是归功于它拥有多个不同尺度的kernels,每一个尺度的kernel会学习不同的特征,把这些不同kernels学习到的特征汇聚给下一层,能够更好的实现全方位的深度学习。

普通的Inception结构如下图所示:

降维实现的Inception如下图所示,将256维降到64维,减少了参数量:

为什么VGG网络的参数那么多?就是因为它在最后有两个4096的全连层。Szegedy吸取了教训,为了压缩GoogLeNet的网络参数,他把全连层取消了。GoogLeNet完整结构如下图所示:

1.3.6 ResNet

由何恺明和同事完成的残差网络,他们不仅仅在2015年的ImageNet上获胜,同时还赢得了相当多的比赛,几乎所有重要比赛的第一名。在深度网络优化中存在一个著名的障碍是:梯度消失和梯度爆炸。这个障碍可以通过合理的初始化和一些其他技术来解决,但是随着网络的深度增加,准确度饱和并迅速减少,这一现象称为degradation,并且广泛的存在于深层网络中,说明不是所有的系统都很容易被优化。

对于plainnet 如果你单纯的提高网络层数,将没有什么用处。如上图,在cifar-10上,实线是测试集上的错误率,虚线是训练集上的错误率。我们看到层数更深的网络错误率反而更高,这不科学,按道理来说,层数更深的网络容量更大,那是因为我们在优化参数上做的不够好,没法选择更优的参数。而残差网络模型的训练错误率和测试错误率都随着网络深度的增加在持续的改进。训练ResNet需要2-3周8个GPU训练。

何恺明提出了深度残差学习的概念来解决这一问题。首先我们假设我们要求的映射是H(x),通过上面的观察我们意识到直接求得H(x)并不那么容易,所以我们转而去求H(x)的残差形式F(x)=H(x)-x,假设求F(x)的过程比H(x)要简单,这样,通过F(x)+x我们就可以达到我们的目标,简单来说就是上面这幅图,我们将这个结构称之为一个residual block。 相信很多人都会对第二个假设有疑惑,也就是为什么F(x)比H(x)更容易求得,关于这一点,论文中也没有明确解释。但是根据后的实验结果确实可以得到这一个结论。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxjyd.html