卷积神经网络之卷积计算、作用与思想 深度学习

news/2024/11/25 0:42:39/

博客:blog.shinelee.me | 博客园 | CSDN

卷积运算与相关运算

在计算机视觉领域,卷积核、滤波器通常为较小尺寸的矩阵,比如3×33×3从这个角度看,多层卷积是在进行逐层映射,整体构成一个复杂函数,训练过程是在学习每个局部映射所需的权重,训练过程可以看成是函数拟合的过程。

  • 从模版匹配的角度理解。 前面我们已经知道,卷积与相关在计算上可以等价,相关运算常用模板匹配,即认为卷积核定义了某种模式,卷积(相关)运算是在计算每个位置与该模式的相似程度,或者说每个位置具有该模式的分量有多少,当前位置与该模式越像,响应越强。下图为图像层面的模板匹配(图片来自链接),右图为响应图,可见狗头位置的响应最大。当然,也可以在特征层面进行模版匹配,卷积神经网络中的隐藏层即可以看成是在特征层面进行模板匹配。这时,响应图中每个元素代表的是当前位置与该模式的相似程度,单看响应图其实看不出什么,可以想像每个位置都有个“狗头”,越亮的地方越像“狗头”,若给定模板甚至可以通过反卷积的方式将图像复原出来。这里多说一句,我们真的是想把图像复原出来吗,我们希望的是在图像中找到需要的模式,若是通过一个非线性函数,将响应图中完全不像“狗头”的地方清零,而将像“狗头”的地方保留,然后再将图像复原,发现复原图中只有一个“狗头”,这是不是更美好——因为我们明确了图像中的模式,而减少了其他信息的干扰!

  • template matching

    本篇文章将倾向于从第2个角度来理解卷积神经网络。

    卷积能抽取特征

    上一节中提到了“狗头”模板,如果把卷积核定为“狗头”模板会有什么问题?将缺乏灵活性,或者说泛化能力不够,因为狗的姿态变化是多样的,如果直接把卷积核定义得这么“死板”,狗换个姿势或者换一条狗就不认得了。

    那么,为了适应目标的多样性,卷积核该怎么设计呢?这个问题,我们在下一节回答,这里先看看人工定义的卷积核是如何提取特征的。

    以下图sobel算子为例(图片来自链接),对图像进行卷积,获得图像的边缘响应图,当我们看到响应图时,要知道图中每个位置的响应代表着这个位置在原图中有个形似sobel算子的边缘,信息被压缩了,响应图里的一个数值其实代表了这个位置有个相应强度的sobel边缘模式,我们通过卷积抽取到了特征。
    sobel operator

    人工能定义边缘这样的简单卷积核来描述简单模式,但是更复杂的模式怎么办,像人脸、猫、狗等等,尽管每个狗长得都不一样,但是我们即使从未见过某种狗,当看到了也会知道那是狗,所以对于狗这个群体一定是存在着某种共有的模式,让我们人能够辨认出来,但问题是这种模式如何定义?在上一节,我们知道“死板”地定义个狗的模板是不行的,其缺乏泛化能力,我们该怎么办?

    通过多层卷积,来将简单模式组合成复杂模式,通过这种灵活的组合来保证具有足够的表达能力和泛化能力。

    多层卷积能抽取复杂特征

    为了直观,我们先上图,图片出自论文《Visualizing and Understanding Convolutional Networks》,作者可视化了卷积神经网络每层学到的特征,当输入给定图片时,每层学到的特征如下图所示,注意,我们上面提到过每层得到的特征图直接观察是看不出什么的,因为其中每个位置都代表了某种模式,需要在这个位置将模式复现出来才能形成人能够理解的图像,作者在文中将这个复现过程称之为deconvolution,详细查看论文(前文已经有所暗示,读者可以先独自思考下复现会怎么做)。

    Visualization of features in a fully trained model

    从图中可知,浅层layer学到的特征为简单的边缘、角点、纹理、几何形状、表面等,到深层layer学到的特征则更为复杂抽象,为狗、人脸、键盘等等,有几点需要注意:

    1. 卷积神经网络每层的卷积核权重是由数据驱动学习得来,不是人工设计的,人工只能胜任简单卷积核的设计,像边缘,但在边缘响应图之上设计出能描述复杂模式的卷积核则十分困难。

    2. 数据驱动卷积神经网络逐层学到由简单到复杂的特征(模式),复杂模式是由简单模式组合而成,比如Layer4的狗脸是由Layer3的几何图形组合而成,Layer3的几何图形是由Layer2的纹理组合而成,Layer2的纹理是由Layer1的边缘组合而成,从特征图上看的话,Layer4特征图上一个点代表Layer3某种几何图形或表面的组合,Layer3特征图上一个点代表Layer2某种纹理的组合,Layer2特征图上一个点代表Layer1某种边缘的组合。

    3. 这种组合是一种相对灵活的方式在进行,不同的边缘→不同纹理→不同几何图形和表面→不同的狗脸、不同的物体……,前面层模式的组合可以多种多样,使后面层可以描述的模式也可以多种多样,所以具有很强的表达能力,不是“死板”的模板,而是“灵活”的模板,泛化能力更强。

    4. 卷积神经网络真正使用时,还需要配合池化、激活函数等,以获得更强的表达能力,但模式蕴含在卷积核中,如果没有非线性激活函数,网络仍能学到模式,但表达能力会下降,由论文《Systematic evaluation of CNN advances on the ImageNet》,在ImageNet上,使用调整后的caffenet,不使用非线性激活函数相比使用ReLU的性能会下降约8个百分点,如下图所示。通过池化和激活函数的配合,可以看到复现出的每层学到的特征是非常单纯的,狗、人、物体是清晰的,少有其他其他元素的干扰,可见网络学到了待检测对象区别于其他对象的模式。

    Top-1 accuracy gain over ReLU in the CaffeNet-128 architecture

    总结

    本文仅对卷积神经网络中的卷积计算、作用以及其中隐含的思想做了介绍,有些个人理解难免片面甚至错误,欢迎交流指正。

    参考

    • Kernel (image processing)
    • Forward And Backpropagation in Convolutional Neural Network
    • 《Visualizing and Understanding Convolutional Networks》
    • 《Systematic evaluation of CNN advances on the ImageNet》
    • Deep Learning Specialization
分类: 深度学习基础
标签: CNN
<div id="blog_post_info">
好文要顶 关注我 收藏该文
shine-lee
关注 - 2
粉丝 - 57
+加关注
11
0
<div class="clear"></div>
<div id="post_next_prev"><a href="https://www.cnblogs.com/shine-lee/p/9884551.html" class="p_n_p_prefix">« </a> 上一篇:    <a href="https://www.cnblogs.com/shine-lee/p/9884551.html" title="发布于 2018-10-31 17:37">OpenCV各版本差异与演化,从1.x到4.0</a>
<br>
<a href="https://www.cnblogs.com/shine-lee/p/9950733.html" class="p_n_p_prefix">» </a> 下一篇:    <a href="https://www.cnblogs.com/shine-lee/p/9950733.html" title="发布于 2018-11-13 10:10">论文学习-系统评估卷积神经网络各项超参数设计的影响-Systematic evaluation of CNN advances on the ImageNet</a>
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020022716143884.jpg)

http://www.ppmy.cn/news/605345.html

相关文章

LeetCode中等题之面试题 01.05. 一次编辑

CSDN话题挑战赛第1期 活动详情地址&#xff1a;https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f 参赛话题&#xff1a;Leetcode刷题指南 话题描述&#xff1a;代码能力是一个程序员的基本能力&#xff0c;而除了做项目之外&#xff0c;大家接触到的最常规的提升…

LeetCode简单题之非递增顺序的最小子序列

题目 给你一个数组 nums&#xff0c;请你从中抽取一个子序列&#xff0c;满足该子序列的元素之和 严格 大于未包含在该子序列中的各元素之和。 如果存在多个解决方案&#xff0c;只需返回 长度最小 的子序列。如果仍然有多个解决方案&#xff0c;则返回 元素之和最大 的子序列…

TensorFlow基础笔记(11) max_pool2D函数 深度学习

# def max_pool2d(inputs, # kernel_size, # stride2, # paddingVALID, # data_formatDATA_FORMAT_NHWC, # outputs_collectionsNone, # scopeNone):#"VALID"模式下 #输…

LeetCode简单题之转化时间需要的最少操作数

题目 给你两个字符串 current 和 correct &#xff0c;表示两个 24 小时制时间 。 24 小时制时间 按 “HH:MM” 进行格式化&#xff0c;其中 HH 在 00 和 23 之间&#xff0c;而 MM 在 00 和 59 之间。最早的 24 小时制时间为 00:00 &#xff0c;最晚的是 23:59 。 在一步操作…

卷积池化计算 深度学习

卷积后图片输出大小 W:图像宽&#xff0c;H:图像高&#xff0c;D:图像深度&#xff08;通道数&#xff09; F&#xff1a;卷积核宽高&#xff0c;N:卷积核&#xff08;过滤器&#xff09;个数 S:步长&#xff0c;P:用零填充个数 卷积后输出图像大小&#xff1a; Width(W-F2P)/S…

Python | 安装Jupyter Notebook及其目录的更改 jupyter问题

20211223 在非输入出双击d删除单元格 20211218 https://www.jianshu.com/p/c51f9504d84f jupyter&#xff0c;ipynb转py 20211117 https://blog.csdn.net/qq_37884273/article/details/81777945 pycharm使用jupyter 快速注释 ctrl/ 当出现这种情况时候 先login out 然后再…

MySQL数据库的优化技术三

如何选择mysql的存储引擎 在开发中&#xff0c;我们经常使用的存储引擎 myisam / innodb/ memory存储引擎针对的是表和数据库 事务&#xff1a;MySQL事务主要用于处理操作量大&#xff0c;复杂度高的数据&#xff0c;比如说&#xff0c;在人员管理系统中&#xff0c;你删除一…