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)是依靠物体的纹理进行识别,而人类是依靠 ...
随机推荐
- 大文件上传、断点续传、秒传、beego、vue
大文件上传 0.项目源码地址 源码地址 :https://github.com/zhuchangwu/large-file-upload 它是个demo,仅供参考 前端基于 vue-simple-up ...
- 2020/6/10 JavaScript高级程序设计 BOM
BOM(浏览器对象模型):提供用于访问浏览器的对象. 8.1 window对象 window是BOM的核心对象,表示浏览器的一个实例. JavaScript访问浏览器窗口的接口 ECMAScript规 ...
- Redis系列(六):数据结构List双向链表LPUSH、LPOP、RPUSH、RPOP、LLEN命令
1.介绍 redis中的list既实现了栈(先进后出)又实现了队列(先进先出) 1.示意图 2.各命令详解 LPUSH/RPUSH LPUSH: 从队列的左边入队一个或多个元素 将所有指定的值插入到存 ...
- vue中使用element2
阻止谷歌下记住密码 当我们将input框的类型设置为密码框的时候,就会出现下面这种效果,不仅样式不统一,有的时候,密码框的上面并不是用户名,而是其他的内容,也会被强制显示为用户名: 首先需要解决样式问 ...
- 基础的markdown用法
首先推荐一款在线的markdown编辑器:Editor.md 一篇博客里面就是文字与图片的集合.markdown其实就是编辑文字,插入图片的工具.对于大多数人来说,学习几个标签就可以了. 标题 #** ...
- 字符串String和list集合判空验证
1`字符串判断处理: 结论: 当if判断条件为两个,并且它们两个为或的关系,如果第一个条件为false,则继续第二个条件的判断:如果第一个条件为true,该例子不足以说明是否判断第二个条件, 最终可以 ...
- 初至cnblogs —— 博客搬迁
感觉写博客是一种总结.分享知识的有效方式,于是打算坚持通过博客这一载体来提升自己. 最初通过 Hexo + GitHub Page 来搭建个人博客,但是通过这种方式搭建的博客基本没有访问量.个人感觉没 ...
- 关于位图数据和标记位-P3
文章目录 1 背景 1.1 问题 2 问题1探究 2.1 没有区的情况 2.2 一个区的情况 2.3 两个区的情况 2.4 三个区的情况 2.5 四个区的情况 2.6 五个区的情况 3 问题2探究 3 ...
- 利用 React 高阶组件实现一个面包屑导航
什么是 React 高阶组件 React 高阶组件就是以高阶函数的方式包裹需要修饰的 React 组件,并返回处理完成后的 React 组件.React 高阶组件在 React 生态中使用的非常频繁, ...
- C#数据结构与算法系列(二十一):希尔排序算法(ShellSort)
1.介绍 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 2.基本思想 希尔排 ...