logo资料库

卷积神经网络.docx

第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
资料共17页,剩余部分请下载后查看
作者:机器之心 链接:https://www.zhihu.com/question/52668301/answer/131573702 来源:知乎 著作权归作者所有,转载请联系作者获得授权。 Part 1:图像识别任务 卷积神经网络,听起来像是计算机科学、生物学和数学的诡异组合,但它们已经成为计算机 视觉领域中最具影响力的革新的一部分。神经网络在 2012 年崭露头角,Alex Krizhevsky 凭 借它们赢得了那一年的 ImageNet 挑战赛(大体上相当于计算机视觉的年度奥林匹克),他 把分类误差记录从 26% 降到了 15%,在当时震惊了世界。自那之后,大量公司开始将深度 学习用作服务的核心。Facebook 将神经网络用于自动标注算法、谷歌将它用于图片搜索、 亚马逊将它用于商品推荐、Pinterest 将它用于个性化主页推送、Instagram 将它用于搜索架 构。 src="https://pic3.zhimg.com/v2-834043be6a015ef9d7cf04de0cf03cca_b.jpg" zh-lightbox-thumb" data-rawheight="249" class="origin_image 然而,应用这些网络最经典最流行的案例是进行图像处理。在图像处理任务中,让我们看一 下如何使用卷积神经网络进行图像分类。 问题空间 图像分类是对输入图像的操作,最终输出一组最好地描述了图像内容的分类(如猫、狗等) 或分类的概率。对人类来说,识别是打出生便开始学习的技能之一,对成人来说更是信手拈 来,毫不费力。我们只需一眼便能快速识别我们所处的环境以及环绕在我们身边的物体。当 我们看到一张图片或是环看四周的时候,无需刻意观察,多数时候也能立即描述出场景特征 并标记出每一个对象。快速识别不同模式、根据早前知识进行归纳、以及适应不同的图像环 境一直都是人类的专属技能,机器尚未享有。 src="https://pic3.zhimg.com/v2-a4552450f9ca496886c48cdd44475cce_b.jpg" zh-lightbox-thumb" data-rawheight="222" class="origin_image
输入与输出 当计算机看到一张图像(输入一张图像)时,它看的是一大堆像素值。根据图片的分辨率和 尺寸,它将看到一个 32 x 32 x 3 的数组(3 指代的是 RGB 值)。为了讲清楚这一点,假设 我们有一张 JPG 格式的 480 x 480 大小的彩色图片,那么它对应的数组就有 480 x 480 x 3 个元素。其中每个数字的值从 0 到 255 不等,其描述了对应那一点的像素灰度。当我们人 类对图像进行分类时,这些数字毫无用处,可它们却是计算机可获得的唯一输入。其中的思 想是:当你提供给计算机这一数组后,它将输出描述该图像属于某一特定分类的概率的数字 (比如:80% 是猫、15% 是狗、5% 是鸟)。 我们想要计算机做什么 现在我们知道了问题所在以及输入与输出,就该考虑如何处理了。我们想要计算机能够区分 开所有提供给它的图片,以及搞清楚猫猫狗狗各自的特有特征。这也是我们人类的大脑中不 自觉进行着的过程。当我们看到一幅狗的图片时,如果有诸如爪子或四条腿之类的明显特征, 我们便能将它归类为狗。同样地,计算机也可以通过寻找诸如边缘和曲线之类的低级特点来 分类图片,继而通过一系列卷积层级建构出更为抽象的概念。这是 CNN(卷积神经网络) 工作方式的大体概述,下面是具体细节。 生物学连接 首先介绍些背景。当你第一次听到卷积神经网络这一术语,可能会联想到神经科学或生物学, 那就对了。可以这样说。CNN 的确是从视觉皮层的生物学上获得启发的。视觉皮层有小部 分细胞对特定部分的视觉区域敏感。Hubel 和 Wiesel 于 1962 年进行的一项有趣的试验详 细说明了这一观点,他们验证出大脑中的一些个体神经细胞只有在特定方向的边缘存在时才 能做出反应(即放电)。例如,一些神经元只对垂直边缘兴奋,另一些对水平或对角边缘兴 奋。Hubel 和 Wisesl 发现所有这些神经元都以柱状结构的形式进行排列,而且一起工作才 能产生视觉感知。这种一个系统中的特定组件有特定任务的观点(视觉皮层的神经元细胞寻 找特定特征)在机器中同样适用,这就是 CNN 的基础。 结构 回到细节上来。更为详细的 CNN 工作概述指的是你挑一张图像,让它历经一系列卷积层、
非线性层、池化(下采样(downsampling))层和完全连接层,最终得到输出。正如之前所 说,输出可以是最好地描述了图像内容的一个单独分类或一组分类的概率。如今,难点在于 理解其中每一层的工作方法。我们先来看最重要的部分。 第一层——数学部分 CNN 的第一层通常是卷积层(Convolutional Layer)。首先需要了解卷积层的输入内容是什么。 如上所述,输入内容为一个 32 x 32 x 3 的像素值数组。现在,解释卷积层的最佳方法是想 象有一束手电筒光正从图像的左上角照过。假设手电筒光可以覆盖 5 x 5 的区域,想象一下 手电筒光照过输入图像的所有区域。在机器学习术语中,这束手电筒被叫做过滤器(filter, 有时候也被称为神经元(neuron)或核(kernel)),被照过的区域被称为感受野(receptive field)。 过滤器同样也是一个数组(其中的数字被称作权重或参数)。重点在于过滤器的深度必须与 输入内容的深度相同(这样才能确保可以进行数学运算),因此过滤器大小为 5 x 5 x 3。现 在,以过滤器所处在的第一个位置为例,即图像的左上角。当筛选值在图像上滑动(卷积运 算)时,过滤器中的值会与图像中的原始像素值相乘(又称为计算点积)。这些乘积被加在 一起(从数学上来说,一共会有 75 个乘积)。现在你得到了一个数字。切记,该数字只是 表示过滤器位于图片左上角的情况。我们在输入内容上的每一位置重复该过程。(下一步将 是将过滤器右移 1 单元,接着再右移 1 单元,以此类推。)输入内容上的每一特定位置都 会产生一个数字。过滤器滑过所有位置后将得到一个 28 x 28 x 1 的数组,我们称之为激活 映射(activation map)或特征映射(feature map)。之所以得到一个 28 x 28 的数组的原因 在于,在一张 32 x 32 的输入图像上,5 x 5 的过滤器能够覆盖到 784 个不同的位置。这 784 个位置可映射为一个 28 x 28 的数组。 src="https://pic3.zhimg.com/v2-790a3d600c6b6208f3c7db27c393a1ea_b.jpg" zh-lightbox-thumb" data-rawheight="347" class="origin_image
(注意:包括上图在内的一些图片来自于 Micheal Nielsen 的 「神经网络与深度学习 ( Neural Networks and Deep Learning)」一书。我强烈推荐这本书。这本书可免费在线浏览: Neural networks and deep learning) 当我们使用两个而不是一个 5 x 5 x 3 的过滤器时,输出总量将会变成 28 x 28 x 2。采用的 过滤器越多,空间维度( spatial dimensions)保留得也就越好。数学上而言,这就是卷积层 上发生的事情。 第一层——高层次角度 不过,从高层次角度而言卷积是如何工作的?每个过滤器可以被看成是特征标识符( feature identifiers)。这里的特征指的是例如直边缘、原色、曲线之类的东西。想一想所有图像都共 有的一些最简单的特征。假设第一组过滤器是 7 x 7 x 3 的曲线检测器。(在这一节,为了易 于分析,暂且忽略该过滤器的深度为 3 个单元,只考虑过滤器和图像的顶层层面。)作为曲 线过滤器,它将有一个像素结构,在曲线形状旁时会产生更高的数值(切记,我们所讨论的 过滤器不过是一组数值!) src="https://pic4.zhimg.com/v2-4e15bce4b402176ce8c6dca1538836d7_b.png" zh-lightbox-thumb" data-rawheight="278" class="origin_image 左图:过滤器的像素表示;右图:曲线检测器过滤器的可视化;对比两图可以看到数值和形 状的对应 回到数学角度来看这一过程。当我们将过滤器置于输入内容的左上角时,它将计算过滤器和 这一区域像素值之间的点积。拿一张需要分类的照片为例,将过滤器放在它的左上角。 切记,我 们 要 做 的 是 将 过 滤 器 与 图 像 的 原 始 像 素 值 相 乘 。 src="https://pic2.zhimg.com/v2-a7a8f5b74d66f7b5389f9c17a1417c09_b.png" zh-lightbox-thumb" data-rawheight="227" class="origin_image
切记,我们要做的是将过滤器与图像的原始像素值相乘。 src="https://pic4.zhimg.com/v2-f1c852e5da0df5407565aa5b0f78fe43_b.png" zh-lightbox-thumb" data-rawheight="241" class="origin_image 左图:感受野的可视化;右图:感受野的像素表示 * 过滤器的像素表示 简单来说,如果输入图像上某个形状看起来很像过滤器表示的曲线,那么所有点积加在一起 将会得出一个很大的值!让我们看看移动过滤器时会发生什么。 src="https://pic4.zhimg.com/v2-4c637624f3f01ba910736784547c37db_b.png" zh-lightbox-thumb" data-rawheight="224" class="origin_image
这个值小了很多!这是因为图像的这一部分和曲线检测器过滤器不存在对应。记住,这个卷 积层的输出是一个激活映射(activation map)。因此,在这个带有一个过滤器卷积的例子里 (当筛选值为曲线检测器),激活映射将会显示出图像里最像曲线的区域。在该例子中,28 x 28 x 1 的激活映射的左上角的值为 6600。高数值意味着很有可能是输入内容中的曲线激活 了过滤器。激活地图右上角的值将会是 0,因为输入内容中没有任何东西能激活过滤器(更 简单地说,原始图片中的这一区域没有任何曲线)。这仅仅是一组检测右弯曲线的过滤器。 还有其它检测左弯曲线或直线边缘的过滤器。过滤器越多,激活映射的深度越大,我们对输 入内容的了解也就越多。 声明:我在本小节中描绘的过滤器(filter)只是为了描述卷积中的数学过程。在下图中你可 以看到训练后的网络中第一个卷积层的过滤器的实际可视化。尽管如此,主要观点仍旧不变。 当在输入内容中寻找特定特征时,第一层上的过滤器在输入图像上进行卷积运算和「激活」 (即计算高数值)。 上图来自于斯坦福大学由 Andrej Karpathy 和 Justin Johnson 授课的 CS 231N 课程,推荐给 渴望更深层理解 CNN 的人们:CS231n: Convolutional Neural Networks for Visual Recognition
网络中的更深处 在传统卷积神经网络架构中,卷积层之间还有其它类型的层。我强烈建议有兴趣的人阅读和 它们有关的材料,并理解相应的功能和作用;但总的来说,它们提供的非线性和维度保留有 助于提高网络的稳健性(robustness)并控制过拟合。一个典型的 CNN 结构看起来是这样 的: 输入→卷积→ReLU→卷积→ReLU→池化→ReLU→卷积→ReLU→池化→全连接 我们稍后再来讨论关键的最后一层,先回顾一下学到了哪些。我们讨论了过滤器是如何在第 一个卷积层检测特征的。它们检测边缘和曲线一类的低级特征。正如想象的那样,为了预测 出图片内容的分类,网络需要识别更高级的特征,例如手、爪子与耳朵的区别。第一个卷积 层的输出将会是一个 28 x 28 x 3 的数组(假设我们采用三个 5 x 5 x 3 的过滤器)。当我们 进入另一卷积层时,第一个卷积层的输出便是第二个卷积层的输入。解释这一点有些困难。 第一层的输入是原始图像,而第二卷积层的输入正是第一层输出的激活映射。也就是说,这 一层的输入大体描绘了低级特征在原始图片中的位置。在此基础上再采用一组过滤器(让它 通过第 2 个卷积层),输出将是表示了更高级的特征的激活映射。这类特征可以是半圆(曲 线和直线的组合)或四边形(几条直线的组合)。随着进入网络越深和经过更多卷积层后, 你将得到更为复杂特征的激活映射。在网络的最后,可能会有一些过滤器会在看到手写笔迹 或粉红物体等时激活。如果你想知道更多关于可视化卷积网络中过滤器的内容,可以查看 Matt Zeiler 和 Rob Fergus 的一篇讨论该问题的颇为杰出的研究论文。在 YouTube 上,Jason Yosinski 有一段视频十分视觉化地呈现了这一过程(如下)。有趣的是,越深入网络,过滤 器的感受野越大,意味着它们能够处理更大范围的原始输入内容(或者说它们可以对更大区 域的像素空间产生反应)。 完全连接层 检测高级特征之后,网络最后的完全连接层就更是锦上添花了。简单地说,这一层处理输入 内容(该输入可能是卷积层、ReLU 层或是池化层的输出)后会输出一个 N 维向量,N 是 该程序必须选择的分类数量。例如,如果你想得到一个数字分类程序,如果有 10 个数字, N 就等于 10。这个 N 维向量中的每一数字都代表某一特定类别的概率。例如,如果某一 数字分类程序的结果矢量是 [0 .1 .1 .75 0 0 0 0 0 .05],则代表该图片有 10% 的概率是 1、 10% 的概率是 2、75% 的概率是 3、还有 5% 的概率是 9(注:还有其他表现输出的方式, 这里只展示了 softmax 的方法)。完全连接层观察上一层的输出(其表示了更高级特征的激 活映射)并确定这些特征与哪一分类最为吻合。例如,如果该程序预测某一图像的内容为狗, 那么激活映射中的高数值便会代表一些爪子或四条腿之类的高级特征。同样地,如果程序测 定某一图片的内容为鸟,激活映射中的高数值便会代表诸如翅膀或鸟喙之类的高级特征。大 体上来说,完全连接层观察高级特征和哪一分类最为吻合和拥有怎样的特定权重,因此当计
算出权重与先前层之间的点积后,你将得到不同分类的正确概率。 src="https://pic2.zhimg.com/v2-0d4e7aabbd235461330da8904cd20bb5_b.jpg" zh-lightbox-thumb" data-rawheight="206" class="origin_image 训练(也就是:什么能让其有效) 下面是神经网络中的一个我尚未提及但却最为重要的部分。阅读过程中你可能会提出许多问 题。第一卷积层中的滤波器是如何知道寻找边缘与曲线的?完全连接层怎么知道观察哪些激 活图?每一层级的滤波器如何知道需要哪些值?计算机通过一个名为反向传播的训练过程 来调整过滤器值(或权重)。 在探讨反向传播之前,我们首先必须回顾一下神经网络工作起来需要什么。在我们刚出生的 时候,大脑一无所知。我们不晓得猫啊狗啊鸟啊都是些什么东西。与之类似的是 CNN 刚开 始的时候,权重或过滤器值都是随机的。滤波器不知道要去寻找边缘和曲线。更高层的过滤 器值也不知道要去寻找爪子和鸟喙。不过随着年岁的增长,父母和老师向我们介绍各式各样 的图片并且一一作出标记。CNN 经历的便是一个介绍图片与分类标记的训练过程。在深入 探讨之前,先设定一个训练集,在这里有上千张狗、猫、鸟的图片,每一张都依照内容被标 记。下面回到反向传播的问题上来。 反向传播可分为四部分,分别是前向传导、损失函数、后向传导,以及权重更新。在前向传 导中,选择一张 32×32×3 的数组训练图像并让它通过整个网络。在第一个训练样例上,由 于所有的权重或者过滤器值都是随机初始化的,输出可能会是 [.1 .1 .1 .1 .1 .1 .1 .1 .1 .1],即 一个不偏向任何数字的输出。一个有着这样权重的网络无法寻找低级特征,或者说是不能做 出任何合理的分类。接下来是反向传播的损失函数部分。切记我们现在使用的是既有图像又 有标记的训练数据。假设输入的第一张训练图片为 3,标签将会是 [0 0 0 1 0 0 0 0 0 0]。损 失函数有许多种定义方法,常见的一种是 MSE (均方误差)。 假设变 量 L 等同该数值。正如所料,前两张训练图片的损失将会极高。现在,我们直观地想一下。 我们想要预测标记(卷积网络的输出)与训练标记相同(意味着网络预测正确)。为了做到 这一点,我们想要将损失数量最小化。将其视为微积分优化问题的话,也就是说我们想要找 出 是 哪 部 分 输 入 ( 例 子 中 的 权 重 ) 直 接 导 致 了 网 络 的 损 失 ( 或 错 误 )。
分享到:
收藏