基本概念
论文中使用到了很多深度学习的基础方法,为了更好的理解论文,这里先回顾和整理一下深度学习和卷积神经网络中的基本概念。
深度神经网络(DNN)
感知机
由人类的神经元的工作方式启发,产生了感知机人工神经网络(ANN)架构,输入两个参数和一个固定为1的偏置,经由神经元不同权重的计算,输出不同预测结果。不过由于早期的单层感知机无法处理异或问题,所以改进形成多层感知机。
多层感知机
由一层输入层,一层或多层隐藏层,一层输出层形成多层感知机。对与隐藏层的链接权重随机初始化,由输入层输入,经过隐藏层,最后通过输出层输出,测量输出误差,通过链式求导法计算每层每个节点输入对误差的贡献,最后使用梯度下降法调整各层权重,达到训练的目的。
激活函数
为了以上步骤能顺利进行,必须使用非线性激活函数,一般在每层的输出上使用,否则各个神经元之间的链接只会是一个稍微复杂的线性变换,无法解决复杂问题。常用的有ReLU、Sigmoid、Tanh等。本文使用的是ReLU激活函数,完整名称是线性整流单位函数,表达式为。
它的优点是计算快速,而且不容易导致梯度爆炸和梯度消失的问题,但是缺点会导致部分神经元失去作用。之后有比如SELU、ELU、leaky ReLU等严格好于ReLU的改进版,不过文章中并没有使用,我猜测是为了提高训练速度。
批量归一化(BN)
如果输入数据非常大,容易导致梯度消失或者梯度爆炸的问题,所以权重进行处理。权重初始化一般使用Glorot和He初始化,在训练过程中仍会出现问题,这时候需要使用批量归一化(Batch Normalization)。本篇论文中就需要使用批量归一化,还需要将其与卷积运算结合。批量归一化的方法和概率论中的标准化相似,使用公式:
正则化
深度神经网络属于机器学习,一样会遇到过拟合的问题,所以一样需要用到正则化。除了机器学习里的、正则化,还有神经网络独有的dropout正则化。具体方法是在每轮训练过程中,随机舍弃掉一些神经元,让它们不参与训练,一般随机删除40%~50%的神经元。这种看似破坏性的方法竟然十分有效,主要原因是可以避免个别神经元拥有极高的作用。此举可以让训练学习的特征强制分配给多不同的神经元,从而提高神经网络的弹性和泛化程度。
卷积神经网络(CNN)
视觉皮层
卷积神经网络起源于对大脑皮层的研究,人类大脑皮层会有一个小的局部视野,其中不同神经元会对视野中的不同的特征产生反应,并产生多个低阶模式,并由多个低阶模式组成高阶模式,最后对视野中的内容进行判断,现代的卷积神经网络就是基于此理论基础改进而来。
卷积层
卷积层类似人脑中的视觉皮层,卷积核类似视觉皮层中的神经元,用于提取输入图像中的不同特征。卷积核的大小决定了接受视野的范围。将卷积核和输入层进行卷积运算[1],如果想保持运算后输出结果尺寸不变,可以对输入层进行零填充。常见的有水平垂直卷积核,效果是提取横向和纵向的特征,其余的部位则被模糊掉,在本篇论文中,正是使用了类似的卷积核。在实际操作中,我们可以定义多个提取特征的卷积核,对于同一图可能会有多个通道则会生成很多的特征图。
池化层
为了减少多个卷积层带来的计算量,需要提取图像中的特征,这里需要用到池化层,最常用的是最大池化层,和卷积计算类似,这里每次只提取视野范围的最大值,其余的输入全部舍弃。还有一种是全局平均池化层,直接输出整个特征图的均值。
CNN架构
典型的架构就是若干卷积层+ReLU激活函数+池化层的拼装组合,最后加上全连接层和softmax层,输出预测结果。为了提高识别准确率,各个研究者展开了深入研究,本篇论文提出的ACNet就是架构之一,它是在其它成熟架构上的改进。常见成熟架构有LeNet-5、AlexNet、VGGNet、ResNet等。
以上是基础知识回顾,在掌握了以上内容之后,开始进行论文分析
观点背景
随着卷积神经网络的研究越来越透彻,它在我们生活中用处也越来越多,但是想让CNN拥有更高的识别率,这受限于终端设备的算力,所以如果能提出一个不需要增加预测难度以提高准确率的方法就很重要了。一方面有团队在研究全新的架构,比如SENet,结合残差段元和深度压缩的特征,大幅度准确率。而作者则更希望用一种类似插件的方法,额外添加在现在已有的成熟架构上,在不提高预测成本的情况下,提高预测的准确率。
方法概要
以3×3的标准卷积核为例,再此基础之上如果额外使用一个1×3和3×1的卷积核,置于水平和垂直中轴线上,将三者的输出结果相加,并称之为非对称卷积核(ACB),再应用ReLU函数,用这种方法可以更加有效的提取图像的特征。在预测时,可以直接将这三个卷积核相加进行预测,输出的结果相同。用这种方法会在训练的时候造成训练成本略微上升,但是却可以在不增加预测成本的情况下提高一定的准确率,并且对图像的翻转、旋转、边界框扭曲、颜色偏移拥有更高的鲁棒性。因为非对称卷积核可以在任何成熟架构中使用,所以可以在不增加额外超参数的情况下应用在现有成熟架构之上。
根据实验,随机消除纵横中轴线[2]上的块,准确率下降的速度比消除四角的块速度要更快,证明了在标准3×3卷积核上,骨架部位对于预测准确度的重要性比四角更大。将1×3、3×1卷积核在3×3卷积核的骨架部位相加之后,预测的结果比附加在边缘和不附加更好,证明ACB能显著提高骨架性能。
实现原理
利用卷积运算的可加性
根据卷积运算方法,很容易得到以下公式:
其中 表示输入矩阵 和 表示两个卷积核,卷积运算具有结合率。根据示例3×1和1×3卷积运算的结果可能会大一点,这时候可以缩小滑动窗口的范围用于适应标准卷积核输出结果,最后三者相加。根据式(1-1),在预测时可以直接将三个卷积核相加,这是实现ACNet的关键步骤。
验证批量归一化和分支的合并结果
因为在进行训练时,还需要对输入输出数据进行批量归一化,所以还需要验证直接将卷积核相加是否会导致结果的错误。一般的方法是首先将输入特征图和三个卷积核分别进行卷积运算,然后再分别进行批量归一化,形成均值为0,方差为1的分布。
批量归一化合并是将批量归一化和卷积运算步骤融合,变形公式,先对三个卷积核进行归一化,再进行卷积运算。分支融合是将输入特征图直接与三个卷积核相加的结果进行运算,将各自的偏置整合成一个偏置。经过验证后可知,在理论上不会导致误差,但因实际样例和随机初始化和反向传播,仍可能会出现不同的准确率表现。
性能表现
将ACB用在现有的成熟架构上进行试验,Top-1准确率[3]产生了有效的提升。在不增加预测时间的前提下,让Cifar-quick架构有了1%左右的提升,其余的VGG、ResNet-56[4]等有了0.3~0.7%的提升。
在更具有实际意义的测试中,比如在ImageNet进行具有128万张图像用于培训,5万张用于验证,输出结果有1000个分类的测试训练,同时对图像进行数据增强,比如边界框扭曲,左右翻转和颜色偏移等,发现实际效果和其它成熟架构比起来更加具有优势,具有0.7%~1.52%性能的提升,但不用额外花费更多的训练资源。这样的提升可以说是白给的,对于任何希望使用CNN训练并希望提高准确率的人来说都可以使用上这个架构。
深度探索
目前来说,虽然性能有着十足的提升,但是具体提升的原理还暂未研究透彻,这个额外加上的卷积核就像是个黑盒一样,所以还需要对如何提升准确率进行进一步的探索。
水平垂直卷积核和归一化的影响
在测试中水平卷积核、垂直卷积核、统一批量归一化三者对对准确率都有正面的影响,深入研究水平和垂直卷积核,两者对准确率都有提升,但是提升的程度不同。其中只有在ResNet-18架构上原始输入上略低于竖直卷积核,旋转、翻转后增加水平卷积核的准确率的提升均大于竖直卷积核,我们可以认为水平卷积核对提升准确率提供更高的贡献。
对旋转、翻转产生鲁棒性的原因
对于同样的一个特征,如果进行竖直翻转、旋转180°,发现合并了水平卷积核的验证准确率更高,其中可能的原因是我们对图片扩张进行竖直翻转的时候,水平卷积核仍然可以识别该特征,于是可以强化该特征;但是对于3×3的标准卷积核来说,翻转后的图形和之前的训练就完全不同了,需要重新学习,而旋转180°+水平翻转=竖直翻转,所以实现了对翻转变形的鲁棒性。
总之,这样的复合卷积核更容易对边缘进行预测,从而产生对旋转、翻转鲁棒性,提高准确率,尤其是水平卷积核。不过具体原理仍然不透明,这需要我们进行进一步的研究。
复合卷积核对骨架的影响
根据直觉,重叠在骨架上的复合卷积核会拥有更大的作用,相对而言,卷积核四角的的作用相对较小。为了验证假设,同时对照标准卷积核、中心复合卷积核、边缘复合卷积核骨架和四角块对准确率的影响程度,同时我们对每个块的影响程度进行标准化,使其值的范围位于,称之为重要性。
随机将卷积核骨架和四角的部分块值置为0,然后进行准确率测试。虽然只要移除了卷积核的一部分,预测的准确率总会下降,但是移除四角下降的速度更慢,而移除骨架下降的速度更快。这点在中心复合卷积核上更为明显,移除几乎所有四角块,准确率仍然保持在不移除的60%,而用边缘复合卷积核进行这项测试时,移除中心和四角块对准确率影响的程度几乎一致。由此可见,边缘块的重要性不如骨架块。
这时观察三种卷积核的重要性分布,标准卷积核正中心拥有最高的重要性,四角拥有较小;而中心复合卷积核则强化了标准卷积核的分布不均匀,四角下降到了0.4以下,而中心则为1,意味着有主导的作用;边缘复合卷积核三个卷积核重叠的地方并没有中心复核卷积核的强烈,同时该种模型预测的准确度低于中心复合卷积核。可以得知ACB可以显著增强骨架,同时提高性能,边缘复合卷积核可以提高边界重要性,但是不会降低其它部位重要性。
心得总结
论文亮点
这篇论文的关键在于它提供了非对称卷积核,将水平、垂直、标准卷积核组合在了一起,有效的提高的预测的准确率,关键在于以下三点
- 无须增加预测时间,也不用搜寻、调优超参数就可以提高预测准确率。
- 可以附加在现有的主流卷积神经网络架构上,不用另起炉灶。
- 强化了对旋转、翻转图形的鲁棒性
我认为前两点是最重要的,因为这意味着这种方法可以在不大改模型、不输入更多训练数据、不增加预测时间的前提下直接提高自身预测的准确度,而且对现有所有主流模型都有效果,覆盖面广、代价小、收益高。由于需要在标准卷积核的基础上额外训练2个卷积核,它仅增加了训练所需的时间。同时作者给出了即插即用的Pytorch、TensorFlow代码,可以直接附加在自己的项目中提高准确率,十分方便。
新的思考
除了给出一份方便的”插件”式的提升准确度的方法,作者还带来了新的思考和新的研究方向:
- 作者的测试和理论分析都是基于3×3卷积核的,我们能否将其应用到更大的卷积核上?
- 作者只强化了水平和竖直的中心对称轴,是否需要强化斜对角线?
- 强化一次就有如此大的提升,那能否强化更多次呢?根据理论,验证时不会有额外性能损耗。
- 为什么复合水平卷积核的效果比竖直的更好?
- 此架构对旋转和翻转拥有鲁棒性,那对平移、拉伸、透视呢?
- 对于更大的卷积核,或者长宽为偶数的卷积核,要如何分布放置水平和垂直甚至斜对角线卷积核,不同的放置方法又有什么影响?
- 边角的重要性对准确率的重要性更低又是因为什么,有没有能提升边角重要性的方法?
- ACB作用在不同架构上提升的幅度不一样,主要是什么原因导致的,能否根据每个架构的特点进一步优化,‘’因地制宜‘’呢?
- 本文没有计算将ACB作用在ILSVRC2017[5]年获胜的SENet架构上的实验结果,基于SENet的ACNet架构能否有更好的表现?
为了解决和验证以上问题还需要进行进一步的研究,在此基础上更加深入一定可以进一步优化ACNet,进一步提高准确率。
插件形式和分支特化
另外,ACNet的实现方法也十分具有参考价值,它是作为一个“插件”形式存在的,将ACB附加在其他卷积神经网络架构之上,这种方法有很多好处。
随着卷积神经网络架构的不断成熟,想要从头开始训练、测试、调参出一个新的架构不仅难度巨大,还需要消耗相当大的GPU资源,一方面我们可以继续寻找新的架构和新的方法,随着计算机硬件的快速发展,训练用GPU和设备的成本不断降低,终端设备性能的不断提高,我们一定可以找出更好的卷积神经网络架构,实现更高的准确率;与此同时,我们也可以用和作者类似的方式,在已经十分高效的卷积神经网络内核上增加新的方法,新的功能。
我认为我们可以依照软件工程中“高内聚、低耦合”的设计思路,设计出一个高效简洁、兼容性强的卷积神经网络内核,然后通过‘“插件”方法不断强化性能和功能性,这种方法在各个领域都有相当多的成功案例,我相信一定有办法将其运用到卷积神经网络的研究上。
根据ACNet强化了对旋转和翻转图片的鲁棒性,我想到能否对卷积神经网络架构进行各个功能分支的特化设计。比如设计出强化对拉伸图片的鲁棒性架构;或者设计出相对于准确性,大幅度优化识别速度的架构;针对在线学习,不断学习新特征新分类特别优化的架构等等。