首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

周末AI课堂:卷积之上的新操作 理论篇

AI课堂开讲,就差你了!

很多人说,看了再多的文章,可是没有人手把手地教授,还是很难真正地入门AI。为了将AI知识体系以最简单的方式呈现给你,从这个星期开始,芯君邀请AI专业人士开设“周末学习课堂”——每周就AI学习中的一个重点问题进行深度分析,课程会分为理论篇和代码篇,理论与实操,一个都不能少!

来,退出让你废寝忘食的游戏页面,取消只有胡吃海塞的周末聚会吧。未来你与同龄人的差异,也许就从每周末的这堂AI课开启了!

读芯术读者交流群,请加小编微信号:zhizhizhuji。等你。后台回复“周末AI课堂”,查阅相关源代码。

全文共2357字,预计学习时长5分钟

卷积神经网络的常见问题

卷积神经网络(convolutional neural network)是如此的著名,论述它的文章是如此之多,就连我在工地搬砖的时候,工头一边抠着脚,一边砸吧嘴:CNN中C的意思是卷积,不是CUDA——惊得我烟都掉了!我仿佛从目不识丁的工头身上看到了社会的影子。似乎我们来到了一个无论身处何方,多大年纪都对卷积神经网络有着独到的研究的时代。

人们在很多地方都会了解一些CNN的工作原理,一般它在图片识别上比全连接网络更好。我在这里默认了大家对于简单的CNN已经有了初步的了解,不会讲解什么是卷积,也不会讲解CNN的优点,更不会讲解CNN的通俗理解。但是如果有人问你:

CNN能处理语音识别问题么?

局部相关性在CNN中如何体现?

CNN中的卷积运算相比于其他运算有什么特别的优势?

下采样(downsampling)在CNN中如何体现?

当我们图像可以完全包住卷积核,我们还有必要进行填充(pad)吗?

CNN中池化(max pooling)可以不添加么?

输入图片的尺寸为H*W*C,经过K个S*S的卷积核,步长(stride)为L,zero-padding为P,那么输出图像的尺寸是多少?不考虑偏置的话,涉及到多少个参数?

你要可以飞快的回答出:

CNN可以处理时间序列,因为CNN利用的就是数据的局部相关性,语音和文本具备局部相关性。

我们在局部空间或时间上提取的特征也希望在另一局部空间或时间是相同的,比如人脸识别中的眼睛,当眼睛位置发生变化的时候,我们希望提取到相同的特征。在神经网络中,我们通过权重共享来表达这样的不变性。

CNN中的卷积操作主要是为了获得图片或文本的局部特征,在计算机视觉里,我们将这样的操作叫做滤波,都是为了获得局部领域的输出。常用的卷积操作本质上就是加权平均,这样的线性运算是获取局部特征最简单的操作,利用BP算法也显得特别直接。

下采样是指对特征进行压缩,CNN中的pooling和卷积核的步长>1,是CNN下采样的两种主要方式。

如果我们的stride为1,那么看起来并没有填充的必要。但是,这样的卷积操作却会让每层图片缩减,直到无法继续缩减,比如,卷积核大小为S,图片大小为M,那么经过stride为1的卷积,输出会变为M-S+1,我们的神经网络深度受限。同时,stride为1的卷积操作遍历了尽可能多的区域,会让计算代价变得高昂。取而代之的是,我们会采用零填充边缘,使得我们可以自由的控制卷积层输出的大小。

经过zero-padding,如果输出与输入尺寸相同,我们叫做相同卷积,如果每个像素都被访问S次(卷积核的尺寸),我们叫做全卷积。

max pooling假设了得到的特征具有一定的平移不变性,当我们更关心特征是否出现,而非特征出现在哪里时,我们就可以用池化层来进一步增强网络的鲁棒性。但并不是所有的网络都需要添加池化层,因为池化的过程可能会丢失重要的信息,如果我们采用旋转平移等操作来增强数据,那么就代表着特征的绝对位置不再重要,就可以使用池化层来削减参数获得更鲁棒的模型。

除了max pooling,我们还会经常使用average pooling。

经过这样的操作,输出图片的长为,宽为,深为K,总共涉及到K个卷积核,每个卷积核的权重参数个数为S*S*C。

如果可以将卷积神经网络理解到这里,就可以迅速地理解以下这些新操作,这些操作都比较简单,主要针对卷积核本身的操作。

卷积之上的新操作

卷积核的尺寸和个数

一般认为,卷积核的作用是为了获取局部特征,这些特征组合在一起,模型就很容易识别。固定大小的卷积核会获得固定大小的特征。

我们能在图像上发现这一点,卷积核会把对应大小的图像的像素值变为一个值,我们将这个值称为这一特定的区域的特征。

但是在实际任务中,我们并不清楚究竟采用多大的卷积核,我们可以将卷积的大小作为超参数去调节,但同时也要调节它的stride,zero padding的区域大小。另外,一张图片的特征也不太可能是一样大小,人脸识别中眉毛的特征区域要比眼睛要小。为了更好的解决这两个问题,我们在同一层级中使用不同大小的卷积核,来起到不同大小的特征区域融合的效果,同时也方便网络自由的选取适合任务的卷积核。

这样我们就得到了著名的Inception Net。

如图,我们对同一个输入使用不同尺寸大小的卷积核。

值得注意最左边1*1的卷积,从数学上来说,它什么也没有做,因为它似乎只是依次映射到每个像素点,但是它的操作在于depth这个维度上,因为我们已经知道输出尺寸的深度取决于卷积核的数量,通过1*1的卷积核我们可以在不改变长宽的前提下,改变其深度,可以看作是一种降维。

卷积核的分离

卷积操作会作用于图片的每个通道上,也就是说,同一个输入图片里不同的通道也是参数共享的,这样的共享可能会造成一定的限制,有些特征会对通道更为敏感,如果我们想照顾到不同的通道具有不同的特征需要提取,就要使用不同的卷积核,那么就可以使用被称为depth-wise的通道分离再使用卷积的操作。

如图,对于彩色图像,我们对每个通道分开进行卷积操作,每个通道都使用一个卷积核,最后再融合起来,保证了维度不变。

这也是Xception所做的事情。自然的,对于每个通道,我们仍然可以进行多个卷积核并存。

卷积核的形状

我们一般见到的卷积核都是正方形的,为了有效适配任务,我们也可以将其设计为长方形,进行卷积运算的过程都是一样的,只是可能会需要设置左右和上下的步长。即便在Inception中,使用不同大小的卷积核,其形状也是固定的,如果我们的卷积核能够良好的适应图片中需要提取的特征形状,那么可能相比Inception的效率要提高不少。

所以把卷积操作的一一映射相加修改为,卷积核计算的不再是投影的区域,而是每一个映射点都存在偏移,我们把这样的卷积叫做变形卷积(deformable convolution)

如图,左边为正常的卷积操作,可以看出正方形的卷积核包含的信息会漏掉特征和包含无用特征,而变形卷积操作则因为没有形状的限制,可以非常自由的选取所需要的特征。

读芯君开扒

课堂TIPS

• 除了本节所涉及的卷积之上的操作,我们还有对特征通道重要性评估办法(SENet)、可以增加普通卷积核提取的特征区域大小的Dilation卷积,不同程度上对低级特征(浅层)和高级特征(深层)进行融合的DenseNet等等。

留言 点赞 发个朋友圈

我们一起分享AI学习与发展的干货

作者:唐僧不用海飞丝

如需转载,请后台留言,遵守转载规范

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181208A1CLWR00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券