卷积神经网络 卷积 池化 上下采样
(参考链接https://www.zhihu.com/question/39022858)
如何理解卷积神经网络(CNN)中的卷积和池化?(参考链接https://www.zhihu.com/question/49376084)
可以看看这篇文章《An Intuitive Explanation of Convolutional Neural Networks》,感觉讲的还挺详细
翻译版:[翻译] 神经网络的直观解释
链接:https://www.zhihu.com/question/49376084/answer/172483833
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
刚写完相关的文章,转载一部分过来。
来自自己的专栏:当我们在谈论数据挖掘 - 知乎专栏
CNN 其实可以看作 DNN 的一种特殊形式。它跟传统 DNN 标志性的区别在于两点,Convolution Kernel 以及 Pooling。
Convolution Kernel
卷积
说起卷积,一般我们我们接触过的都是一维信号的卷积,也就是
在信号处理中, 是输入信号,
是单位响应。于是输出信号
就是输入信号
的延迟响应的叠加。这也就是一维卷积本质:加权叠加/积分。
那么对于二维信号,比如图像,卷积的公式就是
假设现在 Convolution Kernel 大小是 ,我们就可以化简上式为
<img src="https://pic3.zhimg.com/50/v2-0770096e7d37a636be715ed9ddeeb63c_hd.jpg" data-rawwidth="352" data-rawheight="102" class="content_image" width="352">
看公式不太容易明白,我们画个图看看,假如 Convolution Kernel 如下图
<img src="https://pic3.zhimg.com/50/v2-d2b2c461b55e439e3d0ee0dc974e963f_hd.jpg" data-rawwidth="103" data-rawheight="104" class="content_image" width="103">
那么,从 Input Image 到 Output Image 的变化如下
<img src="https://pic3.zhimg.com/50/v2-90aa7dc35c5385b928a14ee8a464fa1a_hd.jpg" data-rawwidth="267" data-rawheight="221" class="content_image" width="267">
可以看出,其实二维卷积一样也是加权叠加/积分。需要注意的是,其中 Convolution Kernel 进行了水平和竖直方向的翻转。
Convolution Kernel 的意义
Convolution Kernel 其实在图像处理中并不是新事物,Sobel 算子等一系列滤波算子,一直都在被用于边缘检测等工作中,只是以前被称为 Filter。做图像处理的同学应该有印象。
Convolution Kernel 具有的一个属性就是局部性。即它只关注局部特征,局部的程度取决于 Convolution Kernel 的大小。比如用 Sobel 算子进行边缘检测,本质就是比较图像邻近像素的相似性。
也可以从另外一个角度理解 Convolution Kernel 的意义。学过信号处理的同学应该记得,时域卷积对应频域相乘。所以原图像与 Convolution Kernel 的卷积,其实对频域信息进行选择。比如,图像中的边缘和轮廓属于是高频信息,图像中某区域强度的综合考量属于低频信息。在传统图像处理里,这是指导设计 Convolution Kernel 的一个重要方面。
CNN 的 Convolution Kernel
CNN 中的 Convolution Kernel 跟传统的 Convolution Kernel 本质没有什么不同。仍然以图像为例,Convolution Kernel 依次与 Input 不同位置的图像块做卷积,得到 Output,如下图。
同时,CNN 有一些它独特的地方,比如各种定义:
- CNN 可以看作是 DNN 的一种简化形式,即这里 Convolution Kernel 中的每一个权值就可以看成是 DNN 中的
,且与 DNN 一样,会多一个参数 Bias
- 一个 Convolution Kernel 在与 Input 不同区域做卷积时,它的参数是固定不变的。放在 DNN 的框架中理解,就是对同一层 Layer 中的神经元而言,它们的
和
是相同的,只是所连接的节点在改变。因此在 CNN 里,这叫做 Shared Weights and Biases
- 在 CNN 中,Convolution Kernel 可能是高维的。假如输入是
维的,那么一般 Convolution Kernel 就会选择为
维,也就是与输入的 Depth 一致
- 最重要的一点,在 CNN 中,Convolution Kernel 的权值不需要提前设计,而是跟 DNN 一样利用 GD 来优化,我们只需要初始化
- 如上面所说,其实 Convolution Kernel 卷积后得到的会是原图的某些特征(如边缘信息),所以在 CNN 中,Convolution Kernel 卷积得到的 Layer 称作 Feature Map
- 一般 CNN 中两层之间会含有多个 Convolution Kernel,目的是学习出 Input 的不同特征,对应得到多个 Feature Map。又由于 Convolution Kernel 中的参数是通过 GD 优化得到而非我们设定的,于是初始化就显得格外重要了
Pooling
Pooling 的本质,其实是采样。Pooling 对于输入的 Feature Map,选择某种方式对其进行压缩。如下图,表示的就是对 Feature Map 邻域内的值,选择最大值输出到下一层,这叫做 Max Pooling。于是一个
的 Feature Map 被压缩到了
。
<img src="https://pic3.zhimg.com/50/v2-bbcea7d03f0ebd97c7d07c5d133fab5d_hd.jpg" data-rawwidth="364" data-rawheight="205" class="content_image" width="364">
除此之外,还有Mean-Pooling,Stochastic-Pooling 等。它们的具体实现如名称所示,具体选择哪一个则取决于具体的任务。
Pooling 的意义,主要有两点:
- 其中一个显而易见,就是减少参数。通过对 Feature Map 降维,有效减少后续层需要的参数
- 另一个则是 Translation Invariance。它表示对于 Input,当其中像素在邻域发生微小位移时,Pooling Layer 的输出是不变的。这就使网络的鲁棒性增强了,有一定抗扰动的作用
回答里的公式太难用了。。对 CNN 还有想要更多了解的可以参考原专栏文章:
当我们在谈论 Deep Learning:CNN 其常见架构(上)
卷积和池化的区别
(参考链接https://blog.csdn.net/liulina603/article/details/47727277)
当从一个大尺寸图像中随机选取一小块,比如说 8x8 作为样本,并且从这个小块样本中学习到了一些特征,这时我们可以把从这个 8x8 样本中学习到的特征作为探测器,应用到这个图像的任意地方中去。特别是,我们可以用从 8x8 样本中所学习到的特征跟原本的大尺寸图像作卷积,从而对这个大尺寸图像上的任一位置获得一个不同特征的激活值。
下面给出一个具体的例子:假设你已经从一个 96x96 的图像中学习到了它的一个 8x8 的样本所具有的特征,假设这是由有 100 个隐含单元的自编码完成的。为了得到卷积特征,需要对 96x96 的图像的每个 8x8 的小块图像区域都进行卷积运算。也就是说,抽取 8x8 的小块区域,并且从起始坐标开始依次标记为(1,1),(1,2),...,一直到(89,89),然后对抽取的区域逐个运行训练过的稀疏自编码来得到特征的激活值。在这个例子里,显然可以得到 100 个集合,每个集合含有 89x89 个卷积特征。
如下图所示,展示了一个3×3的卷积核在5×5的图像上做卷积的过程。每个卷积都是一种特征提取方式,就像一个筛子,将图像中符合条件(激活值越大越符合条件)的部分筛选出来。
2:说下池化,其实池化很容易理解,先看图:
转自: http://blog.csdn.net/silence1214/article/details/11809947
比如上方左侧矩阵A是20*20的矩阵要进行大小为10*10的池化,那么左侧图中的红色就是10*10的大小,对应到右侧的矩阵,右侧每个元素的值,是左侧红色矩阵每个元素的值得和再处于红色矩阵的元素个数,也就是平均值形式的池化。
3:上面说了下卷积和池化,再说下计算中需要注意到的。在代码中使用的是彩色图,彩色图有3个通道,那么对于每一个通道来说要单独进行卷积和池化,有一个地方尤其是进行卷积的时候要注意到,隐藏层的每一个值是对应到一幅图的3个通道穿起来的,所以分3个通道进行卷积之后要加起来,正好才能对应到一个隐藏层的神经元上,也就是一个feature上去。
扫盲 - 下采样与上采样(参考链接http://blog.sina.com.cn/s/blog_54b5ea250101bbr9.html)
上采样是下采样的逆过程,也称增取样(Upsampling)或内插(Interpolating)。 离散-〉连续或加密!
机器视角:长文揭秘图像处理和卷积神经网络架构(参考链接https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650728746&idx=1&sn=61e9cb824501ec7c505eb464e8317915&scene=0#wechat_redirect)
卷积神经网络 卷积 池化 上下采样相关推荐
- python实现卷积_【python实现卷积神经网络】池化层实现
激活函数的实现(sigmoid.softmax.tanh.relu.leakyrelu.elu.selu.softplus):https://www.cnblogs.com/xiximayou/p/1 ...
- 深度学习与神经网络(七)——卷积神经网络之池化pooling 上采样upsample与降采样downsample(下采样)(subsample)(nn.MaxPool2d)
池化层pooling与采样 upsample与downsample upsample(interpolating)是上采样,是图片的放大 unpool是上采样的一种 downsample(subsam ...
- 【Pytorch神经网络理论篇】 13 深层卷积神经网络介绍+池化操作+深层卷积神经网络实战
1 深层卷积神经网络概述 1.1 深层卷积神经网络模型结构图 1.1.1 深层卷积神经网络的正向结构构成剖析 输入层,将每个像素作为一个特征节点输入网络. 卷积层:由多个滤波器组合而成. 池化层:将卷 ...
- 【FPGA教程案例56】深度学习案例3——基于FPGA的CNN卷积神经网络之池化层verilog实现
FPGA教程目录 MATLAB教程目录 -------------------------------------------------------------------------------- ...
- Tensorflow 卷积神经网络(三)池化与采样
前一节的内容对卷积网络的padding,stride等概念有了介绍,这一节会需要回顾一下其中重要的几个概念包括池化(Pooling).过采样(upsample)以及激活函数ReLU.首先我们根据一张经 ...
- 卷积神经网络(卷积层,激活函数Relu,池化层,计算公式及API解释)
1. 卷积神经网络 (卷积层,激活函数,池化层,全连接层) (1) 把神经网络的隐藏层分为卷积层和池化层(又叫下采样层) · 卷积层 : 通过在原始图像上平移来提取特征 · 池化层 : 通过特征 ...
- 深入学习卷积神经网络中卷积层和池化层的意义(转)
为什么要使用卷积呢? 在传统的神经网络中,比如多层感知机(MLP),其输入通常是一个特征向量:需要人工设计特征,然后将这些特征计算的值组成特征向量,在过去几十年的经验来看,人工找到的特征并不是怎么好用 ...
- 【卷积神经网络】卷积层,池化层,全连接层
转于:<入门PyTorch> 卷积层是卷积神经网络的核心, 大多数计算都是在卷积层中进行的. 1 卷积层 1.1 概述 首先介绍卷积神经网络的参数. 这些参数是由一些可学习的滤波器集合构成 ...
- 卷积神经网络卷积,池化,全连接--笔记01
1.图像是由像素构成的,每个像素又是由颜色构成的 假如我们处理一张 1000×1000 像素的图片,我们就需要处理3百万个参数! 1000×1000×3=3,000,000 卷积神经网络 - CNN ...
- 卷积神经网络---卷积层、激励层、池化层以及全连接层
文章目录 概述 卷积神经网络 局部连接+权值共享** 输入层 卷积层 激励层 池化层 全连接层 参考资料 概述 这两天在看论文,涉及到卷积神经网络的知识,之前一直对这块迷迷糊糊.看到了一篇博文写的很好 ...
最新文章
- 字符串BF和KMP匹配算法
- 根据后台的数据设置前端页面展示效果
- etcd代理组件的开发思想
- Algorithms_算法思想_递归分治
- 怎么把程序内部坐标转为屏幕坐标_全网最详细CNC加工中心程序代码大全!
- python时间减法_干!一张图整理了 Python 所有内置异常
- Windows 11 任务管理器重磅升级!界面迎来全新设计,十年来首次大改!
- java编程思想泛型对混入的详细探讨
- java c 客户端_java基于C/S模式实现聊天程序(客户端)
- 一阶广义差分模型_贵州茅台(600519)股价预测 (ARIMA模型)
- Linux 环境变量配置总结
- Java 设计模式 之 单例模式(Singleton)
- 单机配置tomcat 8 集群
- 寻找二叉树最小叶子节点值
- 中国电子学会c语言考试题库,计算机基础考试试题及答案
- 获取Adobe Flash 及Reader安装包
- conda安装requirement.txt指定的依赖包
- directadmin php5.6,directadmin教程
- presenting controller presented controller 如何区分
- 传奇游戏显示服务器连接失败,操作win7系统玩传奇世界显示连接服务器失败的详细方法...