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能自动提取图像特征的更多相关文章

  1. 原来CNN是这样提取图像特征的。。。

    对于即将到来的人工智能时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的领域,会不会感觉马上就out了?作为机器学习的一个分支,深度学习同样需要计算机获得强大的学 ...

  2. CNN基础二:使用预训练网络提取图像特征

    上一节中,我们采用了一个自定义的网络结构,从头开始训练猫狗大战分类器,最终在使用图像增强的方式下得到了82%的验证准确率.但是,想要将深度学习应用于小型图像数据集,通常不会贸然采用复杂网络并且从头开始 ...

  3. 【图像算法】图像特征:GLCM灰度共生矩阵,纹理特征

    [图像算法]图像特征:GLCM SkySeraph Aug 27th 2011  HQU Email:zgzhaobo@gmail.com    QQ:452728574 Latest Modifie ...

  4. OPENCV图像特征点检测与FAST检测算法

    前面描述角点检测的时候说到,角点其实也是一种图像特征点,对于一张图像来说,特征点分为三种形式包括边缘,焦点和斑点,在OPENCV中,加上角点检测,总共提供了以下的图像特征点检测方法 FAST SURF ...

  5. 肺结节CT影像特征提取(一)——肺结节CT图像特征概要

    本科毕设做的是医学CT图像特征提取方法研究,主要是肺部CT图像的特征提取.由于医学图像基本为灰度图像,因此我将特征主要分为三类:纹理特征,形态特征以及代数特征,每种特征都有对应的算法进行特征提取. 如 ...

  6. VGG16提取图像特征 (torch7)

    VGG16提取图像特征 (torch7) VGG16 loadcaffe torch7 下载pretrained model,保存到当前目录下 th> caffemodel_url = 'htt ...

  7. Caffe学习笔记4图像特征进行可视化

    Caffe学习笔记4图像特征进行可视化 本文为原创作品,未经本人同意,禁止转载,禁止用于商业用途!本人对博客使用拥有最终解释权 欢迎关注我的博客:http://blog.csdn.net/hit201 ...

  8. 【遥感专题系列】微波遥感(三、SAR图像特征)

    SAR是主动式侧视雷达系统,且成像几何属于斜距投影类型.因此SAR图像与光学图像在成像机理.几何特征.辐射特征等方面都有较大的区别.在进行SAR图像处理和应用前,需要了解SAR图像的基本特征. 本文主 ...

  9. 【Python图像特征的音乐序列生成】使用Python生成简单的MIDI文件

    这个全新的Python音乐创作系列,将会不定期更新.写作这个系列的初衷,是为了做一个项目<基于图像特征的音乐序列生成模型>,实时地提取照片特征,进行神经网络处理,生成一段音乐. 千里之行, ...

随机推荐

  1. Java复习 之容器

    小生快要准备找工作了 现在开始复习一下Java基础之容器 Set和List是一个个往里面存 Map是两个两个往里面装 所谓重复指的是他们互相equals Collection 接口定义了存取一组对象的 ...

  2. BOS物流项目第十一天

    教学计划 1.在realm中进行授权 2.使用shiro的方法注解方式权限控制 a.  在spring文件中配置开启shiro注解支持 b.  在Action方法上使用注解 3.使用shiro的标签进 ...

  3. Layout两列定宽中间自适应三列布局

    最容易理解的一种方法,以中间内容为主体,通过 margin 或者 padding 将两侧撑开,最后用 absolute 定位两侧 html: <div class="container ...

  4. 2017-2018面向对象程序设计(Java)课程助教工作职责及分工

    2017-2018面向对象程序设计(Java)课程助教工作职责及分工 一.研究生助教团队名单 张光辉,王玉环,牟巧玲,徐进 二.工作职责与要求 1) 针对所指导学习小组学生,批改课程实验作业每周一次, ...

  5. Centos7 安装 erlang rabbitmq

    1.安装Erlang依赖采用官网的rpm包的形式进行安装,不采用yum(由系统进行自动安装 可能因为版本低的问题而出现一系列问题) erlang依赖 rpm包下载地址https://github.co ...

  6. Centos6.5 防火墙设置详解

    vim /etc/sysconfig/iptables #丢弃所有进入请求 INPUT DROP [0:0] #丢弃所有转发请求 FORWARD DROP [0:0] #允许所有的output请求 O ...

  7. 检查WMI协议是否通的

    在APM上的运行执行“wbemtest”,然后在上面的root\sivm前面加RPC不通的机器,先查WMI协议是否是通的

  8. Missing artifact org.hibernate:hibernate-core:jar:4.3.0.Final

    Missing artifact org.hibernate:hibernate-core:jar:4.3.0.Final

  9. python 内置函数(二) 进阶函数 递归内容及二分法查找 知识点

    1,lambda:  匿名函数 2.sorgted()  排序函数 3,filter()   过滤函数 筛选 4,map()  映射函数 5.递归 6.二分法 一. 匿名函数: lambda lamb ...

  10. TCP的状态转移

    状态转移图 状态分析 客户端 CLOSED 初始状态 调用connect将发起主动打开,发送SYN J到服务端,进入SYN_SENT状态. SYN_SENT 客户端已经发送SYN报文 接收到服务端发回 ...