赞
踩
卷积神经网络(Convolutional Neural Network, CNN),是一种具有局部连接、权值共享等特点的前馈神经网络(又称作全连接神经网络),是多层感知机(也称为人工神经网络)的变种,擅长处理图像特别是图像识别等相关机器学习问题,比如图像分类、目标检测、图像分割等各种视觉任务。
前馈神经网络(FNN)、全连接神经网络(FCNN)、多层感知机(MLP)、人工神经网络(ANN)这些术语在一定的上下文中可以指代相似的概念,但有时也有一些微妙的区别。
前馈神经网络(Feed-Forward Neural Networks, FNN)通常指的是一类神经网络,其中信息沿着一个方向从输入层传递到输出层,没有循环连接。前馈神经网络通常使用反向传播算法(BackPropagation,BP)进行训练,以调整权重和减小预测误差。
全连接神经网络(Full Connect Neural Network, FCNN)通常指的是神经网络中的一种层次结构,也被称为全连接层。在全连接层中,每个神经元都与前一层的每个神经元相连,即每个输入都与每个输出相连接。参考全连接神经网络公式详解
多层感知机(Multilayer Perceptron, MLP)通常用来描述一种特殊类型的前馈神经网络,其中包括输入层 Input Layer 和输出层 Output Layer,还包含一个或多个隐藏层。每个隐藏层 Hidden Layer 都包含多个神经元,这些神经元使用非线性激活函数来引入网络的非线性性。网络结构图如下所示。
从上图可以看到,多层感知机层与层之间是全连接的。多层感知机最底层是输入层,中间是隐藏层,最后是输出层。
Q1: 隐藏层的神经元与输入层和输出层是什么关系?参考多层感知机MLP
- 隐藏层是与输入层全连接的。假设输入层用向量 X1 表示,则隐藏层的输出就是 X2 = f(W1*X1 + b1),W1 是权重(也叫连接系数),b1 是偏置,函数 f 可以是常用的激活函数 sigmoid 函数、tanh 函数和 Relu 函数。
- 隐藏层是与输出层也是全连接的。输出层的输出就是 f(W2*X2+b2),X2 表示隐藏层的输出 X2 = f(W1*X1+b1),同理函数 f 可以是 sigmoid 函数、tanh 函数和 Relu 函数。
Q2:为什么使用激活函数?
- 不使用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合。
- 使用激活函数,能够给神经元引入非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以利用到更多的非线性模型中。
Q3:激活函数需要满足什么性质?
- 连续且可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数。
- 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率。
- 激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性。
Q4:是如何求解 MLP 所有最佳的参数(包括 W1、b1、W2 和 b2)?
求解参数其实是一个解决最优化问题,最简单的就是梯度下降法(SGD):首先随机初始化所有参数,然后迭代地训练,不断地计算梯度和更新参数,直到满足某个条件为止(比如迭代次数足够多时,误差足够小)。这个过程涉及到代价函数、规则化(Regularization)、学习速率(learning rate)和梯度计算等。
人工神经网络(Artificial Neural Network, ANN)是一个更广泛的术语,通常指的是一类模拟生物神经网络的数学模型,其中包括神经元、权重和连接。在这个术语下,可以包括前馈神经网络、循环神经网络(RNN)、卷积神经网络(CNN)等不同类型的网络。
卷积神经网络的各层中的神经元是3维排列的:宽度、高度和深度。网络结构图如下所示。
卷积神经网络的基本结构大致包括:数据输入层、卷积计算层、激活函数层、池化层和全连接输出层等。
数据输入层(Input Layer),该层是将语料库中不同长度的样本设定为一个固定的输入序列长度L。对于不同长度的输入文本,比 L 短的样本序列需要填充自定义的数值至 L 长度,比 L 长的样本序列需要截取至 L 长度。
与传统神经网络一样,模型需要进行输入的预处理操作,常见的预处理的方法有:参考机器学习之数据预处理方式(去均值、归一化 和 PCA降维)
- 去均值:各维度都减对应维度的均值,使得输入数据各个维度都中心化为 0。
- 归一化:一种是最值归一化,比如把最大值归一化成 1,最小值归一化成 -1;或把最大值归一化成 1,最小值归一化成 0。适用于本来就分布在有限范围内的数据;另一种是均值方差归一化,一般是把均值归一化成 0,方差归一化成 1。适用于分布没有明显边界的情况。
- PCA 降维:通过抛弃携带信息量较少的维度,保留主要的特征信息来对数据进行降维处理。思路上是使用少数有代表性、互不相关的特征来代替原先的大量的、存在一定相关性的特征。
- 白化处理:减少数据的特征之间的相关性和令特征具有相同的方差(协方差阵为 1)。由于图像中相邻像素之间具有很强的相关性,所以用于训练时很多输入是冗余的。
卷积计算层(Convolutional Layer)是神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。
卷积操作请参考:深度学习中的互相关计算Crosscorrelation Operation
- 卷积运算的目的:提取输入的不同特征,某些卷积层可能只能提取一些低级的特征,如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。
- 卷积计算层的作用:对输入数据进行卷积操作,也可以理解为滤波过程,一个卷积核就是一个窗口(Receptive Field)滤波器(Filter),在网络训练过程中,使用自定义大小的卷积核作为一个滑动窗口对输入数据进行卷积。
- 卷积的过程实质上就是两个矩阵做乘法,在卷积过程后,原始输入矩阵会有一定程度的缩小,比如自定义卷积核大小为 2*2,步长为 1 时,矩阵长宽会缩小 1,所以在一些应用场合下,为了保持输入矩阵的大小,我们在卷积操作前需要对数据进行扩充,常见的扩充方法为 0 填充方式。
激励函数层可以使神经网络逼近任何非线性函数。激活函数主要分为饱和激活函数和非饱和激活函数,其中常用的饱和激活函数有 Sigmoid 函数 和 tanh 函数;而非饱和激活函数有 ReLU、Leaky ReLU、ELU 和 Maxout。参考深度学习—激活函数详解
激励函数层建议:
首先选用 ReLU,因为迭代速度快,求梯度简单,但是较脆弱。如果 ReLU 失效的情况下,考虑使用 Leaky ReLU 或者 Maxout,此时一般情况都可以解决。Tanh 函数在文本和音频处理有比较好的效果。
池化层(Pooling Layer)也称为欠采样或下采样(Down-Sample)。池化方式一般有两种,一种为取最大值:最大池化(Max Pooling),另一种为取平均值:平均池化(Average Pooling),目前通常使用Max-pooling,因为它计算简单且最大响应能更好保留纹理特征。
- 池化层是夹在连续的卷积层中间,目的是用于压缩数据和参数的量,减小过拟合。简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像。
- 池化层的作用主要用于特征降维,通常在卷积层之后会得到维度很大的特征,将特征切成几个区域,取其最大值或平均值,得到新的、维度较小的特征,达到压缩数据和参数的数量,减小过拟合的效果。
- 池化的过程是一个移动窗口在输入矩阵上滑动,滑动过程中找这个窗口中数据矩阵上最大值或者平均值作为输出。
池化层的具体作用:参考深入浅出讲解卷积神经网络
- 特征不变性。也就是我们在图像处理中经常提到的特征的尺度不变性(尺度不变特征变换,Scale Invariant Feature Transform, SIFT),池化操作就是图像的 resize(重新调整图片大小),平时一张狗的图像被缩小了一倍我们还能认出这是一张狗的照片,这说明这张图像中仍保留着狗最重要的特征,我们一看就能判断图像中画的是一只狗,图像压缩时去掉的信息只是一些无关紧要的信息,而留下的信息则是具有尺度不变性的特征,是最能表达图像的特征。
- 特征降维。我们知道一幅图像含有的信息是很大的,特征也很多,但是有些信息对于我们做图像任务时没有太多用途或者有重复,我们可以把这类冗余信息去除,把最重要的特征抽取出来,这也是池化操作的一大作用。
- 在一定程度上防止过拟合,更方便优化。
全连接层( Fully-Connected layer)经过前面若干次卷积+激励+池化后,模型会将学到的一个高质量的特征图片全连接层。到了全连接层之后,会把所有局部特征结合变成全局特征,通过 softmax 函数来计算最后每一类的得分,得到最终的输出,整个模型训练完毕。
全连接层建议:
在全连接层之前,如果神经元数目过大,学习能力强,有可能出现过拟合。因此,可以引入 Dropout 操作,来随机删除神经网络中的部分神经元,来解决此问题。还可以进行局部归一化(LRN)、数据增强等操作,来增加鲁棒性。
全连接层往往在分类问题中用作网络的最后层,作用主要为将数据矩阵进行全连接,然后按照分类数量输出数据。在回归问题中,全连接层则可以省略,但是我们需要增加卷积层来对数据进行逆卷积(也称作上采样,Up-Sampling)操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。