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