收藏 分销(赏)

卷积神经网络CNN原理、改进及应用.doc

上传人:天**** 文档编号:2150077 上传时间:2024-05-20 格式:DOC 页数:23 大小:3.76MB 下载积分:10 金币
下载 相关 举报
卷积神经网络CNN原理、改进及应用.doc_第1页
第1页 / 共23页
卷积神经网络CNN原理、改进及应用.doc_第2页
第2页 / 共23页


点击查看更多>>
资源描述
卷积神经网络(CNN) 一、简介 卷积神经网络(Convolutional Neural Networks,简称CNN)是近年发展起来,并引起广泛重视的一种高效的识别方法。 1962年,Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的局部互连网络结构可以有效地降低反馈神经网络的复杂性,继而提出了卷积神经网络[1](Convolutional Neural Networks-简称CNN)7863。现在,CNN已经成为众多科学领域的研究热点之一,特别是在模式分类领域,由于该网络避免了对图像的复杂前期预处理,可以直接输入原始图像,因而得到了更为广泛的应用。 Fukushima在1980年基于神经元间的局部连通性和图像的层次组织转换,为解决模式识别问题,提出的新识别机(Neocognitron)是卷积神经网络的第一个实现网络[2]。他指出,当在不同位置应用具有相同参数的神经元作为前一层的patches时,能够实现平移不变性1296。随着1986年BP算法以及T-C问题[3](即权值共享和池化)9508的提出,LeCun和其合作者遵循这一想法,使用误差梯度(the error gradient)设计和训练卷积神经网络,在一些模式识别任务中获得了最先进的性能[4][5]。在1998年,他们建立了一个多层人工神经网络,被称为LeNet-5[5],用于手写数字分类,这是第一个正式的卷积神经网络模型3579。类似于一般的神经网络,LeNet-5有多层,利用BP算法来训练参数。它可以获得原始图像的有效表示,使得直接从原始像素(几乎不经过预处理)中识别视觉模式成为可能。然而,由于当时大型训练数据和计算能力的缺乏,使得LeNet-5在面对更复杂的问题时,如大规模图像和视频分类,不能表现出良好的性能。 因此,在接下来近十年的时间里,卷积神经网络的相关研究趋于停滞,原因有两个:一是研究人员意识到多层神经网络在进行BP训练时的计算量极其之大,当时的硬件计算能力完全不可能实现;二是包括SVM在内的浅层机器学习算法也渐渐开始暂露头脚。直到2006年,Hinton终于一鸣惊人,在《科学》上发表文章,使得CNN再度觉醒,并取得长足发展。随后,更多的科研工作者对该网络进行了改进。其中,值得注意的是Krizhevsky等人提出的一个经典的CNN架构,相对于图像分类任务之前的方法,在性能方面表现出了显著的改善2674。他们方法的整体架构,即AlexNet[9](也叫ImageNet),与LeNet-5相似,但具有更深的结构。它包括8个学习层(5个卷积与池化层和3个全连接层),前边的几层划分到2个GPU上,(和ImageNet是同一个)并且它在卷积层使用ReLU作为非线性激活函数,在全连接层使用Dropout减少过拟合。该深度网络在ImageNet大赛上夺冠,进一步掀起了CNN学习热潮。 一般地,CNN包括两种基本的计算,其一为特征提取,每个神经元的输入与前一层的局部接受域相连,并提取该局部的特征。一旦该局部特征被提取后,它与其它特征间的位置关系也随之确定下来;其二是特征映射,网络的每个计算层由多个特征映射组成,每个特征映射是一个平面,平面上所有神经元的权值相等。特征映射结构采用影响函数核小的sigmoid函数作为卷积网络的激活函数,使得特征映射具有位移不变性。此外,由于一个映射面上的神经元共享权值,因而减少了网络自由参数的个数。这两种操作形成了CNN的卷积层。此外,卷积神经网络中的每一个卷积层都紧跟着一个用来求局部平均与二次提取的计算层,即池化层,这种特有的两次特征提取结构减小了特征分辨率。 CNN主要用来识别位移、缩放及其他形式扭曲不变性的二维图形。由于CNN的特征检测层通过训练数据进行学习,所以在使用CNN时,避免了显式地特征抽取,而隐式地从训练数据中进行学习;再者由于同一特征映射面上的神经元权值相同,所以网络可以并行学习,这也是卷积网络相对于神经元彼此相连网络的一大优势。卷积神经网络以其局部权值共享的特殊结构在语音识别和图像处理方面有着独特的优越性,其布局更接近于实际的生物神经网络,权值共享降低了网络的复杂性,特别是多维输入向量的图像可以直接输入网络这一特点避免了特征提取和分类过程中数据重建的复杂度。 注:红色数字表示相应文献的引用量。 二、卷积神经网络 vs神经网络 2.1神经网络 首先简要介绍下神经网络。神经网络的每个单元如下: 其对应的公式如下: hW,bx=fWTx=f(i=13Wixi+b) 其中,该单元也可以被称作是Logistic回归模型。当将多个单元组合起来并具有分层结构时,就形成了神经网络模型。下图展示了一个具有一个隐含层的神经网络。 其对应的公式如下: 比较类似的,可以拓展到有2,3,4,5,…个隐含层。 神经网络的训练方法也同Logistic类似,不过由于其多层性,还需要利用链式求导法则对隐含层的节点进行求导,即梯度下降+链式求导法则,专业名称为反向传播。 神经网络的权值调整过程如下(BP算法): ①计算误差函数 J=x∈DJxω=12k=1Dtk-zk2; ②误差函数对权系数偏微分的计算 <1>对输出层权系数的微分:∂J∂ωkj=∂J∂netk×∂netk∂ωkj(求导链式法则) 输出层第k个神经元的总输入:netk=j=1nHωkjyj+ωk0zk=f(netk) ∂J∂netk=∂J∂zk×∂zk∂netk=-(tk-zk)×f'(netk)∂netk∂ωkj=yj 令∂J∂netk=δk,可得∂J∂ωkj=δkyj <2>对隐层权系数的微分:∂J∂ωji=∂J∂netj×∂netj∂ωji 隐含层第j个神经元的总输入:netj=i=1dωjixi+ωj0yj=f(netj) ∂J∂netj=∂J∂yj×∂yj∂netj=(k=1c∂J∂netk∂netk∂yj)×∂yj∂netj=(k=1cδkωkj)×f'(netj) 令∂J∂netj=δj,可得∂J∂ωji=δjxi <3>权系数的更新 ωkj←ωkj-η∂J∂ωkjωji←ωji-η∂J∂ωji 根据计算误差修正权值,最终使得误差值J最小,此时就建立好了神经网络模型。卷积神经网络的权值调整过程也多采用BP算法。 2.2卷积神经网络 目前有许多CNN架构的变体,但它们的基本结构非常相似。CNN的基本体系结构通常由三种层构成,分别是卷积层、池化层和全连接层。 卷积层旨在学习输入的特征表示。如图,卷积层由几个特征图(feature maps)组成。一个特征图的每个神经元与它前一层的临近神经元相连,这样的一个邻近区域叫做该神经元在前一层的局部感知野。为了计算一个新的特征图,输入特征图首先与一个学习好的卷积核(也被称为滤波器、特征检测器)做卷积,然后将结果传递给一个非线性激活函数。通过应用不同的卷积核得到新的特征图。注意到,生成一个特征图的核是相同的。(也就是权值共享)这样的一个权值共享模式有几个优点,如可以减少模型的复杂度,使网络更易训练等。激活函数描述CNN的非线性度,对多层网络检测非线性特征十分理想。典型的激活函数有sigmoid、tanh和ReLU。 池化层旨在通过降低特征图的分辨率实现空间不变性。它通常位于两个卷积层之间。每个池化层的特征图和它相应的前一卷积层的特征图相连,因此它们的特征图数量相同。典型的池化操作是平均池化和最大池化。通过叠加几个卷积和池化层,我们可以提取更抽象的特征表示。 几个卷积和池化层之后,通常有一个或多个全连接层。它们将前一层所有的神经元与当前层的每个神经元相连接,在全连接层不保存空间信息。 下面对各层进行详细的分析与介绍: 在图像处理中,往往把图像表示为像素的向量,比如一个1000×1000的图像,可以表示为一个1000000的向量。在上一节中提到的神经网络中,如果隐含层数目与输入层一样,即也是1000000时,那么输入层到隐含层的参数数据为1000000×1000000=1012,这样就太多了,基本没法训练,所以必需先减少参数加快速度。 2.2.1 卷积层(The convolutional layer) 1、局部感知 卷积神经网络有两种神器可以降低参数数目,第一种神器叫做局部感知野。一般认为人对外界的认知是从局部到全局的,而图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。网络部分连通的思想,也是受启发于生物学里面的视觉系统结构。视觉皮层的神经元就是局部接受信息的(即这些神经元只响应某些特定区域的刺激)。如下图所示:左图为全连接,右图为局部连接。 在上右图中,假如每个神经元只和它前一层邻近的10×10个像素值相连,那么权值数据为1000000×100个参数,减少为原来的万分之一。而那10×10个像素值对应的10×10个参数,其实就相当于卷积操作。 2、权值共享 但其实这样的话参数仍然过多,那么就启动第二级神器,即权值共享。在上面的局部连接中,每个神经元都对应100个参数,一共1000000个神经元,如果这1000000个神经元的100个参数都是相等的,那么参数数目就变为100了。 怎么理解权值共享呢?我们可以这100个参数(也就是卷积操作)看成是提取特征的方式,该方式与位置无关。这其中隐含的原理则是:图像的一部分的统计特性与其他部分是一样的。这也意味着我们在这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征。 更直观一些,当从一个大尺寸图像中随机选取一小块,比如说 8×8 作为样本,并且从这个小块样本中学习到了一些特征,这时我们可以把从这个 8×8 样本中学习到的特征作为探测器,应用到这个图像的任意地方中去。特别是,我们可以用从 8×8 样本中所学习到的特征跟原本的大尺寸图像作卷积,从而对这个大尺寸图像上的任一位置获得一个不同特征的激活值。 如下图所示,展示了一个3×3的卷积核在5×5的图像上做卷积的过程。每个卷积都是一种特征提取方式,就像一个筛子,将图像中符合条件的部分筛选出来。 (图片为gif格式) 3、多卷积核 上面所述只有100个参数时,表明只有1个10×10的卷积核,显然,特征提取是不充分的,我们可以添加多个卷积核,比如32个卷积核,可以学习32种特征。在有多个卷积核时,如下图所示: 上图右,不同颜色表明不同的卷积核。每个卷积核都会将图像生成为另一幅图像。比如两个卷积核就可以将生成两幅图像,这两幅图像可以看做是一张图像的不同的通道,如下图所示。 下图展示了在四个通道上的卷积操作,有两个卷积核,生成两个通道。其中需要注意的是,四个通道上每个通道对应一个卷积核,先将W1忽略,只看W0,那么在W0的某位置(i,j)处的值,是由四个通道上(i,j)处邻近区域的卷积结果相加然后再取激活函数(假设选择tanh函数)值得到的。 hij0=tanh⁡(k=03(Wk*(W0*x)ij)+b0) 所以,在上图由4个通道卷积得到2个通道的过程中,参数的数目为4×2×2×2个,其中4表示4个通道,第一个2表示生成2个通道,最后的2×2表示卷积核大小。 2.2.2池化层(The pooling layer) 在通过卷积获得了特征 (features) 之后,下一步我们希望利用这些特征去做分类。理论上讲,人们可以用所有提取得到的特征去训练分类器,例如 softmax 分类器,但这样做面临计算量的挑战。例如:对于一个 96×96 像素的图像,假设我们已经学习得到了400个定义在8×8输入上的特征(即:有400个卷积核),每一个特征和图像卷积都会得到一个 (96 − 8 + 1) × (96 − 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个样例 (example) 都会得到一个7921 × 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,并且容易出现过拟合 (over-fitting)。 为了解决这个问题,首先回忆一下,我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)。这些概要统计特征不仅具有低得多的维度 (相比使用所有提取得到的特征),同时还会改善结果(不容易过拟合)。这种聚合的操作就叫做池化 (pooling),有时也称为平均池化或者最大池化 (取决于计算池化的方法)。 形式上,在获取到我们前面讨论过的卷积特征后,我们要确定池化区域的大小(假定为m×n),来池化我们的卷积特征。那么,我们把卷积特征划分到数个大小为m×n的不相交区域上,然后用这些区域的平均(或最大)特征来获取池化后的卷积特征。这些池化后的特征便可以用来做分类。 2.2.3全连接层(Fully-connected layers) 几个卷积和池化层之后,通常有一个或多个全连接层,旨在执行对原始图像的高级抽象。它们将前一层所有的神经元与当前层的每个神经元相连接,即与标准神经网络各层之间的连接相同,在全连接层不保存空间信息。 最后的全连接层的输出传递到输出层。对于分类任务,softmax回归由于其可以生成输出的well-formed概率分布[4]而被普遍使用。给定训练集xi,yi;i∈1,…,N,yi∈0,…,K-1,其中xi是第i个输入图像块,yi是它的类标签,第i个输入属于第j类的预测值aji可以用如下的softmax函数转换:pji=eajil=0K-1eali,softmax将预测转换为非负值,并进行正则化处理。 至此,卷积神经网络的基本结构和原理已经阐述完毕。 在实际应用中,往往使用多层卷积,然后再使用全连接层进行训练,多层卷积的目的是一层卷积学到的特征往往是局部的,层数越高,学到的特征就越全局化。 2.2.4问题 1、预处理步骤 利用PCA或ZCA白化矩阵调整权值。白化的目的就是降低输入的冗余性;更正式的说,希望通过白化过程使得学习算法的输入具有如下性质:(1)特征之间相关性较低;(2)所有特征具有相同的方差。 利用PCA或ZCA白化矩阵后,卷积层输出的特征激活值等于f(WTx-x+b),其中T是白化矩阵,x是前一层图像块的均值,此时,相当于对图像块做WT卷积而不是之前的W,同时神经元单元的偏置也变为b-WTx。 补充:PCA白化和ZCA白化算法 首先,我们需要确保数据的均值(近似)为零。对于自然图像,我们通过减去每个图像块(patch)的均值(近似地)来达到这一目标。为此,我们计算每个图像块的均值,并从每个图像块中减去它的均值; avg = mean(x, 1); % 分别为每个图像块计算像素强度的均值 x = x - repmat(avg, size(x, 1), 1); 其次,计算=1mi=1m(x(i))(x(i))T,假设x为一数据结构,其中每列表示一个训练样本(所以x是一个n×m的矩阵); sigma = x * x' / size(x, 2); 接下来,PCA计算∑的特征向量。但是由于∑是对称半正定的矩阵,用 svd 函数在数值计算上更加稳定。矩阵 U 将包含 Sigma 的特征向量(一个特征向量一列,从主向量开始排序),矩阵S 对角线上的元素将包含对应的特征值(同样降序排列)。矩阵V等于U的转置,可以忽略。 [U,S,V] = svd(sigma); 最后,计算PCA白化后的数据xPCAwhite和ZCA白化后的数据xZCAwhite: xPCAwhite = diag(1./sqrt(diag(S) + epsilon)) * U' * x;%diag函数功能:矩阵对角元素的提取和创建对角阵 xZCAwhite = U * diag(1./sqrt(diag(S) + epsilon)) * U' * x;%epsilon MATLAB 本身内建的常数,它是一個10的-52次方的小数,可以作为反复运算时比较之用 2、如何计算卷积核? 常用的计算卷积核的方法,一种是BP算法,上面神经网络中已经讨论过: 3、窄卷积 vs 宽卷积 在上文中解释卷积运算的时候,忽略了如何使用滤波器的一个小细节。在矩阵的中部使用3×3的滤波器没有问题,在矩阵的边缘该怎么办呢?左上角的元素没有顶部和左侧相邻的元素,该如何滤波呢?解决的办法是采用补零法(zero-padding)。所有落在矩阵范围之外的元素值都默认为0。这样就可以对输入矩阵的每一个元素做滤波了,输出一个同样大小或是更大的矩阵。补零法又被称为是宽卷积,不使用补零的方法则被称为窄卷积。如图所示: 图中滤波器长度为5,输入长度为7。当滤波器长度相对输入向量的长度较大时,宽卷积很有用,或者说很有必要。在上图中,窄卷积输出的长度是 (7-5)+1=3,宽卷积输出的长度是(7+2*4-5)+1=11。一般形式为nout=nin+2*npadding-nfilter+1 4、步长 卷积运算的另一个超参数是步长,即每一次滤波器平移的距离。上面所有例子中的步长都是1,相邻两个滤波器有重叠。步长越大,则用到的滤波器越少,输出的值也越少。下图来自斯坦福的cs231课程网页4,分别是步长为1和2的情况: 三、卷积神经网络在各个领域的应用 在过去的十几年间,卷积神经网络被广泛的应用在了各个领域,包括计算机视觉、语音识别、自然语言处理等[8]。 3.1 计算机视觉 在计算机视觉中的应用包括:图像分类、对象追踪、姿态估计、视觉显著性检测、行为识别、场景标识等。 ①图像分类 CNN已经被用于图像分类很长时间,相比于其他的方法,CNN由于其特征学习和分类学习的结合能力,在大规模数据集上实现了更高的分类准确率。对大规模图像分类的突破是在2012年,Alex Krizhevsky等人[9]建立的AlexNet网络,在ILSVRC2012比赛中实现了最佳的性能。 (1)AlexNet网络介绍: ImageNet LSVRC是一个图片分类的比赛,其训练集包括127W+张图片,验证集有5W张图片,测试集有15W张图片。本文截取2012年Alex Krizhevsky的CNN结构进行说明,该结构在2012年取得冠军,top-5错误率为15.3%。 下图即为Alex的CNN结构图。需要注意的是,该模型采用了2-GPU并行结构,即所有卷积层都是将模型参数分为2部分进行训练的。在这里,更进一步,并行结构分为数据并行与模型并行。数据并行是指在不同的GPU上,模型结构相同,但将训练数据进行切分,分别训练得到不同的模型,然后再将模型进行融合。而模型并行则是,将若干层的模型参数进行切分,不同的GPU上使用相同的数据进行训练,得到的结果直接连接作为下一层的输入。 随着AlexNet的成功,一些工作对它的性能进行了改进。三个最具代表性的网络是ZFNet、VGGNet和GoogleNet。ZFNet提高AlexNet性能通过减少第一层滤波器的大小从11×11到7×7以及减少卷积层数目从5到2。在这样的设置中,之间卷积层的大小被扩展以便于获得更有意义的特征。VGGNet将网络深度扩展到19层并在每个卷积层使用非常小的滤波器,大小为3×3。结果表明深度是提高性能至关重要的因素。GoogleNet增加了网络的深度和宽度,相比于较浅和较窄的网络,在计算需求的适当增加上实现了显著的质量提升。 值得一提的是,在2015年的ImageNet LSVRC比赛中,取得冠军的GoogleNet已经达到了top-5错误率6.67%。可见,深度学习的提升空间还很巨大。 (2)DeepID网络介绍: DeepID网络结构是香港中文大学的Sun Yi开发出来用来学习人脸特征的卷积神经网络[13]。每张输入的人脸被表示为160维的向量,学习到的向量经过其他模型进行分类,在人脸验证实验上对10000类的分类准确率达到了 97.45%,更进一步的,原作者改进了CNN(DeepID2[14]),又达到了99.15%的正确率。 如下图所示,该结构与ImageNet的具体参数类似: 上图模型的基本参数为: 输入:31×39大小的图片,1通道 第一层 卷积: 4×4大小的卷积核20个->得到20个28×36大小的卷积特征。 max-pooling:2×2的核->池化得到20个14×18大小的卷积特征。 第二层 卷积:3×3卷积核40个->得到40个12×16大小的卷积特征。 max-pooling: 2×2的核->池化得到40个6×8大小的卷积特征。 第三层 卷积: 3×3的卷积核60个->得到60个4×6大小的卷积特征 max-pooling: 2×2的核->池化得到60个2×3大小的卷积特征。 第四层 卷积:2×2的卷积核80个->得到80个1×2大小的卷积特征。 全连接层 以第四层卷积(160维)和第三层max-pooling的输出(60×2×3=360维)作为全连接层的输入,这样可以学习到局部的和全局的特征。 Softmax层 输出的每一维都是图片属于该类别的概率。 ②对象追踪Object tracking 对象追踪在计算机视觉的应用中起着重要作用,对象追踪的成功在很大程度上依赖于如何健壮的表示目标外观,它面临的挑战如视点改变、光照变化以及遮挡等。 Fan等人[10]使用CNN作为基础学习器,学习一个独立的分类专用网络来追踪对象。在实验中,作者设计了一个具有移位变体结构的CNN追踪器。在离线训练期间学习特征,与传统追踪器不同的是,CNN追踪器只提取局部空间结构,通过考虑两个连续帧的图像来提取空间和时间结构。由于时间信息的大规模信号趋向于在移动对象附近变化,因此时间结构能够提供原始的速度信号,便于对象追踪。 ③姿态估计/行为识别 类似于其他的视觉识别任务,人体姿态的估计任务由于CNN的大规模学习能力以及更全面训练的可扩展性而实现了巨大的性能提升。 DeepPose[11]是CNN在人体姿态估计问题中的第一个应用(2014)。在这个应用中,姿态估计被视为一个基于CNN的回归问题来求解人体关节坐标。提出串联7层CNN来构成姿态的整体表示。不同于之前明确设计图形化模型和部分探测器的工作,DeepPose描述人体姿态估计的整体视图,通过将整个图像作为最终人体姿态的输入和输出,来获得每个人体关节的完整内容。 ④场景标记 场景标记(也被称为场景解析、场景语义分割)建立了对深度场景理解的桥梁,其目标是将语义类(路、水、海洋等)与每个像素关联。一般来说,由于尺度、光照以及姿态变化因素影响,自然图像中的“事物”像素(汽车、人等)是完全不同的,而“物体”像素(路、海洋等)是非常相似的。因此,图像的场景标记具有挑战性。 最近,CNN已经被成功地应用在场景标记任务中。在这个场景中,CNN被用来直接从局部图像块中建模像素的类估计,它们能够学习强大的特征,来区分局部视觉像素微妙的变化。Farabet等人首次将CNN应用在场景标记任务中[30],用不同尺度的图像块来调整多尺度卷积网络,结果表明CNN网络性能明显优于比采用手工提取特征的系统。 3.2自然语言处理(NLP)1 NLP任务的输入不再是像素点了,大多数情况下是以矩阵表示的句子或者文档。矩阵的每一行对应于一个分词元素,一般是一个单词,也可以是一个字符。也就是说每一行是表示一个单词的向量。通常,这些向量都是word embeddings(一种底维度表示)的形式,如word2vec和GloVe,但是也可以用one-hot向量的形式,也即根据词在词表中的索引。若是用100维的词向量表示一句10个单词的句子,我们将得到一个10x100维的矩阵作为输入。这个矩阵相当于是一幅“图像”。 在计算机视觉的例子里,滤波器每次只对图像的一小块区域运算,但在处理自然语言时滤波器通常覆盖上下几行(几个词)。因此,滤波器的宽度也就和输入矩阵的宽度相等了。尽管高度,或者区域大小可以随意调整,但一般滑动窗口的覆盖范围是2~5行。综上所述,处理自然语言的卷积神经网络结构是这样的。 以句子分类[12]/文本分类2为例: 这里对滤波器设置了三种尺寸:2、3和4行,每种尺寸各有两种滤波器。每个滤波器对句子矩阵做卷积运算,得到(不同程度的)特征字典。然后对每个特征字典做最大值池化,也就是只记录每个特征字典的最大值。这样,就由六个字典生成了一串单变量特征向量(univariate feature vector),然后这六个特征拼接形成一个特征向量,传给网络的倒数第二层。最后的softmax层以这个特征向量作为输入,用其来对句子做分类;我们假设这里是二分类问题,因此得到两个可能的输出状态。 位置不变性和局部组合性对图像来说很直观,但对NLP却并非如此。人们也许会很在意一个词在句子中出现的位置。相邻的像素点很有可能是相关联的(都是物体的同一部分),但单词并不总是如此。在很多种语言里,短语之间会被许多其它词所隔离。同样,组合性也不见得明显。单词显然是以某些方式组合的,比如形容词修饰名词,但若是想理解更高级特征真正要表达的含义是什么,并不像计算机视觉那么明显了。 由此看来,卷积神经网络似乎并不适合用来处理NLP任务。递归神经网络(Recurrent Neural Network)更直观一些。它们模仿我们人类处理语言的方式(至少是我们自己所认为的方式):从左到右的顺序阅读。庆幸的是,这并不意味着CNNs没有效果。所有的模型都是错的,只是一些能被利用。实际上CNNs对NLP问题的效果非常理想。正如词袋模型(Bag of Words model),它明显是基于错误假设的过于简化模型,但这不影响它多年来一直被作为NLP的标准方法,并且取得了不错的效果。 CNNs的主要特点在于速度快,非常的快。卷积运算是计算机图像的核心部分,在GPU级别的硬件层实现。相比于n-grams,CNNs表征方式的效率也更胜一筹。由于词典庞大,任何超过3-grams的计算开销就会非常的大。即使Google也最多不超过5-grams。卷积滤波器能自动学习好的表示方式,不需要用整个词表来表征。那么用尺寸大于5行的滤波器完全合情合理了。许多在CNN卷积第一层学到的滤波器捕捉到的特征与n-grams非常相似(但不局限),但是以更紧凑的方式表征。 3.3语音识别[6] 利用CNN进行语音处理的一个关键问题是如何将语音特征向量映射成适合CNN处理的特征图。我们可以直观的将输入“图像”考虑成一个具有静态、delta以及delta-delta特征(即第一和第二时间派生物derivatives)的频谱图,如下图a,选择15帧长度的内容窗口。当然还有多种选择可以精确地将语音特征转化为特征图,如图b所示,语音特征可以被表示成3个二维的特征图,每个代表MFSC(mel-frequency spectral coefficients)特征的信息(即静态、delta以及delta-delta特征)沿着频率和时间轴的分布。在这种情况下,一个二维卷积被执行来同时正规化频率和时间变化,得到3个二维特征图,每个特征图有15×40=600维。另外,可以只考虑正规化频率变化。如图c所示,在这种情况下,相同的MFSC特征被组织作为一维特征图,每一帧的3种特征作为一个特征图,得到15×3=45个特征图,每个特征图有40维。 [6]中采用的是如图c所示的一维特征图进行卷积操作。 四、对卷积神经网络的改进 自从2012年AlexNet的成功之后,出现了各种对CNN的改进,从对下面四个方面(卷积层、池化层、正则化以及激活函数)的改进来看: 4.1卷积层 CNN的基本卷积滤波器是底层局部图像块(patch)的一个广义的线性模型(GLM)。对隐含概念的线性可分实例的提取效果较好。目前有两种可以提高滤波器特征表示能力的对卷积层的改进工作。 ①Network in network(NIN):是由Lin等人[15]提出的一种网络结构。它用一个微网络(micro-network,如多层感知机卷积mlpconv,使得滤波器能够更加接近隐含概念的抽象表示)代替了卷积层的线性滤波器。NIN的整体结构就是这些为网络的堆积。 卷积层和mlpconv层的区别:(从特征图的计算上来看) 形式上,卷积层的特征图计算公式是:fi,j,k=max⁡(wkxi,j,0) 其中,i,j是特征图的像素索引,xi,j是以(i,j)为中心的输入块,k是特征图的通道索引。 而mlpconv层的特征图计算公式是:fi,j,k11=max⁡(wk11xi,j+bk1,0)fi,j,knn=max⁡(wknnfi,jn-1+bkn,0) (每一层特征图之间有连接,类似于循环神经网络结构RNN) 其中,n是mlpconv层的层数。 可以发现,mlpconv层的特征图计算公式相当于在正常卷积层进行级联交叉通道参数池化。 ②Inception module:是由Szegedy等人[16]提出,可以被看做NIN的逻辑顶点(logical culmination),使用多种滤波器的大小来捕捉不同大小的不同可视化模式,通过inception module接近最理想的稀疏结构。特别地,inception module由一个池化操作和三种卷积操作组成。1×1的卷积被放在3×3和5×5的卷积之前作为维度下降模块,在不增加计算复杂度的情况下增加CNN的深度和宽度。在inception module作用下,网络参数可以被减少到5百万,远小于AlexNet的6千万和ZFNet的7千5百万。 4.2池化层 池化是CNN的一个重要概念,它通过减少卷积层的连接数量降低计算负担。目前为止在CNN中使用的典型的池化操作是平均池化或者最大池化,同时也存在着一些改进的池化操作,如Lp池化、混合池化、随机池化等。 ①Lp池化:是一个受生物学启发在复杂细胞上建立的池化过程。Bruna的理论分析表明Lp池化相比于最大池化能提供更好的泛化[17]。 Lp池化公式为:(i=1N|xIi|p)1p,其中xI1,…,xIN是一组有限的输入节点,当p=1时,Lp池化就相当于平均池化,当p=2时,是L2池化,当p=∞时,即max⁡(|xI1|,…,|xIN|)相当于最大池化。 ②混合池化:受随机Dropout[18]和DropConnect[19]启发,Yu等人[20]提出混合池化方法,即最大池化和平均池化的结合。 混合池化方法公式化为:ykij=λmax(p,q)∈Rijxkpq+(1-λ)1|Rij|(p,q)∈Rijxkpq,其中ykij是第k个特征图相应位置(i,j)处池化操作的输出,λ是0~1之间的随机值,Rij是位置(i,j)的局部邻域,xkpq是第k个特征图池化区域Rij内在(p,q)处的元素。在前向传播过程中,λ被记录,并在反向传播中被调整。 ③随机池化(Stochastic pooling)[21]:保证特征图的非线性激活值可以被利用。具体地,随机池化先对每个区域Rj通过正则化区域内的激活值计算概率p,即pi=aik∈Rj(ak)。然后从基于p的多项分布中采样来选择区域内的一个位置l。池化的激活值sj=al,其中l~P(p1,…,p|Rj|)。随机池化被证明具有最大池化的优点,并且可以避免过拟合。 此外,还有频谱池化(Spectral pooling)、立体金字塔状池化(Spatial pyramid pooling(SPP))以及多尺度无序池化(Multi-scale Orderless Pooling)等。 4.3正则化 Regularization 过拟合是深度CNN一个不可忽视的问题,这一问题可以通过正则化有效地减少。这里介绍两种有效的正则化技术:Dropout和DropConnect。 ①Dropout:也就是在每次训练的时候,让网络某些隐含层神经元以一定的概率p不工作。它最先由Hinton等人(在深度学习的推广中起了关键作用)在2012年提出[18],它已经被证明对减少过拟合十分有效。在[18]中,他们将Dropout应用在全连接层,Dropout的输出是r=m*a(Wv),其中v=v1,v2,…,vnT是特征提取器的输出,W(大小是d×n)是一个全链接的权重矩阵,a(∙)是一个非线性激活函数,m是一个大小为d的binary mask,元素服从伯努利分布(也叫二项分布),即mi~Bernoulli(p)。Dropout可以防止网络过于依赖任何一个神经元,使网络即使在某些信息缺失的情况下也能是准确的。 目前存在着几种对Dropout 的改进,例如:Wang 等人[22]中提出了一种快速Dropout方法,通过抽样或整合一个高斯近似值来实现更快的Dropout训练。Ba等人[23]提出一种自适应Dropout方法,使用一个与深度网络共享参数的二进制置信网络计算每个隐含变量的Dropout概率。在Tompson 等人[24]中发现在1×1卷积层之前应用标准Dropout会增加训练时间但不能防止过拟合,因此他们提出了一种新的Dropout方法叫做SpatialDropout,在整个特征图上扩展了Dropout的值。这种新的Dropout在训练数据量很小时性能很好。 ② DropConnect[19]:将Dropout的想法更进一步,代替了其设置神经元的输出为0,而是在前向传导时,输入的时候随机让一些输入神经元以一定的概率p不工作,在BP训练时,这些不工作的神经元显然也不会得到误差贡献。DropConnect的输出r=a((m*W)v),其中mij~Bernoulli(p)。此外,在训练过程中也掩盖了误差。和Dropout的区别就在于,Dropout一个输出不工作了,那么这个输出作为下一级输入时对于下一级就一点都不工作,但是DropConnect不会,泛化能力更强一点。 下图给出了No-Drop、Dropout和DropConnect网络的区别: 4.4对激活函数的改进 在某个任务中,一个合适的激活函数能显著改善CNN的性能。为了用连续型的函数表达神经元的非线性变换能力,常采用S型的sigmoid和tanh函数作为激活函数。其中sigmoid函数,即fx=11+e-x,是神经元的非线性作用函数。由于BP权值的调整采用梯度下降(Gradient Descent)公式∆W=-η∂E∂W,这个公式要求对网络输出值和训练差值E求导,所以要求网络输出值处处可导,而Sigmoid函数正好满足处处可导,因此神经元的激活函数常用sigmoid型。tanh函数fx=ex-e-xex+e-x,与sigmoid函数趋势类似,如下图所示。 除了上述S型的函数外,ReLU(Rectified linear unit (ReLU))[25]也是常用的激活函数的一种。ReLU激活函数被定义为:yi=max⁡(0,zi),其中zi是第i个通道的输入,因此ReLU是一个分段线性函数,如下图a所示。ReLU简单的max操作使得它的计算速度比sigmoid和tanh函数快,并且允许网络很容易地获得稀疏表示。[16]中的实验表明了使用ReLU作为激活函数的深度网络可以被有效地训练。尽管ReLU在0点处的不连续损害了BP算法的性能,并且它具有不活跃的零梯度单元,可能会导致基于梯度的优化不能够调整权值。但大量实证研究表明ReLU仍然比sigmoid和tanh激活函数效果更好。 针对这一缺点,之后出现了很多对ReLU激活函数的改进工作: ① Leaky Re
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 考试专区 > 中考

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服