AI面试题之深入浅出卷积网络的平移不变性
卷积网络的平移不变性可能会经常在论文中看到,那这个到底是什么呢?看了一些论文的原文和网络上十几篇讲这个的博文,大概捋清了思路然后写下这个。不得不说,有的博文讲的有那么点问题。
1 什么是不变性
【不变性】就是目标发生了变换,但是你依然可以识别出来。在图像任务中,我们希望图像中的目标即使被平移、被旋转或者被缩放,模型都可以识别出来图像的目标。
所以不变性有下面几种:
- 平移不变性:Translation Invariance
- 旋转不变性:Rotation Invariance
- 尺度不变性:scale Invariance
- 光照不变性:Illumination Invariance
在图像分类任务中,平移不变性就是图像中的目标不管被移动到哪个位置,模型给出的标签应该都是相同的。
【平移不变性对应的有一个概念是平移同变性(translation equivariance),这个是用在图像的目标检测中的,如果输入图像中的目标进行了平移,那么最终检测出来的候选框应该也相应的移动,这就是同时改变。】
2 卷积网络有没有平移不变性
有的文章说有,有的说没有,那么到底有没有呢?
我先说出我个人的观点,现在的卷积网络是不具有平移不变性的。不过两个论点我都会讲明白。
3 为什么有平移不变性
主要是由两个原因,一个是卷积,一个是最大池化。
【为什么卷积可以提供平移不变性】
比方说目标是在图像的左上角,经过卷积之后,目标的特征也会在特征图的左上角;目标在图像的左下角,经过相同的卷积核卷积之后,目标的特征也会在特征图的左下角。然后卷积层后面接上一个全连接层进行分类,就算目标位置改变了,但是经过相同的卷积核卷积,然后展开变成全连接层。所以对于全连接层来说,改变的之后特征的位置。可能之前目标的特征是作为全连接的第一个神经元的输入,平移目标位置之后,该特征就作为全连接的最后一个神经元的输入。
不过这种说法想体现的就是,就算目标位置变了,经过相同卷积核提取的特征该有的都有,只是位置变了。
【我个人觉得这个论证有点问题,特征的顺序对于网络来说非常重要,打乱了那很大可能会给出错误的答案。上述的论点来源于引用[1]的博客】
【为什么池化可以提供平移不变性】
我觉得这个相比上面的解释,是有一定的道理的。最大池化层返回感受野中的最大值,如果最大值被移动了,但是仍然在这个感受野中,那么池化层也仍然会输出相同的最大值。这就有点平移不变的意思了。
在参考链接[2]中,给出了几个“池化层具有不变性”的例子:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RgYXVsMc-1595352073693)(http://helloworld2020.net/wp-content/uploads/2020/07/wp_editor_md_c94b9fb055f201230a5f6ba383f04768.jpg)]
可以看到,同样的数字1,原图中平移了1个像素,但是经过2*2的最大池化层之后,得到了相同的特征图。
此外,最大池化层还可以根据类似的原理,得到尺度不变性和旋转不变性:
【池化层引入了平移不变性我觉得是比较靠谱的,这也是池化层的重要作用之一:为CNN引入不变性。但是怎么说呢?虽然目前听起来很有道理,在面试的时候被问起来池化层作用的时候我觉得回答上不变性也是不错的,但是下文就会讲解,池化层实际上并没有引入不变性。好像是2019年的一个论文强调了池化层并没有不变性】
4 为什么没有平移不变性
现在卷积网路的图像输入,改变一个像素就可能会得出不同的结构,所以很容易遭到对抗攻击。下面有一个形象的例子:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mZuTor9L-1595352073705)(http://helloworld2020.net/wp-content/uploads/2020/07/ezgif-6-e30035fc1a35.gif)]
可以看出来,当平移小鸟的位置的时候,预测结果是有很大的波动的。
池化层并没有平移不变性。下面是参考链接[3]给出的一个简单的例子,这是一个一维卷积的例子,二维图像类似:
上图是一个没有平移的原始一位数据做了一个1*2的最大池化;
如果对一位数据做了一个平移,那么得到的池化结果就完全不同!这也就是为什么下采样(平均池化层,最大池化层等)没有平移不变性。
5 平移不变性的定义
说了这么多平移不变性,那么平移不变性的具体的严格的定义到底是什么呢?
定义几个数学符号。原始的输入数据为\(X\),经过下采样层变成\(D(X)\),然后再经过上采样得到\(U(D(X))\).(D是Down下采样,U是Up上采样)
【平移不变性】
如果平移之后的输入图像的下采样的上采样与原始输入图像的下采样的上采样相同,那么就是平移不变性。(中文说的太绕嘴了,数学公式清晰)
\(U(D(X))=U(D(X_{shift}))\)
- \(X_{shift}\)就是平移之后的输入;
举个例子:
这个就是\(U(D(X))\),
这个就是\(U(D(X_{shift}))\),可以发现两者并不相等,所以并没有平移不变性。
6 如何实现平移不变性
现在使用的全局平均池化层,就是可以实现平移不变性。依然是用上面的例子:
可以发现,其实不管平移多少,反正得到的数值都是一样的,全局平均池化消除了位置的影响,所以实现了平移不变性。
参考链接:
[1]https://zhangting2020.github.io/2018/05/30/Transform-Invariance/
[2]https://www.zhihu.com/question/36686900
[3]https://www.jianshu.com/p/6041f3e8a583
AI面试题之深入浅出卷积网络的平移不变性的更多相关文章
- 谷歌出品EfficientNet:比现有卷积网络小84倍,比GPipe快6.1倍
[导读]谷歌AI研究部门华人科学家再发论文<EfficientNet:重新思考CNN模型缩放>,模型缩放的传统做法是任意增加CNN的深度和宽度,或使用更大的输入图像分辨率进行训练,而使用E ...
- 全卷积网络(FCN)实战:使用FCN实现语义分割
摘要:FCN对图像进行像素级的分类,从而解决了语义级别的图像分割问题. 本文分享自华为云社区<全卷积网络(FCN)实战:使用FCN实现语义分割>,作者: AI浩. FCN对图像进行像素级的 ...
- 基于孪生卷积网络(Siamese CNN)和短时约束度量联合学习的tracklet association方法
基于孪生卷积网络(Siamese CNN)和短时约束度量联合学习的tracklet association方法 Siamese CNN Temporally Constrained Metrics T ...
- 【深入浅出Linux网络编程】 "开篇 -- 知其然,知其所以然"
[深入浅出Linux网络编程]是一个连载博客,内容源于本人的工作经验,旨在给读者提供靠谱高效的学习途径,不必在零散的互联网资源中浪费精力,快速的掌握Linux网络编程. 连载包含4篇,会陆续编写发出, ...
- PRML读书会第五章 Neural Networks(神经网络、BP误差后向传播链式求导法则、正则化、卷积网络)
主讲人 网神 (新浪微博:@豆角茄子麻酱凉面) 网神(66707180) 18:55:06 那我们开始了啊,前面第3,4章讲了回归和分类问题,他们应用的主要限制是维度灾难问题.今天的第5章神经网络的内 ...
- 学习笔记TF028:实现简单卷积网络
载入MNIST数据集.创建默认Interactive Session. 初始化函数,权重制造随机噪声打破完全对称.截断正态分布噪声,标准差设0.1.ReLU,偏置加小正值(0.1),避免死亡节点(de ...
- 全卷积网络 FCN 详解
背景 CNN能够对图片进行分类,可是怎么样才能识别图片中特定部分的物体,在2015年之前还是一个世界难题.神经网络大神Jonathan Long发表了<Fully Convolutional N ...
- 学习笔记CB009:人工神经网络模型、手写数字识别、多层卷积网络、词向量、word2vec
人工神经网络,借鉴生物神经网络工作原理数学模型. 由n个输入特征得出与输入特征几乎相同的n个结果,训练隐藏层得到意想不到信息.信息检索领域,模型训练合理排序模型,输入特征,文档质量.文档点击历史.文档 ...
- 深度卷积网络(DCNN)和人类识别物体方法的不同
加州大学洛杉矶分校在PLOS Computing Biology上发表了一篇文章,分析了深度卷积网络(DCNN)和人类识别物体方法的不同:深度卷积网络(DCNN)是依靠物体的纹理进行识别,而人类是依靠 ...
随机推荐
- window 开机重启运行bat文件(运行java的jar包)
1:直接打开电脑的目录:(记得勾选查看隐藏项目) C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp,在里面新建start.bat ...
- GitHub 热点速览 Vol.25:距离优雅编程你差个它
作者:HelloGitHub-小鱼干 摘要:如何优雅地夸一个程序员呢?vscode-rainbow-fart 作为一个彩虹屁的项目,深得程序员心,能在你编程时疯狂称赞你的除了你自己,还有它.除了鼓励之 ...
- Python3使用cookielib模块
同时使用过python2和python3的应该都知道,好多模块在python2中能直接安装,但是到了python3中却无法安装直接使用,同样python3中的好些模块在python2中也是一样 如下: ...
- 第四模块 :微服务调用链监控CAT架构和实践
采样率:每一个请求为都进行记录,或者100次请求为记录50次 各个开源框架都满足opentracing的标准,只要使用opentracing标准埋点的客户端,可以使用不同的客户端去展示,opentra ...
- android KeyEvent事件机制
package im.weiyuan.com.viewutils; import android.content.Intent; import android.os.PersistableBundle ...
- android handle详解3 ThreadHandler
在android handle详解2的基础上,我们来学习ThreadHandler ThreadHandler的本质就是对android handle详解2的实现 HandlerThread其实还是一 ...
- 入门大数据---HiveCLI和Beeline命令行的基本使用
一.Hive CLI 1.1 Help 使用 hive -H 或者 hive --help 命令可以查看所有命令的帮助,显示如下: usage: hive -d,--define <key=va ...
- js事件入门(3)
3.键盘事件 3.1.onkeydown 键盘按下事件 当键盘按下的时候触发 <!DOCTYPE html> <html> <head> <meta char ...
- Github中添加SSH key
1-创建密钥,在终端输入下面的命令 ssh-keygen -t rsa -b -C "你的邮箱" //双引号不能去 要求输入密码,建议回车使用空密码方便以后的每次连接,此时会生成一 ...
- Halcon斑点分析涉及算子及其高阶运用
涉及算子 获取图像 使用ROI 对齐ROI或图像 校正图像 基础内容这里不再重述 预处理图像(过滤) 基础: mean_image(平均平滑过滤),gauss_filter(高斯滤波),binomia ...