t字型布局的网站在dw怎么做,深圳新公司注册流程及费用,住房城乡建设部门门户网站,有做自由行包车的网站一只小狐狸带你解锁 炼丹术NLP 秘籍作者#xff1a;Justin ho来源#xff1a;https://zhuanlan.zhihu.com/p/28749411前言CNN从2012年的AlexNet发展至今#xff0c;科学家们发明出各种各样的CNN模型#xff0c;一个比一个深#xff0c;一个比一个准确#xff0c;一个… 一只小狐狸带你解锁 炼丹术NLP 秘籍作者Justin ho来源https://zhuanlan.zhihu.com/p/28749411前言CNN从2012年的AlexNet发展至今科学家们发明出各种各样的CNN模型一个比一个深一个比一个准确一个比一个轻量。下面会对近几年一些具有变革性的工作进行简单盘点从这些充满革新性的工作中探讨日后的CNN变革方向。卷积只能在同一组进行吗Group convolution 分组卷积最早在AlexNet中出现由于当时的硬件资源有限训练AlexNet时卷积操作不能全部放在同一个GPU处理因此作者把feature maps分给多个GPU分别进行处理最后把多个GPU的结果进行融合。Alexnet分组卷积的思想影响比较深远当前一些轻量级的SOTAState Of The Art网络都用到了分组卷积的操作以节省计算量。但题主有个疑问是如果分组卷积是分在不同GPU上的话每个GPU的计算量就降低到 1/groups但如果依然在同一个GPU上计算最终整体的计算量是否不变找了pytorch上有关组卷积操作的介绍望读者解答我的疑问。关于这个问题知乎用户朋友 蔡冠羽 提出了他的见解https://www.zhihu.com/people/cai-guan-yu-62/activities我感觉group conv本身应该就大大减少了参数比如当input channel为256output channel也为256kernel size为3*3不做group conv参数为256*3*3*256若group为8每个group的input channel和output channel均为32参数为8*32*3*3*32是原来的八分之一。这是我的理解。我的理解是分组卷积最后每一组输出的feature maps应该是以concatenate的方式组合而不是element-wise add所以每组输出的channel是 input channels / #groups这样参数量就大大减少了。卷积核一定越大越好吗AlexNet中用到了一些非常大的卷积核比如11×11、5×5卷积核之前人们的观念是卷积核越大receptive field感受野越大看到的图片信息越多因此获得的特征越好。虽说如此但是大的卷积核会导致计算量的暴增不利于模型深度的增加计算性能也会降低。于是在VGG最早使用、Inception网络中利用2个3×3卷积核的组合比1个5×5卷积核的效果更佳同时参数量3×3×21 VS 5×5×11被降低因此后来3×3卷积核被广泛应用在各种模型中。每层卷积的卷积核尺寸需相同吗传统的层叠式网络基本上都是一个个卷积层的堆叠每层只用一个尺寸的卷积核例如VGG结构中使用了大量的3×3卷积层。事实上同一层feature map可以分别使用多个不同尺寸的卷积核以获得不同尺度的特征再把这些特征结合起来得到的特征往往比使用单一卷积核的要好谷歌的GoogleNet或者说Inception系列的网络就使用了多个卷积核的结构最初版本的Inception结构如上图所示一个输入的feature map分别同时经过1×1、3×3、5×5的卷积核的处理得出的特征再组合起来获得更佳的特征。但这个结构会存在一个严重的问题参数量比单个卷积核要多很多如此庞大的计算量会使得模型效率低下。这就引出了一个新的结构。怎样才能减少卷积层参数量发明GoogleNet的团队发现如果仅仅引入多个尺寸的卷积核会带来大量的额外的参数受到Network In Network中1×1卷积核的启发为了解决这个问题他们往Inception结构中加入了一些1×1的卷积核如图所示加入1×1卷积核的Inception结构根据上图我们来做个对比计算假设输入feature map的维度为256维要求输出维度也是256维。有以下两种操作1256维的输入直接经过一个3×3×256的卷积层输出一个256维的feature map那么参数量为256×3×3×256 589,8242256维的输入先经过一个1×1×64的卷积层再经过一个3×3×64的卷积层最后经过一个1×1×256的卷积层输出256维参数量为256×1×1×64 64×3×3×64 64×1×1×256 69,632。足足把第一种操作的参数量降低到九分之一1×1卷积核也被认为是影响深远的操作往后大型的网络为了降低参数量都会应用上1×1卷积核。越深的网络就越难训练吗ResNet skip connection传统的卷积层层叠网络会遇到一个问题当层数加深时网络的表现越来越差很大程度上的原因是因为当层数加深时梯度消散得越来越严重以至于反向传播很难训练到浅层的网络。为了解决这个问题何凯明大神想出了一个“残差网络”使得梯度更容易地流动到浅层的网络当中去而且这种“skip connection”能带来更多的好处这里可以参考一个PPT《极深网络ResNet/DenseNet: Skip Connection为何有效及其它》[1]以及我的一篇文章为什么ResNet和DenseNet可以这么深一文详解残差块为何能解决梯度弥散问题[2] 大家可以结合下面的评论进行思考。卷积时须同时考虑通道和区域吗标准的卷积过程可以看上图一个2×2的卷积核在卷积时对应图像区域中的所有通道均被同时考虑问题在于为什么一定要同时考虑图像区域和通道我们为什么不能把通道和空间区域分开考虑Xception网络就是基于以上的问题发明而来。我们首先对每一个通道进行各自的卷积操作有多少个通道就有多少个过滤器。得到新的通道feature maps之后这时再对这批新的通道feature maps进行标准的1×1跨通道卷积操作。这种操作被称为 “DepthWise convolution” 缩写“DW”。这种操作是相当有效的在imagenet 1000类分类任务中已经超过了InceptionV3的表现而且也同时减少了大量的参数我们来算一算假设输入通道数为3要求输出通道数为256两种做法直接接一个3×3×256的卷积核参数量为3×3×3×256 6,912DW操作分两步完成参数量为3×3×3 3×1×1×256 795又把参数量降低到九分之一因此一个depthwise操作比标准的卷积操作降低不少的参数量同时论文中指出这个模型得到了更好的分类效果。本文在发出12小时后一位网友私信了我向我介绍了Depthwise和Pointwise的历史工作而Xception和Mobilenet也引用了他们16年的工作就是Min Wang et al 的Factorized Convolutional Neural Networks这篇论文的Depthwise中每一通道输出的feature map称为“基层”可以不止一个而Xception中的Depthwise separable Convolution 正是这篇工作中“单一基层”的情况。推荐有兴趣的读者关注下他们的工作这里有篇介绍博文【深度学习】卷积层提速Factorized Convolutional Neural Networks。而最早关于separable convolution的介绍Xception作者提到应该追溯到Lau- rent Sifre 2014年的工作 Rigid-Motion Scattering For Image Classification 6.2章节。分组卷积能否对通道随机分组在AlexNet的Group Convolution当中特征的通道被平均分到不同组里面最后再通过两个全连接层来融合特征这样一来就只能在最后时刻才融合不同组之间的特征对模型的泛化性是相当不利的。为了解决这个问题ShuffleNet在每一次层叠这种Group conv层前都进行一次channel shuffleshuffle过的通道被分配到不同组当中。进行完一次group conv之后再一次channel shuffle然后分到下一层组卷积当中以此循环。来自ShuffleNet论文经过channel shuffle之后Group conv输出的特征能考虑到更多通道输出的特征自然代表性就更高。另外AlexNet的分组卷积实际上是标准卷积操作而在ShuffleNet里面的分组卷积操作是depthwise卷积因此结合了通道洗牌和分组depthwise卷积的ShuffleNet能得到超少量的参数以及超越mobilenet、媲美AlexNet的准确率另外值得一提的是微软亚洲研究院MSRA最近也有类似的工作他们提出了一个IGC单元Interleaved Group Convolution即通用卷积神经网络交错组卷积形式上类似进行了两次组卷积Xception 模块可以看作交错组卷积的一个特例特别推荐看看这篇文章王井东详解ICCV 2017入选论文通用卷积神经网络交错组卷积。要注意的是Group conv是一种channel分组的方式Depthwise Pointwise是卷积的方式只是ShuffleNet里面把两者应用起来了。因此Group conv和Depthwise Pointwise并不能划等号。通道间的特征都是平等的吗无论是在Inception、DenseNet或者ShuffleNet里面我们对所有通道产生的特征都是不分权重直接结合的那为什么要认为所有通道的特征对模型的作用就是相等的呢 这是一个好问题于是ImageNet2017 冠军SEnet就出来了。SEnet 结构一组特征在上一层被输出这时候分两条路线第一条直接通过第二条首先进行Squeeze操作Global Average Pooling把每个通道2维的特征压缩成一个1维从而得到一个特征通道向量每个数字代表对应通道的特征。然后进行Excitation操作把这一列特征通道向量输入两个全连接层和sigmoid建模出特征通道间的相关性得到的输出其实就是每个通道对应的权重把这些权重通过Scale乘法通道加权到原来的特征上第一条路这样就完成了特征通道的权重分配。让卷积核看到更大范围的区域标准的3×3卷积核只能看到对应区域3×3的大小但是为了能让卷积核看到更大的范围dilated conv使其成为了可能。dilated conv原论文中的结构如图所示上图b可以理解为卷积核大小依然是3×3但是每个卷积点之间有1个空洞也就是在绿色7×7区域里面只有9个红色点位置作了卷积处理其余点权重为0。这样即使卷积核大小不变但它看到的区域变得更大了。详细解释可以看这个回答如何理解空洞卷积dilated convolution卷积核形状一定是矩形吗图来自微软亚洲研究院公众号传统的卷积核一般都是长方形或正方形但MSRA提出了一个相当反直觉的见解认为卷积核的形状可以是变化的变形的卷积核能让它只看感兴趣的图像区域 这样识别出来的特征更佳。图来自微软亚洲研究院公众号要做到这个操作可以直接在原来的过滤器前面再加一层过滤器这层过滤器学习的是下一层卷积核的位置偏移量offset这样只是增加了一层过滤器或者直接把原网络中的某一层过滤器当成学习offset的过滤器这样实际增加的计算量是相当少的但能实现可变形卷积核识别特征的效果更好。详细MSRA的解读可以看这个链接可变形卷积网络计算机新“视”界。启发与思考现在越来越多的CNN模型从巨型网络到轻量化网络一步步演变模型准确率也越来越高。现在工业界追求的重点已经不是准确率的提升因为都已经很高了都聚焦于速度与准确率的trade off都希望模型又快又准。因此从原来AlexNet、VGGnet到体积小一点的Inception、Resnet系列到目前能移植到移动端的mobilenet、ShuffleNet体积能降低到0.5mb我们可以看到这样一些趋势卷积核方面大卷积核用多个小卷积核代替单一尺寸卷积核用多尺寸卷积核代替固定形状卷积核趋于使用可变形卷积核使用1×1卷积核bottleneck结构。卷积层通道方面标准卷积用depthwise卷积代替使用分组卷积分组卷积前使用channel shuffle通道加权计算。卷积层连接方面使用skip connection让模型更深densely connection使每一层都融合上其它层的特征输出DenseNet启发类比到通道加权操作卷积层跨层连接能否也进行加权处理bottleneck Group conv channel shuffle depthwise的结合会不会成为以后降低参数量的标准配置可能喜欢万能的BERT连文本纠错也不放过面试必备卖萌屋算法工程师思维导图—统计机器学习篇告别自注意力谷歌为Transformer打造新内核SynthesizerNLP中的少样本困境问题探究ACL20 | 让笨重的BERT问答匹配模型变快7款优秀Vim插件帮你打造完美IDE夕小瑶的卖萌屋_关注星标小夕带你解锁AI秘籍订阅号主页下方「撩一下」有惊喜哦