怎样求卷积神经网络 python的滤波器参数

卷积神经网络(CNN)笔记
卷积神经网络(CNN)笔记
注:本文章是作者CC对Jake Bouvrie论文《Notes on Convolutional Neural Networks》的翻译。鉴于作者水平有限,错误难免,仅作读者参考,也作为自己科研道路的一个微不足道的脚印。
《卷积神经网络笔记》——Jake Bouvrie 日
这篇文档讨论了卷积神经网络(CNNS)的推导与实现[3,4],其次是一些简单的扩展(extension)。卷积神经网络比起权重包含更多的连接;其结构本身实现了一种规则的形式。此外,一个卷积网络自动提供一些不变量。这个特殊种类的神经网络认为我们希望学习一种滤波器,用数据驱动的方式,作为一种方式去提取特征描述输入。推导过程我们提供了详细的二维数据和卷积,但是能够被扩展任意维度而不需要太多额外的努力。
我们开篇描述经典(classical)全连接反向传播,然后推导出滤波和子采样层在二维卷积神经网络通过反向传播更新。通过讨论,我们强调实现的效率,并给出Matlab代码小片段(snippets)来伴随方程。写有效的代码重要性当谈到CNNs不能够被夸大。我们将话题转为如何通过前面层自动联合特征匹配,特别考虑,学习特征匹配的稀疏联合。
免责声明(Disclaimer):这个粗糙的笔记可以包含错误,夸大(exaggerations)和错误的声明。
2.Vanilla 反向传播通过全连接网络
在典型的卷积神经网络你也许在文献中可以发现,早期的分析可选择神经和自采样操作的组成,同时最后一步的结构组成通用的(generic)多层网络:最后几层(最靠近输出)将会被全局连接1维层。当你准备通过最后2D特征匹配作为输入到全局连接1D网络,这经常非常方便仅仅连接所有的特征表现在所有的输出匹配在一个长的输入向量,我们返回vanilla反向传播。标准的反向传播算法将被描述,然后再详细到卷积网络下(看e.g.[1]获取更多的详细信息)。
2.1前馈传播
在下面的推导过程中,我们将考虑二次误差损失方程。对于一个多分类问题,有c类和N个训练样本,这个误差为:
这里是第k维的第n个样本的响应标签,是第k个输出层单元相似值与第n个输入样本相对应。对于多种分类问题,目标将典型被组织为c中的一个代码,的第k个单元是正的,假如属于K类。剩下的条目或者是0或者是负的,这根据你选择的输出激活方程(在下面将会被讨论)。
因为误差在全部数据集上仅仅是各个模式上个体误差的和,我们将考虑反向传播对单一模式,设第n个为:
& & & & & & & & &&
传统的全局连接层,我们能够计算导出E遵从下面的反向传播规则形式计算网络权重。令l表示当前层,输出层设计设计为L层,输入层设计为l层。定义输出层为
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&&
& & & & & & & & &
这里,输出激活函数f(·)通常选择为logistic(sigmoid)函数或者双曲正切函数f(x)=atanh(bx)。这个logistic方程匹配,双曲正切函数匹配为。因此当输出为双曲正切函数将典型的接近0,输处为sigmoid平均将是非0.然而,归一化你的训练数据来获取均值为0和方差为1随着这些特征能够提高收敛在梯度下降的时候[5]。伴随着一个归一化数据集,双曲正切方程因此更好。LeCun推荐a=1.7159和b=2/3,因此最大非线性点发生在,因此而避免过拟合在训练的时候,假如设计的训练目标为归一化数据正负1[5]。
2.2 反向传播
反向传播的错误率通过网络能够被认为灵敏的在各个单元遵从偏导数。这就是说,
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
因为在场合下,这个偏导数灵敏度和导出误差遵守一个单元的全部输出是相等的。这个导出就是反向传播从高层到底层,用下面的递归等式:
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&
这里“o”表示单元数组元素相乘(element-wise multiplication)。对于误差方程(1),对输出层神经元的灵敏度将采用一个细微的不同形式:
& & & & & & & &&
最后,delta法则来更新权重分配去给一个神经元仅仅是个输入神经元的拷贝,通过神经元delta的缩放。用向量形式,这个计算作为外积计算(outer product)在输入向量(这个是从前层获得的输出)和灵敏度 向量:
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
类似表达形式为了(3)给出的偏移更新。特别的有一个学习率参数定义每一个权重。
3. &卷积神经网络(CNN)
典型的卷积层由子采样层来减少计算时间和渐渐建立深度空间和构型不变量。然而一个小的子采样被期望为了保持细化在同一时间。当然,这个主意现在并不新,然而,概念是简单有效的。哺乳动物的视觉皮层(mammalian visual cortex)和其模型[12,8,7]很大程度上吸引了这个主题(draw heavily
on these themes),听觉神经系统(auditory neureoscience)在过去的十年显示(revealed),因此这些相同的设计参数能够被发现在最初的和belt听觉领域在许多不同的动物皮层(cortex[6,11,9])。层次分析(Hierarchical)和学习结构可能主要的成功在听觉领域。
3.1 &卷积层(Convolution Layers)
对于卷积层在网络中,让我们移除前向来获取反向传播更新。在卷积层,前面的层的特征匹配被可学习的核来卷积。使激活函数来规范化输出特征匹配。每一个输出匹配可能联合卷积通过多重输入匹配。通常,我们有:
Mj表示输入匹配选择,卷积有效的边界操作类型当在MATLAB中实现。一些输入匹配通用的选择包括全对偶或者所有
三联体(all-triplets),但是我们将讨论如何一个能够学习联合在下面。每一个输出匹配给一个另外的偏数b,然而对于一个特别的输出匹配,这个输入匹配将被卷积用一个明显的卷积核。这就是说,假如输出匹配j和k两者和超过输入匹配i,那么这个核应用去匹配i是不同的对于输出匹配j和k。
3.1.1 计算梯度(Computing the Gradients)
我们假设每一个卷积层l被跟踪通过一个降采样层l+1.这个反向传播算法认为为了计算每个单元层l的灵敏度,我们应该首先计算相应的下一个层灵敏度的总和。相应的感兴趣节点在最近层l,乘以这些连接的每一个通过联系权重定义在层l+1。然后我们乘以这个数量通过评估当前层前一个激活函数的输出而得到的激活函数,u。在降采样层之后的卷积层场合下,一个像素在另一个层连接灵敏度匹配相应的像素快在卷积层输出匹配。因此每一个单元匹配在层l连接仅仅一个单元在相应的匹配在l+1层。为了有效的计算灵敏度在l层,我们可以上采样降采样层灵敏度匹配来使得他相同的尺寸因为卷积层的匹配,仅仅乘以上采样灵敏度匹配从层l+1伴随着激活获得匹配在l层智能单元。权重定义为在下采样曾匹配所有的(一个常数,看3.2部分),因此我们仅仅缩放先前的步骤结果通过来结束的计算。我们能够重复相同的计算对于每一个匹配j在卷积层,配对他通过相应的匹配在子采样层:
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
这里(·)表示一个上采样操作,简单的拼贴每一个像素在输入 水平和垂直n次在输出,假如子采样层通过子采样通过n因素。因为我们将在下面讨论,一个可能的方式有效的实现这个方程就是用Kronecker点乘:
现在我们有给出匹配的灵敏度,我们实现计算偏梯度通过简单所有记录的综合在。
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&
最后,这个和权重的梯度用反向传播计算,除了在这个场合相同的权重被分享通过许多连接。我们因此求和梯度根据一个给定的权重在所有的连接提到权重,正如我们偏转项的操作:
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&
这里是的补丁,乘以智能单元在卷积过程中为了计算单元(u,v)在输出卷积匹配匹配。首先看一眼他可能出现在我们需要费力的去保持记录哪一个补丁再在输入匹配中,相应的像素在输入匹配(他的相应的灵敏度匹配),但是等式(7)能够被实现在一行代码在MATLAB中应用卷积在有效的部分重叠区域中:
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&
这里我们旋转图像为了表现互关联而不是卷积,旋转输出返回,当我们表现卷积在前馈传递中,这个核将有期望的环境。
3.2 & 子采样层
一个子采样层产生输出匹配的降采样版本。假如有N个输入匹配,那么将准确的有N个输出匹配,尽管输出匹配将会是更小。更通常的:
这里下降(·)表达一个子采样方程。典型的这个方程将每一个有区别的n*n快求和在输入图像,因此输出图像将会是n倍小在这二维空间。每一个输出匹配给出了他的自己倍数偏量和一个增加偏量b。我们也能够简单的抛弃每一个在图像中的其他样本[10]
3.2.1 & 计算梯度
这里的困难是计算匹配灵敏度。一旦我们获取他们,仅仅只有一个需要学习的参数来更新是和b。我们假设子采样层被卷积层保卫。假如层在子采样层之后全连接,那么灵敏度匹配对于这个子采样层能够被计算用vanilla反向传递,将会被介绍在第2部分。
当我们尝试着计算3.1.1部分的核梯度的时候,我们需要理解哪一个补丁在最近曾灵敏度匹配相应的一个给定的像素在另一个层灵敏度匹配为了应用delta递归(recursion)看起来像等式(4)。当然,权重多重连接在输入补丁和输出像素将会被精确的卷积核权重。这进一步有效的实现 用卷积: & &
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&
正如前面的,我们旋转核使得卷积方程表现出互关联(cross-correlation)。主义在这场合下,然而,我们要求全卷积边界处理,来进一步借助MATLAB的命名法。这个小的不同让我们处理边界情况更加简单和有效,这里输入的数量在l+1层的一个单元不是n*n卷积核全尺寸。在这些场合下,全卷机将会自动填补(pad)缺失的输入用0.
在这一点上我们准备好了去计算b和的梯度。额外的偏增加又一次求和这些灵敏度匹配的单元:
倍数偏数将包括原始的下采样匹配计算在最近层在前馈传递期间。因为这个原因,他的有点事节约了这些匹配在反馈计算中,因此我们没有重新计算他们在反向传递中。让我们定义:
那么的梯度为:
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&
3.3 学习结合特征匹配
很多时候,这是有优点的去提供一个输出匹配包含一个和在不同输入匹配的几个卷积。在文章中,联合形成一个给定输出匹配的输入匹配经常首选。然而,我们能够尝试着去学习这个联合在训练期间。令表示权重给定输入匹配i当形成(forming)输出匹配j。然后输出匹配j给出如下:
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&
服从(subject to)下面的约束(constrains):
约束能够强化通过设定变量等于softmax在一系列的非约束,优先的(underlying)权重。
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&
因为每一个权重对于固定的j是独立的,我们能够考虑更新对于一个独立的匹配和下降的下标(subscript)j。每一个匹配是更新的以一种相同的方式,除了不同的j指数。
获得softmax方程给定如下:
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&
这里被用作Kronecker delta,然而获取(1)用相应的变量在层l是:
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&
这里,是灵敏度匹配相应的输出匹配用输入u。另外,卷积是有效的形式,因此结果将会匹配灵敏度匹配的尺寸。我们能够用链式法则来计算方程(1)的梯度用优先的权重:
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
3.3.1 &执行稀疏结合
我们能够尝试着利用(impose)稀疏约束在权重的分配对于一个给定的匹配通过增加一个规则的处罚对于最后的误差函数。做这个,我们将鼓励权重的一些到0.在这个情况下,仅仅一些输入匹配将会有意义的作用向给定的输出匹配,因为反对他们的全部。让我们写误差独立模式为
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
发现规则化的贡献对于梯度的权重。用户定义参数控制权衡在最小化网络的适合到训练数据,确保提到的权重在规则化过程中是小的根据1-norm。我们将再一次考虑仅仅的权重对于给定的输出匹配,降低下标(subscript)j。首先,我们需要
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
每一个地方出了在原点。结合(8)的结点将允许我们获得贡献:
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &
最后的梯度对于权重当用处罚误差方程(11)能够被计算用(13)和(9):
& & & & &&
3.4 &用它更快用MATLAB
在网络用可选择的子采样和卷积层,主要的计算瓶颈是(bottle-neck)是:
1.在前馈传递中:降采样卷积层输出匹配
2.在反向传递过程中:更高的子采样层的delta的上采样去匹配更低卷积层的输出匹配尺寸。
3.应用sigmoid和他的派生(derivatice)。
表现卷积在反馈和反向传播阶段当然也是瓶颈,但是假设2D卷积路线是有效的实现,没有更多我们能够做关于它。
一个尝试可能用MATLAB的建立图像处理路线来处理上下采样操作。对于上采样,imresize将会做这个工作,但是伴随着重大的开销(significant overhead)。一个更快的选择是用Kronecker点积方程kron,用矩阵成为上采样,一个矩阵。这个可能成为快速放大的顺序。当他来与下采样阶段在反馈过程中,imresize不能提供选项去下采样通过求和独一无二的n*n块。最近邻方法将会替代一个像素快通过块中的原始像素。一个可选择去应用blkproc对于每一个独一无二的块,或者一些联合im2col和colfilt。当这些选项的两者仅仅计算这些必要的。重复调用用户定义的快处理方程暴露重大的消耗。一个更快可循则在这个场合下就是去卷积图像用一个矩阵,然后简单的带走每一个序列用标准指标(如,y=x(1:2:end,1:2:end)。尽管卷积在这个场合下准确的计算4倍或者更多的输出(假设2x降采样)正如我们真正需要,这个方法仍然一个数量级顺序或者更快比起前面提到的方法。
许多作者,看起来,实现sigmoid激活方程和获得用inline方程定义。在这个写的时候,“inline”MATLAB方程定义不是想C宏指令(macros),采用一个巨大的时间数量来评估。因此,经常值得去简单的代替所有的参考对于f和f‘用准确的代码。有权衡在优化你的代码和保持可读性。
4. & &训练时事件(不完整)
4.1 & &Batch cs.在线更新
Stochastic 下降vs.batch 学习
4.2 学习率
LeCun’s的stochastic在线方法(hessian对角线)。这个值得?VIrene’s的观点:至少有一个不同的率对于每一层,因为梯度在低层更小和更低的考烤箱。LeCun做了相似的称述在[5].
4.3 & &误差方程的选择
二次误差(MLE),vs.点乘序列。最近的能够更加有效对于一些分类任务[2].
4.4 & &检查Your工作用有限微分
有限微分能够一个不可缺少的(indispensable)工具当他来时间去证实你能够获得你的反向传递正确的实现。他是显著地简单去做许多错误和仍然有一个网络,发现学习东西。检车梯度你的代码反对有限的不同去估计一种方式去确保你不能够有任何错误:对于一个简单的输入模式,估计梯度用二次有限微分:
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&& &&
检查反对梯度你的反向传播代码返回。Epsilon应该是小的,但是不能太小而导致数据精度问题。一些事情比如可能是可以的。注意用优先的不同来训练网络是广泛的非有效的比如。对于权重W在网络中,这个反向传递O(W)速度有点是非常好的价值对于hassle。
我的热门文章
即使是一小步也想与你分享卷积神经网络-刘海波_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
卷积神经网络-刘海波
上传于||文档简介
&&卷​积​神​经​网​络
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩21页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢【图文】卷积神经网络_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
卷积神经网络
上传于||暂无简介
大小:368.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢卷积神经网络在自然语言处理的应用
发表于 12:22|
来源WildML|
作者Denny Britz
摘要:CNN作为当今绝大多数计算机视觉系统的核心技术,在图像分类领域做出了巨大贡献。本文从计算机视觉的用例开始,介绍CNN及其在自然语言处理中的优势和发挥的作用。
当我们听到卷积神经网络(Convolutional&Neural&Network,&CNNs)时,往往会联想到计算机视觉。CNNs在图像分类领域做出了巨大贡献,也是当今绝大多数计算机视觉系统的核心技术,从Facebook的图像自动标签到自动驾驶汽车都在使用。最近我们开始在自然语言处理(Natural&Language&Processing)领域应用CNNs,并取得了一些引人注目的成果。我将在本文中归纳什么是CNNs,怎样将它们应用于NLP。CNNs背后的直觉知识在计算机视觉的用例里更容易被理解,因此我就先从那里开始,然后慢慢过渡到自然语言处理。什么是卷积运算?对我来说,最容易的理解方式就是把卷积想象成作用于矩阵的一个滑动窗口函数。这么说有些拗口,但是用动画显示就很直观了。3x3的滤波器做卷积运算。图片来源:把左侧的矩阵想象成一幅黑白图像。每一个元素对应一个像素点,0表示黑点,1表示白点(灰度图的像素值一般是0~255)。移动窗口又称作核、滤波器或是特征检测器。这里我们使用3x3的滤波器,将滤波器与矩阵对应的部分逐元素相乘,然后求和。我们平移窗口,使其扫过矩阵的所有像素,对整幅图像做卷积运算。你也许有些疑惑,刚才的操作究竟会有什么效果呢。我们就来看几个直观的例子。用邻近点像素值的均值替换其原值,实现图像模糊的效果:& & & & & &&用邻近点像素值与自身的差值替换其原值,实现边缘检测的效果:(为了直观地来理解,想想图像中平滑的那些部分,那些像素点与周围像素的颜色几乎一致:求和的结果趋近于0,相当于黑色。如果有一条明显的边缘线,比如黑白分界线,那么像素值的差值将会很大,相当于白色)&&里还有一些其它的例子。想要深入了解卷积运算的原理,我推荐阅读Chris&Olah写的。什么是卷积神经网络?现在你明白了什么是卷积运算了吧。那CNNs又是什么呢?CNNs本质上就是多层卷积运算,外加对每层的输出用非线性激活函数做转换,比如用和。在传统的前馈神经网络中,我们把每个输入神经元与下一层的输出神经元相连接。这种方式也被称作是全连接层,或者仿射层。在CNNs中我们不这样做,而是用输入层的卷积结果来计算输出。这相当于是局部连接,每块局部的输入区域与输出的一个神经元相连接。对每一层应用不同的滤波器,往往是如上图所示成百上千个,然后汇总它们的结果。这里也涉及到池化层(降采样),我会在后文做解释。在训练阶段,CNN基于你想完成的任务自动学习滤波器的权重值。举个例子,在图像分类问题中,第一层CNN模型或许能学会从原始像素点检测到一些边缘线条,然后根据边缘线条在第二层检测出一些简单的形状,然后基于这些形状检测出更高级的特征,比如脸部轮廓等。最后一层是利用这些高级特征的一个分类器。这种计算方式有两点值得我们注意:位置不变性和组合性。比如说你想对图片中是否包含大象做分类。因为滤波器是在全图范围内平移,所以并不用关心大象究竟在图片的什么位置。事实上,池化也有助于平移、旋转和缩放的不变性,它对克服缩放因素的效果尤其好。第二个关键因素是(局部)组合性。每个滤波器对一小块局部区域的低级特征组合形成更高级的特征表示。这也是CNNs对计算机视觉作用巨大的原因。我们可以很直观地理解,线条由像素点构成,基本形状又由线条构成,更复杂的物体又源自基本的形状。那么,如何将它们用于NLP呢?NLP任务的输入不再是像素点了,大多数情况下是以矩阵表示的句子或者文档。矩阵的每一行对应于一个分词元素,一般是一个单词,也可以是一个字符。也就是说每一行是表示一个单词的向量。通常,这些向量都是word&embeddings(一种底维度表示)的形式,如和,但是也可以用one-hot向量的形式,也即根据词在词表中的索引。若是用100维的词向量表示一句10个单词的句子,我们将得到一个10x100维的矩阵作为输入。这个矩阵相当于是一幅“图像”。在计算机视觉的例子里,我们的滤波器每次只对图像的一小块区域运算,但在处理自然语言时滤波器通常覆盖上下几行(几个词)。因此,滤波器的宽度也就和输入矩阵的宽度相等了。尽管高度,或者区域大小可以随意调整,但一般滑动窗口的覆盖范围是2~5行。综上所述,处理自然语言的卷积神经网络结构是这样的(花几分钟时间理解这张图片,以及维度是如何变化的。你可以先暂时忽略池化操作,我们在稍后会解释它):用于句子分类器的卷积神经网络(CNN)结构示意图。这里我们对滤波器设置了三种尺寸:2、3和4行,每种尺寸各有两种滤波器。每个滤波器对句子矩阵做卷积运算,得到(不同程度的)特征字典。然后对每个特征字典做最大值池化,也就是只记录每个特征字典的最大值。这样,就由六个字典生成了一串单变量特征向量(univariate&feature&vector),然后这六个特征拼接形成一个特征向量,传给网络的倒数第二层。最后的softmax层以这个特征向量作为输入,用其来对句子做分类;我们假设这里是二分类问题,因此得到两个可能的输出状态。来源:Zhang,&Y.,&&&Wallace,&B.&(2015).&A&Sensitivity&Analysis&of&(and&Practitioners’&Guide&to)&Convolutional&Neural&Networks&for&Sentence&Classification.计算机视觉完美的直观感受这里还存在吗?位置不变性和局部组合性对图像来说很直观,但对NLP却并非如此。你也许会很在意一个词在句子中出现的位置。相邻的像素点很有可能是相关联的(都是物体的同一部分),但单词并不总是如此。在很多种语言里,短语之间会被许多其它词所隔离。同样,组合性也不见得明显。单词显然是以某些方式组合的,比如形容词修饰名词,但若是想理解更高级特征真正要表达的含义是什么,并不像计算机视觉那么明显了。由此看来,卷积神经网络似乎并不适合用来处理NLP任务。(Recurrent&Neural&Network)更直观一些。它们模仿我们人类处理语言的方式(至少是我们自己所认为的方式):从左到右的顺序阅读。庆幸的是,这并不意味着CNNs没有效果。。实际上CNNs对NLP问题的效果非常理想。正如(Bag&of&Words&model),它明显是基于错误假设的过于简化模型,但这不影响它多年来一直被作为NLP的标准方法,并且取得了不错的效果。CNNs的主要特点在于速度快。非常的快。卷积运算是计算机图像的核心部分,在GPU级别的硬件层实现。相比于,CNNs表征方式的效率也更胜一筹。由于词典庞大,任何超过3-grams的计算开销就会非常的大。即使Google也最多不超过5-grams。卷积滤波器能自动学习好的表示方式,不需要用整个词表来表征。那么用尺寸大于5行的滤波器完全合情合理了。我个人认为许多在第一层学到的滤波器扑捉到的特征与n-grams非常相似(但不局限),但是以更紧凑的方式表征。CNN的超参数在解释如何将CNNs用于NLP任务之前,先来看一下构建CNN网络时需要面临的几个选择。希望这能帮助你更好地理解相关文献。窄卷积&vs&宽卷积在上文中解释卷积运算的时候,我忽略了如何使用滤波器的一个小细节。在矩阵的中部使用3x3的滤波器没有问题,在矩阵的边缘该怎么办呢?左上角的元素没有顶部和左侧相邻的元素,该如何滤波呢?解决的办法是采用补零法(zero-padding)。所有落在矩阵范围之外的元素值都默认为0。这样就可以对输入矩阵的每一个元素做滤波了,输出一个同样大小或是更大的矩阵。补零法又被称为是宽卷积,不使用补零的方法则被称为窄卷积。1D的例子如图所示:窄卷积&vs&宽卷积。滤波器长度为5,输入长度为7。来源:A&Convolutional&Neural&Network&for&Modelling&Sentences&(2014)当滤波器长度相对输入向量的长度较大时,你会发现宽卷积很有用,或者说很有必要。在上图中,窄卷积输出的长度是&(7-5)+1=3,宽卷积输出的长度是(7+2*4-5)+1=11。一般形式为步长卷积运算的另一个超参数是步长,即每一次滤波器平移的距离。上面所有例子中的步长都是1,相邻两个滤波器有重叠。步长越大,则用到的滤波器越少,输出的值也越少。下图来自斯坦福的,分别是步长为1和2的情况:卷积步长。左侧:步长为1,右侧:步长为2。来源:&在文献中我们常常见到的步长是1,但选择更大的步长会让模型更接近于,其结构就像是一棵树。池化层卷积神经网络的一个重要概念就是池化层,一般是在卷积层之后。池化层对输入做降采样。常用的池化做法是对每个滤波器的输出求最大值。我们并不需要对整个矩阵都做池化,可以只对某个窗口区间做池化。例如,下图所示的是2x2窗口的最大值池化(在NLP里,我们通常对整个输出做池化,每个滤波器只有一个输出值):CNN的最大池化。来源:&为什么要池化呢?有许多原因。&池化的特点之一就是它输出一个固定大小的矩阵,这对分类问题很有必要。例如,如果你用了1000个滤波器,并对每个输出使用最大池化,那么无论滤波器的尺寸是多大,也无论输入数据的维度如何变化,你都将得到一个1000维的输出。这让你可以应用不同长度的句子和不同大小的滤波器,但总是得到一个相同维度的输出结果,传入下一层的分类器。池化还能降低输出结果的维度,(理想情况下)却能保留显著的特征。你可以认为每个滤波器都是检测一种特定的特征,例如,检测句子是否包含诸如“not&amazing”等否定意思。如果这个短语在句子中的某个位置出现,那么对应位置的滤波器的输出值将会非常大,而在其它位置的输出值非常小。通过采用取最大值的方式,能将某个特征是否出现在句子中的信息保留下来,但是无法确定它究竟在句子的哪个位置出现。这个信息出现的位置真的很重要吗?确实是的,它有点类似于一组n-grams模型的行为。尽管丢失了关于位置的全局信息(在句子中的大致位置),但是滤波器捕捉到的局部信息却被保留下来了,比如“not&amazing”和“amazing&not”的意思就大相径庭。在图像识别领域,池化还能提供平移和旋转不变性。若对某个区域做了池化,即使图像平移/旋转几个像素,得到的输出值也基本一样,因为每次最大值运算得到的结果总是一样的。通道我们需要了解的最后一个概念是通道。通道即是输入数据的不同“视角”。比如说,做图像识别时一般会用到RGB通道(红绿蓝)。你可以对每个通道做卷积运算,赋予相同或不同的权值。你也同样可以把NLP想象成有许多个通道:把不同类的词向量表征(例如和)看做是独立的通道,或是把不同语言版本的同一句话看作是一个通道。卷积神经网络在自然语言处理的应用我们接下来看看卷积神经网络模型在自然语言处理领域的实际应用。我试图去概括一些研究成果。希望至少能够涵盖大部分主流的成果,难免也会遗漏其它一些有意思的应用(请在评论区提醒我)。最适合CNNs的莫过于分类任务,如语义分析、垃圾邮件检测和话题分类。卷积运算和池化会丢失局部区域某些单词的顺序信息,因此纯CNN的结构框架不太适用于PoS&Tagging和Entity&Extraction等顺序标签任务(也不是不可能,你可以尝试输入位置相关的特征)。文献[1&在不同的分类数据集上评估CNN模型,主要是基于语义分析和话题分类任务。CNN模型在各个数据集上的表现非常出色,甚至有个别刷新了目前最好的结果。令人惊讶的是,这篇文章采用的网络结构非常简单,但效果相当棒。输入层是一个表示句子的矩阵,每一行是word2vec词向量。接着是由若干个滤波器组成的卷积层,然后是最大池化层,最后是softmax分类器。该论文也尝试了两种不同形式的通道,分别是静态和动态词向量,其中一个通道在训练时动态调整而另一个不变。文献[2]中提到了一个类似的结构,但更复杂一些。文献[6]在网络中又额外添加了一个层,用于语义聚类。Kim,&Y.&(2014).&卷积神经网络用来语句分类文献[4]从原始数据训练CNN模型,不需要预训练得到word2vec或GloVe等词向量表征。它直接对one-hot向量进行卷积运算。作者对输入数据采用了节省空间的类似词袋表征方式,以减少网络需要学习的参数个数。在文献[5]中作者用了CNN学习得到的非监督式“region&embedding”来扩展模型,预测文字区域的上下文内容。这些论文中提到的方法对处理长文本(比如影评)非常有效,但对短文本(比如推特)的效果还不清楚。凭我的直觉,对短文本使用预训练的词向量应该能比长文本取得更好的效果。搭建一个CNN模型结构需要选择许多个超参数,我在上文中已经提到了一些:输入表征(word2vec,&GloVe,&one-hot),卷积滤波器的数量和尺寸,池化策略(最大值、平均值),以及激活函数(ReLU,&tanh)。文献[7]通过多次重复实验,比较了不同超参数对CNN模型结构在性能和稳定性方面的影响。如果你想自己实现一个CNN用于文本分类,可以借鉴该论文的结果。其主要的结论有最大池化效果总是好于平均池化;选择理想的滤波器尺寸很重要,但也根据任务而定需;正则化在NLP任务中的作用并不明显。需要注意的一点是该研究所用文本集里的文本长度都相近,因此若是要处理不同长度的文本,上述结论可能不具有指导意义。文献[8]探索了CNNs在关系挖掘和关系分类任务中的应用。除了词向量表征之外,作者还把词与词的相对位置作为卷积层的输入值。这个模型假设了所有文本元素的位置已知,每个输入样本只包含一种关系。文献[9]和文献[10]使用的模型类似。来自微软研究院的文献[11]和&[12]介绍了CNNs在NLP的另一种有趣的应用方式。这两篇论文介绍了如何学习将句子表示成包含语义的结构,它能被用来做信息检索。论文中给出的例子是基于用户当前的阅读内容,为其推荐其它感兴趣的文档。句子的表征是基于搜索引擎的日志数据训练得到的。大多数CNN模型以这样或是那样的训练方式来学习单词和句子的词向量表征,它是训练过程的一部分。并不是所有论文都关注这一步训练过程,也并不在乎学到的表征意义有多大。文献[13]介绍了用CNN模型对Facebook的日志打标签。这些学到的词向量随后又被成功应用于另一个任务&——&基于点击日志给用户推荐感兴趣的文章。字符层面的CNNs模型至此,所有的模型表征都是在单词的层面上。另外有一些团队则研究如何将CNNs模型直接用于字符。文献[14]学到了字符层面的向量表征,将它们与预训练的词向量结合,用来给语音打标签。文献[15]和[16]研究了直接用CNNs模型直接从字符学习,而不必预训练词向量了。值得注意的是,作者使用了一个相对较深的网络结构,共有9层,用来完成语义分析和文本分类任务。结果显示,用字符级输入直接在大规模数据集(百万级)上学习的效果非常好,但用简单模型在小数据集(十万级)上的学习效果一般。文献[17]是关于字符级卷积运算在语言建模方面的应用,将字符级CNN模型的输出作为LSTM模型每一步的输入。同一个模型用于不同的语言。令人惊讶的是,上面所有论文几乎都是发表于近两年。显然CNNs模型在NLP领域已经有了出色的表现,新成果和顶级系统还在层出不穷地出现。若有疑问或是反馈,请在评论区留言。谢谢阅读!&参考文献&[1]&&[2]&&[3]&&[4]&&[5]&&[6]&&[7]&&[8]&[9]&&[10]&&[11]&&[12][13][14]&[15]&[16]&[17]&原文链接:(译者/赵屹华&审核/刘翔宇、朱正贵 责编/周建丁 原创/翻译投稿请联系:,微信号:jianding_zhou)译者简介:,计算广告工程师@搜狗,前生物医学工程师,关注推荐算法、机器学习领域。将于-12日在北京隆重举办。在主会之外,会议还设立了16大分论坛,包含数据库、深度学习、推荐系统、安全等6大技术论坛,金融、制造业、交通旅游、互联网、医疗健康、教育等7大应用论坛和3大热点议题论坛,。&
推荐阅读相关主题:
CSDN官方微信
扫描二维码,向CSDN吐槽
微信号:CSDNnews
相关热门文章

我要回帖

更多关于 滤波器 什么卷积 的文章

 

随机推荐