理解卷积神经网络?

南洋理工大学的综述论文《Recent Advances in Convolutional Neural Networks》对卷积神经网络的各个组件以及进展情况进行总结和解读,其中涉及到 CNN 中各种重要层的数学原理以及各种激活函数和损失函数。机器之心技术分析师对该论文进行了解读。

论文地址:https://arxiv.org/abs/1512.07108

引言

近段时间来,深度 CNN 已经在多个深度学习应用领域取得了出色的表现,并且也有很好的泛化的能力。图像分类、目标检测、实例分割和场景理解等大量任务都使用 CNN 实现了当前最佳。这篇论文总结了从最初到现在的 CNN 发展情况,并给出了以下指示:

  • 解释卷积层的数学原理
  • 解释池化层的数学原理
  • 介绍某些常用的激活函数
  • 介绍某些常用的损失函数
  • 简要介绍基于 CNN 的应用

卷积层的数学原理

从数学上看,第 l 层的第 k 个特征图的位置 (i,j) 处的特征值可以写成 z_{i,j,k}^l,可这样计算:

其中 w_k^l 是第 l 层的权重,b_k^l 是第 l 层的偏置。x_{i,j}^l 是第 l 层的 (i,j) 位置的输入图块。一个特征图的权重是共享的。CNN 的最大优势之一就是这种权重共享机制,因为参数更少时,它能显著降低计算复杂度,同时还能让训练和优化更简单。

基于这类基本卷积层的一种最著名的应用是用于 USPS 数字和 MNIST 识别的 LeNet-5,如下图所示:

LeNet-5 由三类层构成,即卷积层、池化层和全连接层。卷积层的目标是学习更能代表输入的特征,池化层则是为了降低空间维度,全连接层则是用于类别预测。具体而言,卷积层由多个卷积核构成,这使其能够得到多个特征图,而且特征图的每个神经元都会连接到之前一层中的临近神经元区域,我们将这个区域称为之前一层中神经元的感受野(receptive field)。

如上图所示,首先通过求输入与一个学习后的卷积核的卷积,可以得到一个新的特征图,然后在卷积得到的结果上逐元素应用非线性激活。在当时,MNIST 或 USPS 数字的分类结果是很好的,即使现在也仍有很多研究者在使用它们来进行简单实验,以解释说明各种各样的算法。一般而言,任何类型的卷积网络都能在这些数据集上轻松实现 97%-98% 的准确度。

近段时间来,研究者还为卷积运算提出了一些新型的架构。其中最著名的一个是扩张卷积(dilated convolution)。扩张型 CNN 是 CNN 的一项近期进展,为卷积层引入了某些额外的超参数。通过在过滤器之间插入零,可以增大网络的感受野,使得网络能够覆盖更多相关信息。从数学上看,使用扩张方法的 1-D 扩张卷积可将信号 F 与大小为 r 的卷积核 k 进行卷积:(F_{*l} k)_t = sum_t (k_t * F_{t?l * t}),其中 *l 表示 l-扩张卷积。通过这种方式,该公式可以直接扩展成 2-D 扩张卷积。

上图展示了三个扩张卷积层,其中扩张因子 l 随每层而指数增大。中间特征图 F2 是由底部特征图 F1 通过应用 1-扩张卷积而得到的,其中 F2 中的每个元素都有一个大小为 3×3 的感受野。F3 是由 F2 通过应用 2-扩张卷积而得到的。特征图 F4 是由 F3 通过应用 4-扩张卷积而得到的。见红色轮廓。

池化层的数学原理

池化层是 CNN 中一个很重要的模块,这类层最重要的目标是降低特征图的大小,具体方式是通过使用某个函数来融合子区域,比如取平均或最大/最小值。池化的工作方式是在输入上滑动一个窗口并将该窗口中的内容送入池化函数。池化的工作方式非常类似于离散卷积,只是用某个其它函数替代了卷积核的线性组合。

描述沿某个方向 j 的池化层的性质的数学公式:

  • i_j:沿方向 j 的输入大小
  • k_j:沿方向 j 的池化窗口大小
  • s_j:沿方向 j 的步幅

所得到的沿方向 j 的输出大小 o_j 可以这样计算:o_j = (i_j - k_j) / s_j + 1,注意池化层通常不会使用零填充。

最大池化和平均池化可以归纳为 Lp 池化,可描述为:

其中 y_{i,j,k} 是池化算子在第 k 个特征图的位置 (i,j) 处的输出,a_{m,n,k} 是第 k 个特征图中的池化区域 R_{ij} 中位置 (m,n) 处的特征值。特别要指出,当 p=1 时,Lp 对应于平均池化,当 p 趋近无穷是,Lp 会变成最大池化。

池化还有一些其它选择,比如混合池化,其公式可写成:

这可被视为最大池化和平均池化的混合版本,其中 λ 是一个 0 到 1 之间的随机值,表明了使用平均池化和最大池化的位置。在实践中,这有望降低过拟合问题,且表现也会比单纯的最大池化或平均池化好一点。

某些常用的激活函数

ReLU

上图是 ReLU 函数。ReLU 激活函数定义如下:

其中 z_{i,j,k} 是第 k 通道中位置 (i,j) 处的激活函数的输入。ReLU 是一个逐元素的函数,会保留正的部分,并将负的部分变成零。相比于 sigmoid 或 tanh,ReLU 中的 max(.) 运算能使其速度更快。ReLU 的缺点是其在 0 处的不连续性,这可能会导致在反向传播中出现梯度消失问题。

Leaky ReLU

为了避免梯度消失问题,研究者提出了一种很重要的 ReLU 变体函数:Leaky ReLU。其数学形式为:

其中 λ 的取值范围是 (0,1)。Leaky ReLU 并不强制负的部分为零,相反它允许有一个较小的非零梯度。

PArametric ReLU

上图是 PReLU 的图示。PReLU 和 Leaky ReLU 的不同之处是参数 λ。首先来看 PReLU 的公式:

其中 λ_k 是第 k 个通道所学习到的参数。这些 λ 不是预定义的,而是通过数据学习到的,而且可学习的参数 λ_k 的数量正是网络中通道的数量。因为用于训练的额外参数很少,所以无需担心过拟合问题。它可以在反向传播过程中与其它参数一起同时优化。另外也还有很多其它有用的非线性激活函数,比如 ELU、Maxout 等。

某些常用的损失函数

hinge 损失

hinge 损失通常用于训练 SVM 及其变体。用于多类 SVM 的 hinge 损失定义如下:

其中 w 是可训练的权重;δ(y(i), j) 是指示函数,如果 y(i) = j,则其输出为 1,否则输出为 0。N 是样本数量,K 是类别数量。如果 p=1,则称为 L1-hinge 损失;如果 p=2,则称为 L2-hinge 损失。

softmax 损失

softmax 损失可以说是分类目标方面最流行的损失,其中 N 是图像数量,K 是类别数量,p_j 是第 j 类的概率,y 是基本真值。1{.} 是一个指示函数,如果 y_i == j,则输出 1,否则输出 0。

softmax 损失是一种泛化的 logistic 损失,能将预测结果转换成范围 (0,1) 之间的非负值并给出在各类别上的概率分布。

对比损失

对比损失常被用于训练用于图像检索或人脸验证的孪生网络。其基本思想是增大不相似配对之间的距离,减小相似配对之间的距离。数学公式可写成:

如果 y=1,则第二项为 0,总损失就来自第一项,这就意味着目标就成了降低相似配对之间的距离。如果 y=0,则第一项为 0,总损失就来自第二项,这就意味着目标就成了增大不相似配对之间的距离。注意,如果不相似配对之间的距离小于余量,则总损失会增大。

三重损失

三重损失是对对比损失的一种聪明的改进。假设我们有三张图像,这个三元组单元 (x_a, x_p, x_n) 包含一个锚图像、正例和负例。

上述公式是三重损失,其中 N 是图像数量,d_{a,p} 是锚图像与其正例图像之间的距离,d_{a,n} 是锚图像与其负例图像之间的距离,m 是余量。其目标是增大 d_{a,n},使得 d_{a,p} 和 d_{a,n} 之差大于余量 m。三重损失的目标是最小化锚图像和正例之间的距离,以及最大化负例和锚图像之间的距离。

常用的损失函数有很多,比如 histogram 损失、lda 损失、KL-散度损失等。就不一一介绍了。

CNN 的应用

图像分类

2012 年,Krizhevsky et al. [1] 提出了 LeNet-5 的一个扩展版 AlexNet,在 ILSVRC 2012 取得了最佳表现。上图即为其架构。由于计算时间限制,他们使用了一种并行结构来进行训练。一个 GPU 运行图中顶部的层部分,另一个 GPU 运行上图底部的层。

目标检测

2014-2017 年,微软和 Facebook 的研究者开发了多种基于 CNN 的目标检测方法,包括但不限于 R-CNN、SPP-Net、fast RCNN、faster RCNN 和 Mask RCNN。上图是基本的 R-CNN [2]。在从原始图像中提取出区域提议之后,它们会被调整为固定尺寸并会被发送给一个预训练的 CNN。然后输出特征会得到优化,以便边界框回归和分类。

图像分割

图像分类可以粗略地分为两部分:形义分割和实例分割。其目标是预测单张图像中每个像素属于哪一类。CNN 可用于从像素层面或图块层面预测类别可能性。Long et al. [3] 为像素级分割提出了一种全卷积网络,如上图所示,该网络类似于一般的网络,只是最后一层不同,这一层被称为去卷积层。这一层的学习目标是上采样标签图的分辨率。其结果可以是一张输出图像,其中包含了密集的像素级预测。

基于 CNN 的方法可用于很多不同的领域,比如图像检索、人脸识别、文本分类、机器翻译、3D 重建、视觉问答或图像绘制等。这里不可能全面覆盖。

分析师简评

尽管 CNN 表现出色而且泛化能力优异,但仍还有些问题仍待进一步研究。CNN 的训练需要大规模数据集和大量计算能力,但人工收集数据的成本很高而且易出错。因此,研究者们也在探索能利用大量无标注数据的弱监督学习和无监督学习。与此同时,为了加速训练过程,也有必要开发高效且可扩展的并行训练算法。最后且最重要的是如何解释网络以及理解网络的内在部分,因为人们如果不知道 CNN 表现优异的原因,人们不会愿意坐在基于 CNN 的自动驾驶汽车中或接受基于 CNN 的医疗技术的治疗。

原文地址:https://www.cnblogs.com/chuangye95/p/10204541.html

时间: 2024-10-29 19:05:39

理解卷积神经网络?的相关文章

理解卷积神经网络中的channel

在一般的深度学习框架的 conv2d 中,如 tensorflow.mxnet,channel都是必填的一个参数 在tensorflow中,对于输入样本中 channels 的含义,一般是RGB图片,channels的数量是3(R.G.B).而灰度图是的channel是1: mxnet 中,一般channels的含义是:每个卷积层中卷积核的数量. 为了更好的理解,下面举个例子.图片来自 吴恩达老师的深度学习课程 如下图,假设有一个 6x6x3 SD敢达送大放送 阿斯飞洒 是飞洒个艾丝凡 艾丝凡

[透析] 卷积神经网络CNN究竟是怎样一步一步工作的?(转)

视频地址:https://www.youtube.com/embed/FmpDIaiMIeA    转载:http://www.jianshu.com/p/fe428f0b32c1 文档参阅:pdf [2MB] & ppt [6MB] & Web View & GitBook 补充知识:深度学习 - 反向传播理论推导 当你听到说深度学习打破了某项新技术障碍,那么十有八九就会涉及到卷积神经网络.它们也被称作CNNs或着ConvNets,是深层神经网络领域的主力.它们已经学会对图像进行

卷积神经网络(待更新)

在机器视觉,图像处理领域,卷积神经网络取得了巨大的成功.本文将参考UFLDL和DEEPLEARNING.NET的教程,结合自己的理解,梳理一下卷积神经网络的构成以及其BP算法的求解.虽然利用theano可以方便的实现LeNet5,但是不利于学习和理解卷积神经网络,所以最后会自己动手用python实现一个简单的LeNet5,并尝试利用python的PyCUDA库进行加速. 首先看LeNet5的结构,如下图所示(来自Yann LeCun的论文). 对于卷积层,其计算公式为 其中K表示由L层到L+1层

卷积神经网络-解释1

[翻译] 神经网络的直观解释 2017/07/27 17:36 这篇文章原地址为An Intuitive Explanation of Convolutional Neural Networks,卷积神经网络的讲解非常通俗易懂. 什么是卷积神经网络?为什么它们很重要? 卷积神经网络(ConvNets 或者 CNNs)属于神经网络的范畴,已经在诸如图像识别和分类的领域证明了其高效的能力.卷积神经网络可以成功识别人脸.物体和交通信号,从而为机器人和自动驾驶汽车提供视力. 在上图中,卷积神经网络可以识

卷积神经网络到底如何提取特征的

记录一些网友写的博客或者帖子,供学习用,感谢! 用文氏图来理解卷积神经网络如何决定提取哪些特征:https://blog.csdn.net/kane7csdn/article/details/84890592 为什么卷积能够提取图像的特征?看完此文应该能够给你一个答案:https://blog.csdn.net/charleswangzi/article/details/82733016 浅析卷积神经网络为何能够进行特征提取:https://blog.csdn.net/weixin_420786

卷积神经网络CNN介绍:结构框架,源码理解【转】

1. 卷积神经网络结构 卷积神经网络是一个多层的神经网络,每层都是一个变换(映射),常用卷积convention变换和pooling池化变换,每种变换都是对输入数据的一种处理,是输入特征的另一种特征表达:每层由多个二维平面组成,每个平面为各层处理后的特征图(feature map). 常见结构: 输入层为训练数据,即原始数据,网络中的每一个特征提取层(C-层)都紧跟着一个二次提取的计算层(S-层),这种特有的两次特征提取结构使网络在识别时对输入样本有较高的畸变容忍能力.具体C层和S层的个数不确定

『cs231n』卷积神经网络的可视化与进一步理解

cs231n的第18课理解起来很吃力,听后又查了一些资料才算是勉强弄懂,所以这里贴一篇博文(根据自己理解有所修改)和原论文的翻译加深加深理解. 可视化理解卷积神经网络 原文地址 一.相关理论 本篇博文主要讲解2014年ECCV上的一篇经典文献:<Visualizing and Understanding Convolutional Networks>,可以说是CNN领域可视化理解的开山之作,这篇文献告诉我们CNN的每一层到底学习到了什么特征,然后作者通过可视化进行调整网络,提高了精度.最近两年

卷积神经网络的初步理解LeNet-5(转)

深度神经网路已经在语音识别,图像识别等领域取得前所未有的成功.本人在多年之前也曾接触过神经网络.本系列文章主要记录自己对深度神经网络的一些学习心得. 第二篇,讲讲经典的卷积神经网络.我不打算详细描述卷积神经网络的生物学运行机理,因为网络上有太多的教程可以参考.这里,主要描述其数学上的计算过程,也就是如何自己编程去实现的问题. 1. 概述 回想一下BP神经网络.BP网络每一层节点是一个线性的一维排列状态,层与层的网络节点之间是全连接的.这样设想一下,如果BP网络中层与层之间的节点连接不再是全连接,

理解NLP中的卷积神经网络(CNN)

此篇文章是Denny Britz关于CNN在NLP中应用的理解,他本人也曾在Google Brain项目中参与多项关于NLP的项目. · 翻译不周到的地方请大家见谅. 阅读完本文大概需要7分钟左右的时间,如果您有收获,请点赞关注 :) 一.理解NLP中的卷积神经网络(CNN) 现在当我们听到神经网络(CNN)的时候,一般都会想到它在计算机视觉上的应用,尤其是CNN使图像分类取得了巨大突破,而且从Facebook的图像自动标注到自动驾驶汽车系统,CNN已经成为了核心. 最近,将CNN应用于NLP也