system: [SYSTEM]

user: 2. 池化核大小固定的池化方法 池化核大小固定的池化方法包含序相关和序无关的两类，这两类池化方法的区别在于池化结果是否与池化核中的各元素的序有关。与序无关的池化方法指的是池化核中各元素大小的排序不影响最后的池化结果，反之，与序相关的池化方法则需要注意池化核中各元素大小的排序。例如最大池化就属于序相关的池化方法，需要计算池化核内的各元素中的最大值作为输出。 2.1. 序无关的池化方法 序无关的这类池化方法又分为确定性池化方法和随机性池化方法。两种池化方法的区别在于池化层的计算方式是否会随着网络结构、池化核内元素等各种因素的不同而改变，会发生改变的则属于随机性池化，反之则属于确定性池化。例如平均池化就属于确定性池化，会保持计算池化核内所有元素的平均值这一计算方式，不会发生改变。 2.1.1. 确定性池化 (1) 谱池化 谱池化(Spectral Pooling) [ 1 ] [ 2 ] 是一种基于快速傅里叶变换(FFT)的池化方法。傅里叶变换可以把输入的信号从时间域转换到频率域。由于其效率较高和潜在的成本降低，离散傅里叶变换一直被深度学习界认为是快速卷积的自然方法，实验也证明使用离散傅里叶变换计算卷积比直接在空间域计算卷积要快得多。在卷积神经网络中，由于输入的图片是二维信号，因此需要二维离散傅里叶变换对图片进行转换，并构建一个基于FFT的卷积神经网络。谱池化首先把输入信号投影到频率基极，然后截断其中的部分频率来进行降维。具体来说，假设输入的是一张m × n的特征图而在池化后需要得到a × a的尺度(其中m、n均大于a)，谱池化先通过傅里叶变换将m × n的特征图转换为频率，再将频率中心的a × a部分截取出来，然后将截取的部分通过傅里叶变换的逆运算得到a × a尺度的特征图。由于m、n和a的大小都可以是任意值，因此谱池化同样可以对任意大小的图片进行处理且能输出任意维度的图片。谱池化的第一个优点在于通过精确的调整输入的分辨率用于匹配期望的输出维度来降低信息容量，在同种输出维度下相对于传统池化方法可以显著增加保留的信息量。第二个优点在于谱池化允许指定任意的输出维度，因此不易受其他池化方法所表现出的输出维度急剧下降对性能带来的负面影响。从CIFAR-10和CIFAR-100数据集的实验结果来看，谱池化的验证集错误率相较于随机池化降低了近一半，这能充分体现出谱池化的有效性。不过需要注意的是，由时间域转换到频率域在计算上非常密集，因此最好严格地保持在频率范围内。 (2) 双线性池化 细粒度识别长期以来都极具挑战性，因为这些类别之间的视觉差异很小。例如对不同的鸟的种类进行区分，有时需要捕获到鸟喙的特征才能识别其种类，同时，这些微小的差别也容易受遮挡、光照等自然环境因素影响。双线性池化(Bilinear Pooling) [ 3 ] [ 4 ] [ 5 ] [ 6 ] 是专门用来处理细粒度识别问题的一种池化方法，其基本思想是通过把两个网络提取的同一位置的两个不同特征结合起来用于细粒度识别。双线性卷积神经网络模型示意图如图1所示。 从图中可以看出，输入图像通过两个卷积神经网络，A和B，它们的输出在每个位置进行双线性组合。将A和B两个结果汇集在一起，得到双线性向量，然后通过分类层获得预测结果。其具体操作是，网络A可以对图片中各部分的坐标信息进行建模，而网络B则对图片中各部分的事物信息进行建模，再把同一位置通过网络A和B提取的特征向量，将网络A提取的特征向量转置再与网络B提取的特征向量相乘获得一个矩阵，之后将所有位置的矩阵相加起来组成新矩阵，接着将新矩阵拉伸成为一个向量，最后再通过softmax获得融合特征用于细粒度识别。对于细粒度识别任务，传统做法有两种，第一是手动定位每个关键位置，并对这些关键位置建模提取特征，第二种是将细粒度识别当成纹理识别进行训练。然而第一种方法需要人工干预，第二种方法所需的网络较深且识别率过低，尤其是当识别对象较小时。双线性池化可以很好的解决这些缺点，既不需要手动标记，也能够用较浅的网络来达到目的，而且这种双线性的形式可以大幅简化网络梯度运算。在CUB-200-2011数据集中的实验结果显示，双线性模型的两个网络选择MNet和DNet时能在该数据集中取得最高精度。 图1. 双线性CNN网络模型 (3) 协方差池化 协方差池化(Covariance Pooling) [ 7 ] [ 8 ] [ 9 ] 更多被用于图像表情识别和视频表情识别中。由于表情识别任务需要捕捉的是面部关键点的形变程度而不是面部关键点是否存在，因此传统的池化方法例如最大池化平均池化这类传统池化不适用于表情识别任务，而协方差池化则更加适合提取形变特征。假设 f 1 ， f 2 ， ⋯ ， f n 为多个特征，协方差池化的具体计算公式为： C = 1 n − 1 ∑ i = 1 n ( ( f i − f ¯ ) ( f i − f ¯ ) T ) (1) 从公式中可以看出，C为输出的协方差矩阵，其中 f ¯ 为所有特征值之和的平均数，n为特征的数量。由于表情识别任务的网络结构是在协方差池化后还需要输入进入正定矩阵网络(SPDNet)，也就意味着协方差矩阵C还需要转化为正定矩阵，转化为正定矩阵C + 的计算公式如下： C + = C + λ t r a c e ( C ) I (2) 其中trace(C)表示矩阵C的迹，λ为正则化参数，而I为单位矩阵。协方差池化的使用是灵活的，首先计算出的协方差矩阵，然后可以根据各种网络结构的需求来调整矩阵，例如对矩阵进行正则化处理。协方差池化属于二阶池化方法，对比大多数一阶池化方法可以更多地捕获特征图的信息。从RAF数据集的结果表明，在类似于处理表情识别这类任务中，使用协方差池化这种二阶池化方法可以获得相较一阶池化方法更高的准确率。但不可忽视的是，二阶池化方法的计算量也明显要高于传统池化方法。 2.1.2. 随机性池化 (1) Lp池化 Lp池化(Lp Pooling) [ 10 ] [ 11 ] 是一个以复杂细胞为模型的受生物学启发的池化方法，其计算方式用公式可以表示为： o = ( 1 N ∑ i = 1 N     v i p ) 1 / p (3) 其中o表示池化函数的输出，N表示池化框的大小，v代表这池化核内的各个元素的值，而p则是一个变量。当p取不同值的时候，池化函数也随之改变。当p = 1时，Lp池化对所有池化区域内的值取均值，相当于是传统的平均池化。而当p → ∞时，Lp池化对所有池化区域取最大值，则退化为最大池化。随着p值从1开始不断增大，Lp池化成功的实现了从平均池化逐渐转变为最大池化，是这两种池化推广的方法。大量实验表明，大多数问题的最优池化方法既不是平均池化也不是最大池化，而是介于两者之间的某种类型。其中，当p = 2时，也就是L2池化，在大多数图像分类问题上可以取得较好的效果，而当p = 12时，在SVHN数据集中识别图像中的数字的时候，能取得验证集中最低的错误率，其错误率相较于最大池化和平均池化低了将近一倍。由于Lp池化可以根据不同实验目的的需要而改变p值以达到最佳效果，因而Lp池化可以适用于大多数的卷积神经网络。 (2) 随机池化 随机池化(Stochastic Pooling) [ 12 ] [ 13 ] 是Lp池化概念的一种延伸形式，都能将最大池化和平均池化联系起来。而与其他池化方法不同的是，随机池化用一个随机过程代替了传统的确定池化操作，根据池化区域的活动给出的多项式分布，在每个池化区域随机选择一个值激活。更具体地，首先通过规范化区域内的激活来计算每个区域的概率p，具体的公式如下： p i = a i ∑ ​ a k ，   k ∈ R j (4) 其中R j 是池化域，不难看出每个池化域中的元素值越大，其概率p也越大，之后按照概率值的大小随机选择池化域一个值作为最终值。随机池化和最大池化的不同之处在于，最大池化将百分百保留池化区域里面的最大值，而随机池化则对池化区域中的最大值赋予最大概率被选中，但也不会完全忽略掉池化区域的其他值。这种池化方式简洁直观，具有较少的计算开销且不需要引入额外的超参数，因此可以方便的使用随机池化替换其他卷积神经网络中的传统池化方法。由于随机池化具有随机性，在很大程度上保留了最大池化的优势并改善了过于武断的不足，相当于引入了一种正则化方法，可以很好的避免卷积神经网络过拟合。因此，随机池化很大程度上保留了最大池化的优势并改善了最大池化的缺点，从CIFAR-10、CIFAR-100、MNIST和SVHN等数据集的实验结果中可以看出随机池化的错误率要远低于最大池化。然而随机池化也存在一定的限制，当池化域中存在部分元素值为负数时，按公式计算其概率也是负数，这是不合理的，因而使用随机池化时要确保池化层之前的激活层中激活函数算出的值不会是负数，如果激活函数使用的是Relu等具有非负输出的函数则可以规避该问题。 (3) 混合池化 混合池化(Mixed Pooling) [ 14 ] 通过把最大池化和平均池化进行融合，提出了一种新的映射方式。混合池化用随机采样代替确定性的池化操作，随机使用传统的最大池化和平均池化方法。混合池化的具体公式如下： (5) 其中，λ是0或1的随机值，表示选择使用最大池化还是平均池化。虽然最大池化和平均池化在部分数据集上能取得好的效果，但是当遇到一个新问题时，仍然对选用哪种方法更好缺乏指导。而混合池化就是最大池化和随机池化的线性组合，该方法以随机的方式改变了池化调节方案，在一定程度上解决了最大池化和平均池化所遇到的问题。这种混合池化可以很好的和其他形式的正则化方法例如数据增强、Dropout和权值分解等相结合来提升模型的整体性能。且这种混合池化卷积神经网络的在反向传播过程中也能根据参数λ的值来进行调整，不用担心因为混合了两种池化方法而导致无法反向传播。在CIFAR-10、CIFAR-100和SVHN数据集上的实验结果表明，混合池化在解决分割问题和提高分类精度方面优于传统的最大池化和平均池化。此外，混合池化还提供了一种新的思路，可以尝试将传统的池化方法的进行线性融合，如多种池化方法进行线性组合等，在特定的模型或数据集上可能会使性能进一步提高。 (4) 通用池化 大多数池化方法的计算方式是固定的，由于不同的CNN要实现的目的各不相同，所使用的数据集也是可变的，因此固定的计算方式不可能在多个不同的CNN上取得最好的效果，而通用池化则可以根据给定的问题和数据集生成任何池化函数。通用池化(Universal Pooling) [ 15 ] 的公式如下。 o 0 ， 0 = universal_pooling ( f 0 ， 0 ， f 0 ， 1 ， f 1 ， 0 ， f 1 ， 1 ) = π 0 ， 0 f 0 ， 0 + π 0 ， 1 f 0 ， 1 + π 1 ， 0 f 1 ， 0 + π 1 ， 1 f 1 ， 1 ≜ π ⊗ f (6) 其中f表示池化块中的元素，π表示池化权重。通用池化为每个通道选择池化权重π，池化权重π是在不同信道之间分别训练的，并将它们与其他特征提取部分一起训练，其具体操作是确定特征映射的每个池块中每个元素的贡献，相当于确定池权重π，并将⊗运算符应用于池化权重和特征映射中。例如平均池化，相当于每个元素的池化权重都是0.25，而通用池化，只要满足池化块中所有元素的权重π的和是1，就能进行正确的运算。由于池化权重π是从给定的数据集动态学习到的，因此替换网络中原有的池化方法将会提高性能，最后在CIFAR-10数据集中通过对比试验表明通用池化确实能取得更好的效果。 2.2. 序有关的池化方法 2.2.1. 基于序的池化 传统的池化方法是对经过激活层激活后的值进行操作的，不同的值可能会对池化计算方法产生影响。如随机池化，若激活后的值为负数，则无法计算选中该值的概率。但在一个池化区域中，尽管值有多种取值可能，但其排序一般是相对稳定的，因此基于序的池化方法(Rank-based Pooling) [ 16 ] 可以尽量避免取值变化的影响。基于序的池化方法分为三种，基于序的平均池化(RAP)、基于序的加权池化(RWP)和基于序的随机池化(RSP)，这三种池化方法的示意图如图2所示。 图2. 基于序的池化方法 首先根据池化核内值的大小进行逆序排序：以a表示排序的激活， a : T → { a max ， ⋯ ， a min } 。然后，根据它们在池化框中的位置将位置坐标分配给a(i)。设r为 r : T → { 1 ， ⋯ ， n } ，其中r(i)是激活i的序，n表示池化区域的大小。 a ( i ) > a ( j ) ⇒ r ( i ) < r ( j ) 如上图所示，假定a 22 为最大值，则赋予最小的序1，a 31 最小则赋予最大的序9，而若存在激活的值相等的时候，则添加如下约束。 a ( i ) = a ( j ) ∧ i < j ⇒ r ( i ) < r ( j ) 对于RAP，需要额外设置一个参数t，t是小于n的正整数。RAP的计算方式是选取池化框内最大的t个值，再计算出这t个值之和的平均数s作为输出。当t为1时，则退化为最大池化，而t为n时，则是平均池化，RAP通过调整t来实现从最大池化到平均池化的过渡。RAP相当于对每个值都赋予相同的1/n权重，然而更合理的假设是每个值重要性不同，RWP和RSP可以很容易地通过将较大的权重分配给较高的激活值来解决这个问题。对于RWP和RSP，需要先计算出池化框中各个值的权重p r ，具体公式为： P r = α ( 1 − α ) r − 1 r = 1 ， ⋯ ， n (7) 其中α是一个超参数，且0 < α < 1，这样设计权重公式是为了保证∑P r = 1。RSP是根据概率p随机选择一个值作为输出，而RWP则是通过加权求和的方式计算输出s，具体公式为： s = ∑ ​     p i a i (8) RWP和RSP可以根据数据集的不同来调整α的大小，对于大多数数据集，α设置为0.5左右时可以达到最好效果。在CIFAR-10、CIFAR-100和MNIST数据集上的实验结果表明，基于序的池化方法在多个数据集中的表现要明显优于传统池化方法。 2.2.2. 最大池化的改进池化方法 最大池化是最常用的池化方法之一，可以提取特征图中关键的特征，但是代价是完全忽略了其他特征，因此衍生出了很多基于最大池化的改进池化方法来弥补最大池化的不足。K-Max Pooling和Chunk-Max Pooling大多用在自然语言处理中，其中K-Max Pooling用来提取卷积层后一系列特征值中前k个最大值，并且保留这些特征值的先后顺序，其中当k = 1时则退化为最大池化。K-Max Pooling可以根据需求调整k值，能比最大池化保留更多信息。Chunk-Max Pooling则是先把卷积层后的所有特征向量进行分段，之后从每个分段中取最大值作为输出，最后同样能保留多个特征值。划分段落的方法既可以事先设置，也可以根据特征值动态划分。 广义最大池化(Generalized Max Pooling) [ 17 ] [ 18 ] 可以视为最大池化的泛化，可以根据全局描述符相似度来平衡频繁描述符和稀有描述符的影响。在很多细粒度识别的任务中，例如对鸟的种类进行分类，由于大部分鸟图中都有大量的树叶构成频繁描述符，而鸟类之间的区别的关键之处，例如鸟喙，在图片中占比过小而构成稀有描述符，这些无用的频繁描述符将对关键的稀有描述符造成较大影响。广义最大值池化是通过求解最优化问题来获得权重的过程，而权重则根据每个元素和其他元素的相似度来获得，相似度较低的稀有描述符则会有较大的权重，最终把每个元素进行加权求和作为输出。 分数最大池化(Fractional Max Pooling) [ 19 ] 是另一种特殊形式的最大池化。最大池化的池化框大小是n × n，其中n一般为2，而分数最大池化则允许n为非整数值，这样可以避免n为整数时由于池化核不相交而产生性能受到限制的问题。根据输出的特征图的尺寸大小a × a，将输入的尺寸为b × b的特征图平分成a × a块，并对每个块做最大池化的计算。在具体计算中，由于1 < (b/a) < 2，则固定间隔为1或2，且由于输入和输出特征图的尺寸固定，因此1和2的数量也固定，接着使用随机或伪随机的方式产生两个由1和2组成的序列，可以得知序列中一共有a项，这a项1和2的累加和为b。由于序列组成的随机性，分数最大池化减少了对各种数据集的过拟合。