为什么CNN能自动提取图像特征
1.介绍
在大部分传统机器学习场景里,我们先经过特征工程等方法得到特征表示,然后选用一个机器学习算法进行训练。在训练过程中,表示事物的特征是固定的。
后来嘛,后来深度学习就崛起了。深度学习对外推荐自己的一个很重要的点是——深度学习能够自动提取特征。如果你是从 DNN 开始了解深度学习,你会对 “深度学习能够自动提取特征” 很迷茫。但是如果你是从 CNN 开始了解深度学习的,你就会很自然地理解 “深度学习能够自动提取特征”。
2.提取特征
CNN 网络主要有两个算子,一个是卷积层,另一个是池化层。大部分人对于池化层并没有什么理解难度。池化层无非滑动一个滑动窗口,滑动窗口之内最大值或者取平均值。对于卷积层,我们大部分人都是看下面的图了解的。卷积层也是滑动一个滑动窗口,滑动窗口之内做卷积运算。
理解 CNN 的卷积层和池化层如何运算,并不能自动给我们关于 CNN 原理的洞见。我们依然存在疑惑: 为什么 CNN 的卷积层是这样的?Lecun 大神设计 CNN 的卷积层是怎么考虑的?
为了理解这个问题,我们先思考一个问题:提取图片特征最朴素的想法是什么?简化问题,我们要分类黑白图片中的字母 A 还是 X。
这两个有一个鲜明区别是 A 的顶部模式。
如果能在图片中抽取 A 的顶部模式,图片中的字母是 A; 如果不能,图片中的字母是 X。为了提取图片是否包含 A 的顶部模式,我们将 A 的顶部模式在图片中滑动,切分处理的局部图片和 A 顶部模式做内积。下图显示是 A 图片的 1 和 2 部位切分出来的局部图片和 A 的顶部模式做内积。
根据图中表示,A 图片的 1 部位是 A 字母的顶部,内积为 4; 2 部位不是 A 顶部,内积只有 1。在 A 图片中滑动 A 顶部模式,得到的结果为
然后我们取其中最大值得到最终结果是 4。这是我们可以说图片包含 A 顶部模式的的 “倾向性” 或者说 “可能性” 是 4。我们就提取了一个特征。
X 那张图按照相同的操作,结果为 3。这个结果是从 X 的交叉部位得到的。
这里我们会发现:A 的顶部模式在图片中滑动其实就是 CNN 里卷积层做的事情, A 的顶部模式就是卷积核;同时,在内积结果上取最大值就是最大池化层的操作。也就是说 CNN 用卷积层和池化层,实践了最朴素的图片特征提取方法。当然了,真实世界的 CNN 要复杂得多: 1) 真实世界的图片和卷积核是多层的。这个好理解,在图片是多层的情况下,局部模式肯定也是多层,卷积核自然也是多层的。2) 真实世界的 CNN 并不是一个卷积层搭配一个池化层,而是存在连续多层卷积层。这个也好理解。在这个时候,局部模式是有多个连续卷积核表示的。
3.自动学习
通过上面的讲解,我们知道 CNN 模型是如何利用卷积层和池化层提取图片的特征,其中的关键是卷积核表示图片中的局部模式。还是拿上面例子来说,我们知道并且选用了 A 的顶部模式这个卷积核。
但是在真实世界中我们是不能做。对于大规模图片库我们并不知道那个局部模式是有效的。即使我们选定局部模式,也会因为太过具体而失去反泛化性。那么我们怎么应对这个问题呢,即如何确定卷积核的值呢?
这里就要讲到大名鼎鼎梯度向后传播算法。一开始我们随机初始化卷积核的参数,然后通过基于梯度向后传播算法的优化算法,自适应地调整卷积核的值,从而最小化模型预测值和真实值之间的误差。这样得到的卷积核的参数不一定直观,但是能够有效地提取特征,使得模型预测值和真实值之间的误差最小。为了简化问题,下面我们还是用单层图片做例子。即使简化到单层图片,我们依然觉得计算卷积层和池化层的梯度比较难。为了进一步直观化,我们将卷积层分解多个容易计算梯度的简单线性算子,将池化层分解容易计算梯度的多个简单操作。
通过分解卷积层和池化层,我们易得下面一系列计算梯度公式。
池化层本身没有参数,只需要把梯度往回传就行。这里我们要关注下最大池化层:最大值操作是选择窗口内最大值,怎么看都不是连续函数,就不可能存在导数(梯度)。假设
MaxPooling(xx)=xi,j
那么
∂MaxPooling(xx)∂xxi,j∂MaxPooling(xx)∂xxnot–i,j==10
另外一个问题就是怎么求卷积层的梯度。我们用 conv(xx,ww) 表示卷积, conv(xx,ww)i,j 表示卷积结果中的第 i 行第 j 列, xconv−i,j 表示用于生成卷积结果第 i 行第 j 列的图片局部(即 xconv−i,j⋅ww=conv(xx,ww)i,j )。卷积核参数的梯度可以用下面的公式计算
∂conv(xx,ww)ww=∑i,jconv(xx,ww)i,jww=∑i,jxconv−i,j
至于梯度怎么传回去呢?如下图所示,我们先定义 δ(i,j) 表示图片大小的矩阵,生成第 i 行第 j 列的卷积结果的图片区域用卷积核参数填充,其他区域为 0。
此时我们得到梯度往回传的公式。
∂conv(xx,ww)∂xx=∑i,jδ(i,j)
4.总结
通过卷积核刻画图片的局部模式,CNN 能够提取图片的特征; 通过梯度向后传播算法,CNN 能够确定每个卷积核的参数,从而实现自动提取图片的特征。这样,我们应该很自然地理解 “深度学习能够自动提取特征” 了。
为什么 CNN 等深度学习模型自动提取特征这么重要?我们可以从 Pedro Domingos [1] 关于 “机器学习本质是什么” 开始说起。Pedro Domingos [1] 认为:
表示是指我们如何表达相关特征,涉及到特征工程、特征算子和特征组合等问题。目标是指我们想模型学习到什么,涉及问题建模和目标函数。优化是怎么计算得到模型,涉及梯度下降、随机梯度下降或者演化计算等优化算法。在大部分传统机器学习场景里,表示和目标是分离的。在用优化算法求解目标的过程中,表示事物的特征是固定的,并不会根据目标和优化的反馈自适应地调整特征。
神经网络或者说深度神经网络,将表示和目标结合起来进行 “联合学习”。在深度学习模型训练过程中,特征相关的参数(比如 CNN 卷积核的参数)可以根据目标和优化的反馈(梯度)自适应地调整。特征能够自适应地调整,深度学习才有能力建立深度的和层次化的特征表达体系。
参考文献
[1] Domingos, Pedro. “A few useful things to know about machine learning.” Communications of the ACM 55.10 (2012): 78-87.
转自http://www.algorithmdog.com/cnn-extracts-feat?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
为什么CNN能自动提取图像特征的更多相关文章
- 原来CNN是这样提取图像特征的。。。
对于即将到来的人工智能时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的领域,会不会感觉马上就out了?作为机器学习的一个分支,深度学习同样需要计算机获得强大的学 ...
- CNN基础二:使用预训练网络提取图像特征
上一节中,我们采用了一个自定义的网络结构,从头开始训练猫狗大战分类器,最终在使用图像增强的方式下得到了82%的验证准确率.但是,想要将深度学习应用于小型图像数据集,通常不会贸然采用复杂网络并且从头开始 ...
- 【图像算法】图像特征:GLCM灰度共生矩阵,纹理特征
[图像算法]图像特征:GLCM SkySeraph Aug 27th 2011 HQU Email:zgzhaobo@gmail.com QQ:452728574 Latest Modifie ...
- OPENCV图像特征点检测与FAST检测算法
前面描述角点检测的时候说到,角点其实也是一种图像特征点,对于一张图像来说,特征点分为三种形式包括边缘,焦点和斑点,在OPENCV中,加上角点检测,总共提供了以下的图像特征点检测方法 FAST SURF ...
- 肺结节CT影像特征提取(一)——肺结节CT图像特征概要
本科毕设做的是医学CT图像特征提取方法研究,主要是肺部CT图像的特征提取.由于医学图像基本为灰度图像,因此我将特征主要分为三类:纹理特征,形态特征以及代数特征,每种特征都有对应的算法进行特征提取. 如 ...
- VGG16提取图像特征 (torch7)
VGG16提取图像特征 (torch7) VGG16 loadcaffe torch7 下载pretrained model,保存到当前目录下 th> caffemodel_url = 'htt ...
- Caffe学习笔记4图像特征进行可视化
Caffe学习笔记4图像特征进行可视化 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit201 ...
- 【遥感专题系列】微波遥感(三、SAR图像特征)
SAR是主动式侧视雷达系统,且成像几何属于斜距投影类型.因此SAR图像与光学图像在成像机理.几何特征.辐射特征等方面都有较大的区别.在进行SAR图像处理和应用前,需要了解SAR图像的基本特征. 本文主 ...
- 【Python图像特征的音乐序列生成】使用Python生成简单的MIDI文件
这个全新的Python音乐创作系列,将会不定期更新.写作这个系列的初衷,是为了做一个项目<基于图像特征的音乐序列生成模型>,实时地提取照片特征,进行神经网络处理,生成一段音乐. 千里之行, ...
随机推荐
- mysql 数据库必备命令操作,入门练习一下
mysql 数据库必备命令操作 show databases: 查看所有的数据库: create database jfedu: 创建名为jfedu数据库: use nihao: 进入jfedu数据库 ...
- 百度地图报错:APP Referer校验失败
今天微信小程序,通过经纬度,调用百度api,将经纬度转换成城市名和街道地址,结果小程序报错. 错误信息如下: 这个是KEY的白名单设置问题.因为白名单设置限制了来源信息.只要在下面红色部分设置IP,或 ...
- JS----贪吃蛇游戏
在网上找到的几种例子 <!DOCTYPE html> <html > <head> <meta http-equiv="Content-Type&q ...
- powerdessigner使用教程
https://jingyan.baidu.com/article/86fae346e089393c49121a11.html
- hive 的理解
什么是Hive 转自: https://blog.csdn.net/qingqing7/article/details/79102691 1.Hive简介 Hive 是建立在 Hadoop 上的数据仓 ...
- Controlled Components
[Controlled Components] In HTML, form elements such as <input>, <textarea>, and <sele ...
- sql语句查询菜单结果成 树状图类型 注意适用于id是四位数
select * from ( select pid,id,name,url,concat(id,":") idOrder from menu where pid=0 and st ...
- Pandas基本功能之层次化索引及层次化汇总
层次化索引 层次化也就是在一个轴上拥有多个索引级别 Series的层次化索引 data=Series(np.random.randn(10),index=[ ['a','a','a','b','b', ...
- HTML图片热区map area的用法(转)
<area>标记主要用于图像地图,通过该标记可以在图像地图中设定作用区域(又称为热点),这样当用户的鼠标移到指定的作用区域点击时,会自动链接到预先设定好的页面.其基本语法结构如下: 1 & ...
- as3.0橡皮擦功能
//主容器 var main:Sprite = new Sprite(); main.mouseEnabled = false; addChild(main) //临时容器(所有操作都将先画在临时容器 ...