百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

「周末AI课堂」卷积之上的新操作机器学习你会遇到的“坑”

toyiye 2024-06-06 22:12 11 浏览 0 评论





卷积神经网络的常见问题


卷积神经网络(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等等。




作者:唐僧不用海飞丝

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

相关推荐

Asterisk-ARI对通道中的DTMF事件处理

Asterisk通道中关于DTMF处理是一个非常重要的功能。通过DTMF可以实现很多的业务处理。现在我们介绍一下关于ARI对通道中的DTMF处理,我们通过自动话务员实例来说明Asterisk如何创建一...

PyQt5 初次使用(pyqt5下载官网)

本篇文章默认已安装Python3,本篇文章默认使用虚拟环境。安装pipinstallPyQt5PyQt一些图形界面开发工具QtDesigner、国际化翻译工具Liguist需要另外...

Qt开发,使用Qt for Python还是Qt C++ Qt开发,使用Qt for

Qt开发使用QtforPython还是QtC++?1.早些年写过一个PyQt5的项目,最近几年重构成QtC++了,其中有个人原因,如早期代码写得烂,...

最简单方法!!用python生成动态条形图

最近非常流行动态条形图,在B站等视频网站上,此类视频经常会有上百万的播放量,今天我们通过第三方库:bar_chart_race(0.2版本)来实现动态条形图的生成;生成的效果如图:问题:...

Asterisk通道和ARI接口的通信(aau通道数)

Asterisk通道和ARI详解什么是通道Asterisk中,通道是介于终端和Asterisk自己本身的一个通信媒介。它包含了所有相关信息传递到终端,或者从终端传递到Asterisk服务器端。这些信...

Python GUI-长链转短链(长链接转化成短链接java)

当我们要分享某一个链接给别人,或是要把某个链接放入帖子中时,如果链接太长,则会占用大量空间,而且很不美观。这时候,我们可以结束长链转短链工具进行转换。当然可以直接搜索在线的网站进行转换,但我们可以借此...

Python 的hash 函数(python的hash函数)

今天在看python的hash函数源码的时候,发现针对不同的数据类型python实现了不同的hash函数,今天简单介绍源码中提到的hash函数。(https://github.com/pyth...

8款Python GUI开源框架,谁才是你的菜?

作为Python开发者,你迟早都会用到图形用户界面来开发应用。本文千锋武汉Python培训小编将推荐一些PythonGUI框架,希望对你有所帮助。1、Python的UI开发工具包Kivy...

python适合开发桌面软件吗?(python可不可以开发桌面应用软件)

其实Python/Java/PHP都不适合用来做桌面开发,Java还是有几个比较成熟的产品的,比如大名鼎鼎的Java集成开发环境IntelliJIDEA、Eclipse就是用Java开发的,不过PH...

CryptoChat:一款功能强大的纯Python消息加密安全传输工具

关于CryptoChatCryptoChat是一款功能强大的纯Python消息加密安全传输工具,该工具专为安全研究专家、渗透测试人员和红蓝队专家设计,该工具可以完全保证数据传输中的隐私安全。该工具建立...

为什么都说Python简单,但我觉得难?

Python普遍被大家认为是编程语言中比较简单的一种,但有一位电子信息的学生说自己已经学了C语言,但仍然觉得Python挺难的,感觉有很多疑问,像迭代器、装饰器什么的……所以他提出疑问:Python真...

蓝牙电话-关联FreeSwitch中继SIP账号通过Rest接口

蓝牙电话-关联FreeSwitch中继SIP账号通过Rest接口前言上一篇章《蓝牙电话-与FreeSwitch服务器和UA坐席的通话.docx》中,我们使用开源的B2B-UA当中经典的FreeSWIT...

技术分享|Sip与WebRTC互通-SRProxy开源库讲解

SRProxy介绍目前WebRTC协议跟SIP协议互通场景主要运用在企业呼叫中心、企业内部通信、电话会议(PSTN)、智能门禁等场景,要想让WebRTC与SIP互通,要解决两个层面的...

全网第N篇SIP协议之GB28181注册 JAVA版本

鉴于网上大部分关于SIP注册服务器编写都是C/C++/python,故开此贴,JAVA实现也贴出分享GB28181定义了了基于SIP架构的视频监控互联规范,而对于多数私有协议实现的监控系统...

「linux专栏」top命令用法详解,再也不怕看不懂top了

在linux系统中,我们经常使用到的一个命令就是top,它主要是用来显示系统运行中所有的进程和进程对应资源的使用等信息,所有的用户都可以使用top命令。top命令内容量丰富,可令使用者头疼的是无法全部...

取消回复欢迎 发表评论:

请填写验证码