阿里巴巴吴炜:深度学习原理和在自然语言处理上的应用
大家好我是吴炜,目前在阿里巴巴主要从事点击率预估和相关性方面的数据挖掘工作。今天给大家带来的主题《深度学习原理和在自然语言处理上的应用》
现在,深度学习如火如荼,各大巨头像军备竞赛般争夺深度学习的大牛们,Yann Lecun加盟Facebook,Geoffrey Hinton加盟谷歌,Andrew NG加盟百度…..随着这些巨头公司门的推动,深度学习在工业界也得到了普遍的应用,特别是在图像、语音识别领域更是取得了突破性的进展,基本取代传统方法。
本次分享主要 分成神经网络的原理,深度学习,深度学习在NLP中的应用
神经网络模型由两个处理阶段组成,每个阶段都类似于感知器模型,因此神经网络也被称为多层感知器(multilayer perceptron),或 者MLP。然而,与感知器模型相比,一个重要的区别是神经网络在隐含单元中使用连续的sigmoid非线性函数,而感知器使用阶梯函数这一非线性函数。这意味着神经网络函数关于神 经网络参数是可微的,这个性质在神经网络的训练过程中起着重要的作用。
如果网络中的所有隐含单元的激活函数都取线性函数,那么对于任何这种网络,我们总可以 找到一个等价的无隐含单元的网络。这是由于连续的线性变换的组合本身是一个线性变换。然 而,如果隐含单元的数量小于输入单元的数量或者小于输出单元的数量,那么网络能够产生的 变换不是最一般的从输入到输出的线性变换,因为在隐含单元出的维度降低造成了信息丢失。
另一种方法是事先固定基函数的数量,但是允许基函数可调节。换句话说,就是使用参数形 式的基函数,这些参数可以在训练阶段调节。在模式识别中,这种类型的最成功的模型时前馈 神经网络,也被称为多层感知器(multilayer perceptron),将在本章讨论。实际上,“多层感知 器”是一个相当不正确的命名,因为模型是由多层logistic回归模型(带有连续的非线性性质)组 成,而不是由多层感知器(带有非连续的非线性性质)组成。对于许多应用来说,与具有同样 泛化能力的支持向量机相比,最终的模型会相当简洁,因此计算的速度更快。这种简洁性带来 的代价就是,与相关向量机一样,构成了网络训练根基的似然函数不再是模型参数的凸函数。然而,在实际应用中,考察模型在训练阶段消耗的计算资源是很有价值的,这样做会得到一个 简洁的模型,它可以快速地处理新数据。
图中给出的网络结构是在实际中最常用的一个。然而,它很容易扩展。例如,可以增加额 外的处理层,每层包含一个加权线性组合,以及一个使用非线性激活函数 进行的元素级别的变换。注意,在文献中,关于计算这种网络的层数,有一些令人困惑的地 方。因此图中的网络可能被描述成一个3层网络(计算单元的层数,把输入当成单元),或者 有时作为一个单一隐含层网络(计算隐含单元层的数量)。我们推荐的计算方法是把图中的网 络称为两层网络,因为它是可调节权值的层数,这对于确定网络性质很重要。
神经网络结构的另一个扩展是引入跨层(skip-layer)链接,每个跨层链接都关联着一个对应 的可调节参数。例如,在一个两层的神经网络中,跨层链接可能直接从输入链接到输出。原则 上,有着sigmoid隐含单元的网络总能够模拟跨层链接(对于有界输入值),模拟的方法是使用 足够小的第一层权值,从而使得隐含单元几乎是线性的,然后将隐含单元到输出的权值设置为 足够大来进行补偿。然而在实际应用中,显示地包含跨层链接可能会更方便。此外,网络可以是稀疏的。稀疏的网络中,并不是所有有可能的链接方式都被链接上。
由于在网络图和它的数学函数表达式之间有一个直接的对应关系,因此我们可以通过考虑更 复杂的网络图来构造更一般的网络映射。然而,这些网络必须被限制为前馈(feed-forward)结 构,换句话说,网络中不能存在有向圈,从而确保了输出是输入的确定函数。用一个简单 的例子说明了这一点。这样的网络中每个(隐含或者输出)单元都计算了一个下面的函数
前馈网络的近似性质被广泛研究,因为神经网络拥有称为通用近似(universal approximator)的性质。 例如,一个带有线性输出的两层网络可以在任意精度下近似任何输入变量较少的连续函数,只 要隐含单元的数量足够多。这个结果对于一大类隐含单元激活函数都成立,但是不包括多项式 函数。虽然这些定理是毋庸置疑的,但是关键的问题是,给定一组训练数据,如何寻找合适的 参数值。
神经网络的性质
上图是简单的二分类问题的例子,数据集是人工生成的数据。模型为神经网络,网络具有两个输入结 点,两个带有tanh激活函数的隐含单元,以及带有logistic sigmoid激活函数的一个输出单元。蓝色虚线表 示每个隐含单元的z = 0.5的轮廓线,红线表示网络的y = 0.5的决策面。为了对比,绿线表示根据生成数 据的概率分布计算出的最有的决策边界。
目前为止,我们把神经网络看成从输入变量x到输出变量y的参数化非线性函数中的一大 类。确定网络参数的一个简单的方法类似于我们在对多项式曲线拟合问题的讨论,因此我 们需要最小化平方和误差函数。
其中f (·)在分类问题中是一个非线性激活函数,在回归问题中为恒等函数。我们的目标是推广 这个模型,使得基函数φj (x)依赖于参数,从而能够让这些参数以及系数{wj }能够在训练阶段调 节。当然,有许多种方法构造参数化的非线性基函数。神经网络使用与上面公式形式相同的 基函数,即每个基函数本身是输入的线性组合的非线性函数,其中线性组合的系数是可调节参 数。
所以基本的神经网络,它可以被描述为一系列的函数变换。首先,我们构造输入变 量x1, . . . , xD的M个线性组合
其中j = 1, . . . , M,且上标(1)表示对应的参数是神经网络的第一“层”
aj被称为激活
每个激活都使用一个可微的非线性激活函数h(·)进行变换
zj = h(aj)
非线性函数h(·)通常被选为S形的函数,例如logistic sigmoid函数或者双曲正切函数。
这些值再次线性组合,得到输出单元激活
k=1,2,..K是输出的总数量
我们可以将各个阶段结合,得到整体的网络函数。对于sigmoid输出单元激活函数,整体的网络函数为
上图就是公式的一个解释
输入变量、隐含变量、输出变量都表示为结点,权 参数被表示为结点之间的链接,其中偏置参数被表示为来自额外的输入变量x0 和隐含变量z0 的链接。箭 头表示信息流在网络中进行前向传播的方向。
以上就是大致介绍了神经网络的基本原理
目前为止,我们把神经网络看成从输入变量x到输出变量y的参数化非线性函数中的一大 类。
如果对于神经网络进行扩展:1:增加层数 2:增加激活函数的选择 3:增加跨层的链接
神经网络就扩展为常说的深度神经网络,使用数据集对于这个网络进行训练,得到参数w的过程就被叫做深度学习
在自然语言处理(NLP)领域,深度学习才刚刚开始,下面让我们看看深度学习在NLP领域能够给我们带来怎样的惊喜。
如上图所示是一个由两个卷积层、两个Pooling层组成的一个典型的LeNet5模型,第一个卷积层,通过6个5*5的卷积矩阵去卷积32*32的图像,产生6个28*28的特征图(Feature Map),其中,可以认为,每一个卷积矩阵提取的是一种特征,生成6种类型的特征;然后通过一个Pooling层对6个特征图做Pooling操作(Pooling Size:2*2,也即每2*2大小的区域内取最大值,生成一个新的像素,可以理解为:选择最能代表该区域特征的像素点,也可以排除噪音的干扰,增强特征),生成6个14*14大小的特征图;接下来又接有一个卷积层,这个并不是一个全连接的结构,而是采用部分连接,连接模式如下表所示
其中,横向的数字表示的是16种连接模式,也即该层卷积生成的16种特征图,竖向的数字表示S2层的6个特征图,以C3层的第3号特征图的产生为例进行说明,表中X表示有连接,通过连接S2层中的3,4,5号特征图分别用5*5的卷积核卷积,然后叠加之后产生C3层的第3号特征图。
Collobert et al.在2011年发了一篇论文“Natural language processing almost from scratch”,介绍了深度学习在NLP领域的应用
主要介绍了两种,一种是窗口级别的任务,另一种是句子级别的任务。窗口级别的任务,识别的对象只与其上下文窗口有关,比如词性标注,该论文的做法是直接将上下文窗口内的几个词的词向量连接,作为深度学习模型的输入训练模型,同时根据任务的不同会对损失函数进行修改,比如在词性标注任务中会加上一个概率转移矩阵,具体不做详细叙述,可以参考一下论文。
如上图所示是该论文中提出的CNN的文本分类框架。第一层是一个映射层,将原始句子中的每个词映射为词向量表示(可以是事先利用无标注数据训练好的,也可以是随机初始化,但是随机初始化的效果并不是很好),这样一个句子就可以用矩阵(n*k,n为词向量维度,k为句子长度)表示,然后将相邻的几个词(窗口大小自定义,设为w,一般取值为3)的词向量进行连接,生成一个3n*k的矩阵,然后乘以一个卷积矩阵M,得到卷积之后的矩阵(3n*h,其中h是模型的一个hyper-param,按照图像卷积的思维去理解的话,可以认为是特征图的个数,表示提取了多少种特征,最终生成的向量维度也就是h),卷积之后的矩阵每列取最大值(Max-pooling)之后,就得到了句子的特征向量表示,同时可以将不同长度的句子映射为相同长度的向量表示,长度为h;然后该向量表示作为神经网络的输入,最终预测句子类别。
如果按照图像的思维去理解的话,可以认为是用h个n*(因为在文本中,我们不能对词向量进行切割,所以只能设置宽度为词向量维度n)3的卷积核卷积输入矩阵,只是在上图中将连续的3个词向量进行了连接,然后乘以3n*h的矩阵,结果是一样的,但是如果按照图像的方法去做的话,需要将句子填充成等长的句子,如果用零填充的话,卷积完之后是0,对结果是没有任何影响。
Collobert和 Weston在2011年提出提出的这个模型,改变了文本分类的传统思维,该模型不需要人工设计特征,只需要利用文本的原始输入向量,通过卷积、池化等操作自动提取特征,进行有效分类,深度学习在自然语言处理中的最大卖点。
参考材料:
CNN原理介绍: http://blog.csdn.net/zouxy09/article/details/8781543
http://www.geekcome.com/content-10-3761-1.html
Deep learning 做NLP的经典论文
Collobert et al. Natural Language Processing almost from scratch.
以上是今天的分享内容,谢谢大家的关注
End.