刚下,有的功能不能用是怎么回事。(为什么有些功能用不了)
814
2022-05-30
编辑:忆臻
https://www.zhihu.com/question/337470480
本文仅作为学术分享,如果侵权,会删文处理
机器学习算法与自然语言处理报道
编辑:忆臻
https://www.zhihu.com/question/337470480
本文仅作为学术分享,如果侵权,会删文处理
机器学习算法与自然语言处理报道
卷积神经网络有哪些大胆又新奇的网络结构?
你大概已经见惯了基本的卷积结构,对残差网络也了如指掌,对分组卷积也烂熟于心,也知道模型压缩的一些技巧,不过今天这里要说的,大部分同学可未必知道噢。
大众的模型结构咱们不讲,今天从卷积方式,通道变化,拓扑结构等各方面给大家介绍几个模型,立志于在这个方向发文章的同学,可要看仔细了。
1 渐变的宽度-金字塔结构
这是一个通道数的变化方式相关的网络结构。
Pyramidal Residual Networks
通常来说,网络结构的通道数量变化是突变的,那有没有网络的增加是缓慢变化的呢?这就是金字塔结构了,名为Pyramidal Residual Networks。
大家都知道,CNN等结构在特征图尺度减小的时候,通常会随之增加特征图的通道数目来增加高层的表达能力,这是模型性能的保证,大部分的模型其特征图通道数的增加是跳变的,比如从128增加到256。
之前我们讲述过随机删减深度的残差网络证明了深度残差网络的深度其实没有想象中那么深,在文章“Residual networks behave like ensembles of relatively shallow networks[C]”中的研究也表明删除掉一些block并不会显著降低性能,但是降采样的网络层除外。
本篇文章基于这个现象,认为要降低降采样的敏感性,必须要让通道的变化是缓慢的,即随着层数增加,每一层都慢慢增加宽度,命名为金字塔结构,如下。
这里a图是线性增加,b图是指数级增加。
那么到底性能如何呢?首先看下训练曲线对比:
这里两个网络的参数差不多,都是1.7M左右,从曲线上看,性能也相当。
另一个要关注的问题是,金字塔ResNet有没有实现它的初衷,即改善降低分辨率的网络层被删除时带来的性能下降,结果如下:
从结果看来,错误率确实降低了。更加具体的实验结果,大家自己去看论文吧。
2 分支众多-分形结构
这是一个多分支结构相关的网络结构。
FractalNet
残差网络可以使得上千层的网络结构设计成为可能,但并不是只有残差网络可以做到,FractalNet(分形网络)便是如此。
分形是一个数学概念,指的是具有以非整数维形式填充空间的形态特征,也就是说它的有效维度不是整数。不过我们这里可以不用关注它的数学定义,而是关注它的,分形几何结构的一部分具有和整体相似的结构,即自相似,如下图形:
分形网络,顾名思义也是这样的特点了,局部的结构和全局相似,如下图:
可以看到包含了各种长度不同的子路径,从左到右:
第一列路径只有一条,长度l。
第二列路径两条,长度l/2。
第三列路径四条,长度l/4。
第二列路径八条,长度l/8。
它与残差网络的不同之处在于,绿色模块表示的非线性变换,即下一层不可能直接得到上一层的信号,而是经过了变换。
这样的一种包含了不同深度的子网络,与之前提过的stochastic depth有异曲同工之妙,它也可以被看作是不同深度的网络的ensemble。
上面展示了两种路径,训练时混合使用。
Global: 只选择一条路径,且是同一列,这条路径就是独立的强预测路径。
Local:包含多个路径,但是保证每一层至少要有一个输入。
那么结果如何呢?
如上,与各种网络进行了对比,性能很好。在添加了drop-path技术后,还有极大提升,并且单独只拿出其中最深的一条路径所得的网络,都有接近最好的模型的性能。
与残差网络的相关研究一样,分形网络的研究也表明路径的有效长度才是训练深度网络的真正影响因素,不论是分形网络,还是残差网络,都拥有更短的有效的梯度传播路径,从而使得深层网络训练更不容易过拟合。
3 一切可连-环形网络
这是一个基于跳层的复杂拓扑网络结构。
CliqueNet
DenseNet通过复用不同层级的特征图,提高了通道的利用率,不过它的连接是前向的,即信息只能从浅层向深层传递,而CliqueNet则更进一步,信息的传递是双向的。
结构如上图所示,CliqueNet不仅有前传的部分,还有后传,这种网络架构同时受到了RNN等循环网络和注意力机制的启发,使得特征图重复使用而且更加精炼。
CliqueNet的训练包含两个阶段。第一个阶段与 DenseNet 相同,即图中的Stage-1,此时浅层特征向深层进行传递,这可以视为初始化过程。
第二个阶段中每一层不仅接受前面所有层的特征图,也接受后面层级的特征图反馈。可以看出这是一种循环的反馈结构,可以利用更高级视觉信息来精炼前面层级的特征,实现空间注意力的效果。实验结果表明,它有效地抑制了背景和噪声的激活。
整体的网络架构如上:网络由很多的block组成,每一个block的stage II的特征通过global pool串接生成最终的特征。与DenseNet的不同之处在于,随着网络架构,每一个block的输入输出特征图不需要增加,从而更加高效,结果如下:
从上表可以看出,参数量和精度是非常具有优势的。
4 不规则的卷积核-可变形网络
这是一个卷积核的形状相关的网络结构。
Deformable Convolution
卷积操作本身具有非常固定的几何结构,标准的卷积操作是一个非常规矩的采样,通常是正方形,如果卷积核采用非规矩的采样,即它的形状不再是标准的方形,而是任意形状,则称之为可形变卷积(Deformable Convolution)。
要描述上面的卷积核,不仅仅需要权重系数,还需要每一个点的偏移量,可变形卷积的思想最早以Active Convolution的形式被提出。
在Active Convolution中,卷积核的各个分量都有自己的偏移量,对于一个3*3的卷积,就包含了18个系数,其中X方向和Y方向的偏移量各9个。不过各个通道共享该系数,所以与输入输出通道数无关。
对于输入通道为M,输出通道为N,使用3*3的卷积的Active Convolution,权重参数量为M*N*3*3,偏移参数量为2*3*3,远远小于权重参数量,所以增加的参数量几乎可以忽略不计。
在Deformable convolutional networks,每一个通道不共享偏移量,偏移参数量为2*M*3*3,增加的参数量比Active Convolution更多,但是相比卷积核权重参数量M*N*3*3,仍然小很多,所以不会大幅度增加模型的大小,而且实际实现时可以对输出通道进行分组。
从上图就可以看出可变形卷积有更灵活的感受野。
可变形卷积的实现只需要增加偏移量的学习,实际就是多了一个offset层,给offset输出通道数变量,我们还可以对输出进行分组,控制要学习的变形的种类。
最后看一下参数对比和性能。
实验了各个网络层的结果,参数量的增加很小,性能也是提升的。具体的效果如何,大家不妨用自己的实验结果来验证。
5 测试可变的网络-可分叉网络
这是一个推理时动态变化的网络结构。
BranchyNet
通常来说模型训练完之后结构就是固定的,测试时图片沿着固定的通路进行计算。然而测试样本本身有不同的难度,简单的样本只需要少量的计算量就可以完成任务,困难的样本则需要更多的计算量。
如上图所示,它在正常网络通道上包含了多个旁路分支,这样的思想是基于观察到随着网络的加深,表征能力越来越强,大部分简单的图片可以在较浅层时学习到足以识别的特征,如上图中的Exit 1通道。一些更难的样本需要进一步的学习,如上图中的Exit 2通道,而只有极少数样本需要整个网络,如Exit3通道。这样的思想可以实现精度和计算量的平衡,对于大部分样本,可以用更小的计算量完成任务。
在训练的时候,每一个通道都会对损失有贡献,越靠近浅层的网络权重越大。多通道的损失不仅增强了梯度信息,也在一定程度上实现了正则化。
将BranchyNet的设计思想用于LeNet,AlexNet,ResNet结构后,在维持性能的前提下,加速效果明显。
对于拥有N个分支的网络,需要的就是N-1个阈值,因为最后一个分支不需要阈值。
LeNet系列网络可以让超过90%的样本在第一个分支提前终止,AlexNet提前终止样本比例也超过一半,ResNet提前终止样本比例超过了40%。
卷积之上的新操作
一般认为,卷积核的作用是为了获取局部特征,这些特征组合在一起,模型就很容易识别。固定大小的卷积核会获得固定大小的特征。
我们能在图像上发现这一点,卷积核会把对应大小的图像的像素值变为一个值,我们将这个值称为这一特定的区域的特征。
但是在实际任务中,我们并不清楚究竟采用多大的卷积核,我们可以将卷积的大小作为超参数去调节,但同时也要调节它的stride,zero padding的区域大小。另外,一张图片的特征也不太可能是一样大小,人脸识别中眉毛的特征区域要比眼睛要小。为了更好的解决这两个问题,我们在同一层级中使用不同大小的卷积核,来起到不同大小的特征区域融合的效果,同时也方便网络自由的选取适合任务的卷积核。
这样我们就得到了著名的Inception Net。
如图,我们对同一个输入使用不同尺寸大小的卷积核。
值得注意最左边1*1的卷积,从数学上来说,它什么也没有做,因为它似乎只是依次映射到每个像素点,但是它的操作在于depth这个维度上,因为我们已经知道输出尺寸的深度取决于卷积核的数量,通过1*1的卷积核我们可以在不改变长宽的前提下,改变其深度,可以看作是一种降维。
卷积操作会作用于图片的每个通道上,也就是说,同一个输入图片里不同的通道也是参数共享的,这样的共享可能会造成一定的限制,有些特征会对通道更为敏感,如果我们想照顾到不同的通道具有不同的特征需要提取,就要使用不同的卷积核,那么就可以使用被称为depth-wise的通道分离再使用卷积的操作。
如图,对于彩***像,我们对每个通道分开进行卷积操作,每个通道都使用一个卷积核,最后再融合起来,保证了维度不变。
这也是Xception所做的事情。自然的,对于每个通道,我们仍然可以进行多个卷积核并存。
我们一般见到的卷积核都是正方形的,为了有效适配任务,我们也可以将其设计为长方形,进行卷积运算的过程都是一样的,只是可能会需要设置左右和上下的步长。即便在Inception中,使用不同大小的卷积核,其形状也是固定的,如果我们的卷积核能够良好的适应图片中需要提取的特征形状,那么可能相比Inception的效率要提高不少。
所以把卷积操作的一一映射相加修改为,卷积核计算的不再是投影的区域,而是每一个映射点都存在偏移,我们把这样的卷积叫做变形卷积(deformable convolution)
如图,左边为正常的卷积操作,可以看出正方形的卷积核包含的信息会漏掉特征和包含无用特征,而变形卷积操作则因为没有形状的限制,可以非常自由的选取所需要的特征。
人工智能
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。