卷积神经网络CNN理论到实践(2)

来源:互联网 发布:php 页面 空格 编辑:程序博客网 时间:2024/06/04 18:56

  • 导读
  • 池化
    • 1 平移不变
    • 2 减轻网络负担
    • 3 处理变长输入
  • 无限强的先验
  • 总结
  • welcome

写这篇博文用了很多时间和精力,如果这篇博文对你有帮助,希望您可以打赏给博主相国大人。哪怕只捐1毛钱,也是一种心意。通过这样的方式,也可以培养整个行业的知识产权意识。我可以和您建立更多的联系,并且在相关领域提供给您更多的资料和技术支持。

赏金将用于拉萨儿童图书公益募捐

手机扫一扫,即可:

附:《春天里,我们的拉萨儿童图书馆,需要大家的帮助


1. 导读

在上一篇博文《卷积神经网络CNN理论到实践(1)》中,我们首先介绍卷积的概念,然后解释在神经网络中使用卷积的原因:sparse interactions,parameter sharing和equivariant representations.接下来,我们将要介绍的内容是:
1. 池化
2. 一些在神经网络中常用的卷积函数
3. 如何在数据集上使用不同维度的卷积
4. 使得卷积操作更高效的方式
5. 使用tensorflow进行CNN的实现
6. 讨论如何使用CNN做中文文本分类。

2.池化

一个典型的卷积网络一般包含三个阶段:
在第一个阶段,我们会对输入做卷积操作得到输出(结合之前对卷积的介绍,我们知道这些输出是线性的因此也叫作线性响应)
在第二个阶段,也叫作detector stage,我们会对上面的线性响应做一些非线性的变换。非线性函数有很多,比较常用是线性整流函数(rectified linear activation function, Rectified Linear Unit, ReLU).
在第三个阶段,我们会使用池化函数来修正输出。

ReLU
线性整流函数(Rectified Linear Unit, ReLU),又称修正线性单元, 是一种人工神经网络中常用的激活函数(activation function),通常指代以斜坡函数及其变种为代表的非线性函数。比较常用的线性整流函数有斜坡函数 f(x)=max(0,x),以及带泄露整流函数 (Leaky ReLU),其中 x 为神经元(Neuron)的输入。线性整流被认为有一定的生物学原理,并且由于在实践中通常有着比其他常用激活函数(譬如sigmod)更好的效果,而被如今的深度神经网络广泛使用于诸如图像识别等计算机视觉,人工智能领域。
通常意义下,线性整流函数指代数学中的斜坡函数,即f(x)=max(0,x)。而在神经网络中,线性整流作为神经元的激活函数,定义了该神经元在线性变换 wTx+b之后的非线性输出结果。换言之,对于进入神经元的来自上一层神经网络的输入向量 x ,使用线性整流激活函数的神经元会输出max(0,wTx+b)至下一层神经元或作为整个神经网络的输出(取决现神经元在网络结构中所处位置)。

变种
线性整流函数在基于斜坡函数的基础上有其他同样被广泛应用于深度学习的变种,譬如带泄露线性整流>(Leaky ReLU), 带泄露随机线性整流(Randomized Leaky ReLU),以及噪声线性整流(Noisy ReLU)

带泄露线性整流
在输入值 x 为负的时候,”带泄露线性整流函数”(Leaky ReLU)的梯度为一个常数 λ>(0,1),而不是0。在输入值为正的时候,带泄露线性整流函数和普通斜坡函数保持一致。换言之,

f(x)={xλxif x>0if x0

在深度学习中,如果设定λ为一个可通过反向传播算法(Backpropagation)学习的变量,那么带泄露线性整流又被称为”参数线性整流”(Parametric ReLU)。

带泄露随机线性整流
”带泄露随机线性整流”(Randomized Leaky ReLU, RReLU)最早是在Kaggle全美数据科学大赛(NDSB)中被首先提出并使用的。相比于普通带泄露线性整流函数,带泄露随机线性整流在负输入值段的函数梯度 λ 是一个取自连续性均匀分布U(l,u)概率模型的随机变量,即

f(x)={xλxif x>0if x0

其中 λU(l,u),l<ul,u[0,1)

噪声线性整流
”噪声线性整流”(Noisy ReLU)是修正线性单元在考虑高斯噪声的基础上进行改进的变种激活函数。对于神经元的输入值 x,噪声线性整流加上了一定程度的正态分布的不确定性,即

f(x)=max(0,x+Y)

其中随机变量 YN(0,σ(x))。目前,噪声线性整流函数在受限玻尔兹曼机(Restricted Boltzmann Machine)在计算机图形学的应用中取得了比较好的成果.

下图表示的是一个典型卷积网络的结构。一般有两种表述方式:
左侧:在这种表示方式中,卷积网络被认为是有一些相对较为复杂的层组成。每一个卷积层内部都有很多阶段(stage)。这个示意图中只画出了一个卷积层。事实上可以在卷积层后面接着加卷积层。
由上一篇博文我们知道,这一个卷积层正好对应一个kernel.
右侧:在这种表示方式中,我们把卷积层视作一些简单层。但并不是每一个简单曾都有参数。

这里写图片描述

所谓的池化函数,指的就是用相邻输出的统计量来代替某些位置上的输出。一个典型的池化函数是max pooling(最大池),它会返回矩形邻居的最大值。其他的池化函数还有对矩形邻域求均值、L2正则(什么是L2正则?这个不懂的话,那么your are idiot:))或者基于距离矩形中心距离的加权均值。
接下来,我们将要探讨池化的作用。

2.1 平移不变

池化有什么用处?首先是,它使得小规模的输入平移后,输出保持不变,即平移不变。平移不变的意思是说,如果我们对输入做一个小规模的平移,那么大多数池化后的输出将不会改变,如下图所示。

这里写图片描述

采用max pooling,detector stage向右移动一个像素时,大多数的pooling stage结果是不变的。

局部平移不变性(Invariance to local translation)是一个很有用的性质,尤其是当我们关心某个特征是否出现而不关心它出现的具体位置时。例如,当判定一张图像中是否包含人脸时,我们并不需要知道眼睛的精确像素位置,我们只需要知道有一只眼睛在脸的左边,有一只在右边就行了。但在一些其他领域,保存特征的具体位置却很重要。例如当我们想要寻找一个由两条边相交而成的拐角时,我们就需要很好地保存边的位置来判定它们是否相交。

使用池化可以看作是增加了一个无限强大的先验(在第3节我们会集中探讨):这一层学得的函数必须具有对少量平移的不变性。当这个假设成立时,池化可以极大地提高网络的统计效率。举例来说:p(ω|x)=p(x|ω)p(ω)左侧的概率是后验概率,右侧的p(x|ω)是似然概率,p(ω)是先验概率。当这个先验概率对输入敏感时,后验概率将很大程度上收到似然的影响。当先验对出入不敏感时,后验概率受到似然的影响就小一些。

刚才我们看到,池化对平移具有很好的不变性,那么池化可不可以对其他变换保持不变性呢?是可以做到的,以max pooling为例,我们来看看池化操作何如对旋转保持不变性:

这里写图片描述

这三个过滤器旨在匹配稍微不同方向的5.当输入中出现5时,相应的过滤器会匹配它并且在探测单元中引起大的激活。然后,无论哪个探测单元被激活,最大池化单元都具有大的激活。上图中两个不同的输入导致两个不同的探测单元被激活,然而对池化单元的影响大致相同。这个原则在 maxout网络和其他卷积网络中更有影响。
我们把这种技术处理叫做多通道方法。到目前为止,我们可以明白:空间位置上的最大池化对于平移是天然不变的;学习其他变换时则可以采用这种多通道方法进行处理。

2.2 减轻网络负担

在第2节中,我们介绍过卷积网络的构成。其中我们会看到,detector stage通过非线性操作,滤掉了一些节点。而对于detector stage之后的池化而言,由于综合了邻居的反馈,这使得池化单元少于探测单元成为可能,例如,我们可以通过综合池化区域的 k个像素的统计特征而不是单个像素来实现。下图是一个带有降采样的池化的例子:

这里写图片描述

这里我们使用最大池化,池的宽度为三并且池之间的步幅为二。这使得表示的大小减少了一半,减轻了下一层的计算和统计负担。

2.3 处理变长输入

在很多任务中,池化对于处理不同大小的输入具有重要作用。例如我们想对不同大小的图像进行分类时,分类层的输入必须是固定的大小,而这通常通过调整池化区域的偏置大小来实现,这样分类层总是能接收到相同数量的统计特征而不管最初的输入大小了。例如,最终的池化层可能会输出四组综合统计特征,每组对应着图像的一个象限,而与图像的大小无关。

3. 无限强的先验

我们在2.1节中曾经简要的提到过:

使用池化可以看作是增加了一个无限强大的先验:这一层学得的函数必须具有对少量平移的不变性。当这个假设成立时,池化可以极大地提高网络的统计效率。
举例来说:p(ω|x)=p(x|ω)p(ω)左侧的概率是后验概率,右侧的p(x|ω)是似然概率,p(ω)是先验概率。当这个先验概率对输入敏感时,后验概率将很大程度上收到似然的影响。当先验对出入不敏感时,后验概率受到似然的影响就小一些。

先验概率分布(prior probability distribution)是一个模型参数的概率分布,它刻画了在我们看到数据之前我们认为什么样的模型是合理的。

先验的强弱指的是先验中概率密度的集中程度。
弱先验具有较高的熵值(例如方差很大的高斯分布).弱先验意味着数据对于参数的影响更为显著(p(ω|x)=p(x|ω)p(ω))。
强先验具有较低的熵值(例如方差很小的高斯分布),这样的先验在决定参数最终取值时起着更加积极的作用。
一个无限强的先验意味着需要对一些参数的概率置零并且完全禁止对这些参数赋值, 无论数据对于这些参数的值给出了多大的支持。

我们可以把卷积网络类比成全连接网络,但对于这个全连接网络的权重有一个无限强的先验:一个隐单元的权重必须和它邻居的权重相同,但可以在空间上移动。这个先验也要求除了那些处在隐单元的接受域内的权重以外,其余的权重都为零。总之,我们可以把卷积的使用当作是对网络中一层的参数引入了一个无限强的先验概率分布,这个先验说明了该层应该学得的函数只包含局部连接关系并且对平移具有等变性。类似的,使用池化也是一个无限强的先验:每一个单元都具有对少量平移的不变性。

注意,卷积和池化可能导致欠拟合。与任何其他先验类似,卷积和池化只有当先验的假设合理且正确时才有用。如果一项任务依赖于保存精确的空间信息, 那么在所有的特征上使用池化将会增大训练误差。一些卷积网络结构为了既获得具有较高不变性的特征又获得当平移不变性不合理时不会导致欠拟合的特征,被设计成在一些通道上使用池化而在另一些通道上不使用。当一项任务涉及到要对输入中相隔较远的信息进行合并时,那么卷积所利用的先验可能就不正确了。

4. 总结

本节主要介绍了池化的相关概念。接下来的博客中,我们会介绍
1. 一些在神经网络中常用的卷积函数
2. 如何在数据集上使用不同维度的卷积
3. 使得卷积操作更高效的方式
4. 使用tensorflow进行CNN的实现
5. 讨论如何使用CNN做中文文本分类。


请继续阅读:
卷积神经网络CNN理论到实践(3)


welcome!

Xiangguo Sun
sunxiangguodut@qq.com
http://blog.csdn.net/github_36326955

Welcome to my blog column: Dive into ML/DL!

这里写图片描述

I devote myself to dive into typical algorithms on machine learning and deep learning, especially the application in the area of computational personality.

My research interests include computational personality, user portrait, online social network, computational society, and ML/DL. In fact you can find the internal connection between these concepts:

这里写图片描述

In this blog column, I will introduce some typical algorithms about machine learning and deep learning used in OSNs(Online Social Networks), which means we will include NLP, networks community, information diffusion,and individual recommendation system. Apparently, our ultimate target is to dive into user portrait , especially the issues on your personality analysis.


All essays are created by myself, and copyright will be reserved by me. You can use them for non-commercical intention and if you are so kind to donate me, you can scan the QR code below. All donation will be used to the library of charity for children in Lhasa.


赏金将用于拉萨儿童图书公益募捐
社会公益,听IT人的声音

手机扫一扫,即可:

附:《春天里,我们的拉萨儿童图书馆,需要大家的帮助

原创粉丝点击