基于深度学习的自然语言处理复习笔记 第四章

前馈神经网络

在这里插入图片描述

4.1 一个关于大脑的比喻

在比喻中,神经元是具有标量输入和输出的计算单元。每个输入都有与其相关联的权重。神经元将每个输入乘其权重并将它们相加,然后使其通过一个非线性函数,最终传递给其输出。
神经元彼此连接,形成网络:神经元的输出可能会提供给一个或者多个神经元作为输入。这样的网络被证明是功能强大的计算工具。如果权重设置正确,具有足够多神经元和非线性激活函数的神经网络可以近似模拟种类非常广泛的数学函数。
经典的前馈神经网络如图4.2所示。图中,圆圈代表神经元,指向神经元的箭头代表其输入,离开神经元的箭头代表输出。每个箭头都有权重,以反映其重要性,神经元分层排列,反映出信息的流动,底部没有箭头的一层是网络的输入
在这里插入图片描述

最顶层没有输出箭头,是网络的输出。其他层被认为是隐藏的。中间层神经元内部的S形表示非线性函数,用于在输出前修改神经元的值。图中,每个神经元连接到下一层中的所有神经元,我们称之为完全连接层或仿射层。
大脑的比喻是性感而有趣的,但是它也带来了注意力的分散以及数学上的不便。因此,我们重新使用更简洁的数学符号,很快我们会看到,图4.2中的神经网络知识一个简单的由线性模型构成的堆叠,其间由非线性函数进行分隔。
网络中每行神经元的值可以看作是一个向量。在图4.2中,输入层是4维向量,它上面的层是6维向量,全连接层可以看作是从4维到6维的线性变换,全连接层实现了一个向量与矩阵乘法,h=xW,其中从输入行中的第i个神经元到输出行中的第j个神经元的连接权重为W[i,j]。然后,在作为输入传递到下一层之前,h中每个值都非线性函数g做一定的变换。从输入到输出的整个计算过程可以写成(g(xW1))W2,其中W1是一层的权重,W2是第二层的权重。基于这样的观点,图4.1中的单个神经元相当于没有偏置项的logistic二分类器。

4.2 数学表示

从这里开始,我们将放弃有关大脑的比喻,仅在矩阵计算层描述网络。
最简单的神经网络称为感知器。它是一个简单的线性模型:
NN(x)=xW+b
其中,W是权重矩阵,b是偏置项,为了能超出线性函数,我们引进了一个非线性的隐层,这样就得到了带有单一隐层的多层感知器。含有单一隐层的前馈神经网络具有如下形式:
NN(x)=g(xW1+b1)W2+b2
这里,作用于输入的第一次线性变换中W1和b1分别是矩阵和偏置,g是作用于每个元素的非线性方程,也称激活函数或非线性,W2和b2是第二次线性变换的矩阵和偏置。
分开来看,xW1+b1是输入x从d [in]维到d1维的线性变换。然后将g施加到d1维向量中的每一个元素,最后矩阵W2与偏置向量b2一起将结果变换d2维的输出向量。非线性激活函数g在网络表示复杂函数的能力中,起着至关重要的作用。没有g的非线性,神经网络只能表示输入的线性变换。
我们可以通过添加额外的线性变换和非线性函数,得到双隐层的MLP:
NN(x)=(g2(g1(xW1+b1)W2+b2))W3
使用中间变量来描述神经网络可能更清楚一些:
NN(x)=y
h1=g1(xW1+b1)
h2=g2(h1W2+b2)
y=h2W3
由线性变换产生的向量成为层,最外层的线性变换产生输出层,其他线性变换产生隐藏层。非线性激活操作接在每个隐层后面。在某些情况下,如我们示例中的最后一层,偏置被强制为0。
由线性变换产生的层通常被称为完全连接的或仿射的。其他类型的体系结构也是存在的。特别的,图像识别问题多受益于卷积核池化层。这些结构在自然语言处理中也有应用,具有多个隐层的网络被称为深层网络,这也是深度学习这个名字的由来。
当描述神经网络时,应该明确层和输入的维度。某层网络接收d[in]维向量作为其输入,并将其转换为d[out]维向量。该层的维度被认为是其输出的维度。对于一个输入维数d[in],输出维数d[out]的全连接层,有l(x)=xW+b,其中,x,W,b的维数分别是1*d[in], d[in]*d[out], d[out]*1。
与线性模型类似,神经网络的输出是一个d[out]维向量。当d[out]=1时,网络的输出是一个标量。这样的网络在关注输出值的情况下可以哟个回归问题,在关注输出值的符号时,可以用于二分类问题。满足d[out]=k>1的网络可以用于K分类问题。这需要每一个维度与一个类别相联系,然后寻找具有最大值的维度。类似的,如果输出向量是正的并且各项和为1,则输出可以被解释为在各类别上的分布,这种对输出的归一化,通常通过在输出层上使用softmax变换实现。
一个网络的参数是其中的矩阵和偏置,二者定义了网络中的线性变换。像线性模型一样,通常将所有参数的集合记作θ。参数与输入一起决定了网络的输出训练算法负责设置参数的值,使得网络得到正确的预测结果。与线性模型不同,多层神经网络相对于其参数的损失函数不是凸的,这使得最优参数值的搜索难以处理,然而,基于梯度的优化方法可以在这里应用,并且在实践中变现非常好。

4.3 表达能力

在表达能力方面,MLP1是一个通用近似器——通过任意所期望的非零误差数值,它可以近似一系列函数,其中包括闭合有界子集上的所有连续函数,以及所有从任意有限维度离散空间映射到另一个此类空间的函数。这也许意味着没有必要使用更复杂的结构超越MLP1。然而,理论结果并没有讨论神经网络的学习能力,它只是说明表达能力存在,但是没有谈及针对训练数据和特定学习算法的正确函数。最后,它也没有说明隐层到底应该多大。事实上,存在这样的一些具有多界尺寸的神经网络,它们无法用层数更少的网络近似,除非层的大小是指数级别的。
实践中,我们在相对较小的数据集上使用局部搜索的方法,诸如随机梯度下降的变体,同时使用尺寸适中的隐层。由于通用近似定理在这些非理想的现实世界条件下没有给出任何保证,所以尝试比MLP1更复杂的架构肯定有好处。然而,在许多情况下,MLP1确实得到了很好的结果。

常见的非线性函数

非线性函数可以选取很多不同的形式。关于在什么情况下应该使用什么非线性函数,现在还没有很好的理论,给定任务选取非线性函数通常是一个经验问题。基于文献给出通常使用的非线性函数:sigmoid,tanh,hard tanh及relu。有些研究人员也使用其他形式的非线性函数,如cube,tanh-cube。
sigmoid sigmoid激活函数g(x)=1/(1+e[^-x]),也称logistic函数,是一个s型的函数,它将每一个值的x变换到区间[0,1]。sigmoid是自神经网络概念形成以来的标准非线性函数,但是近来被认为不合适用在神经网络的内层。这是因为经验上,下面所列的其他选择的表现被证明要好的多。
tanh(双曲正切) 双曲正切激活函数
tanh=e[^2x-1] / e[^2x+1]是一个s函数。它将值变换到[-1,1]区间中。
hard tanh hard tanh激活函数是tanh函数的近似,它可以更快的计算并得到导数:
hard tanh=(1,x>1) (-1,x<-1) (x,其他)
修正线性单元(relu) 修正激活函数,也被称为修正线性单元是一种非常简单的激活函数。它易于使用,并取得优异的结果。x<0时,relu单元将值都设为0。尽管很简单,它在很多任务中都变现优异,尤其是dropout正则化的时候。
relu=max(0,x)=(0,x<0)(x,其他)
根据经验来看,relu和tanh单元表现良好,显著的超过了sigmoid。因为在不同的设置中它们的表现可能各有优缺点,你也许会想要尝试同时使用tanh和relu激活函数。
在这里插入图片描述

4.5 损失函数

训练一个神经网络与训练一个线性分类器类似,定义一个损失函数L(y,y^),它表示真实输出为y时,预测结果为y ^的损失。训练的目标是在各种各样的训练样本中减少损失。给定真实的预期输出y,损失 L(y,y ^)为网络输出y ^给出一个数值分数(一个标量)。对于神经网络来说,线性模型的损失函数也是有意义并广泛应用的。

4.6 正则化与丢弃法

多层网络可以很大并带有很多参数,这使得它们
特别容易过拟合。模型正则化在深层神经网络与线性模型中有着同样甚至更为重要的作用。正则化,即L1,L2,dropout,对神经网络也是有意义的。特别地,也称为权重衰减地L2正则化在许多情况下能有效地实现良好地泛化能力。此外,调整正则化强度λ也是一个明智地举措。
令一种防止过拟合的有效技术,是丢弃法训练。丢弃法在防止网络学习过于依赖特定权重。在对每个训练样本进行随机梯度下降时,它随机丢弃(设置为0)网络中的一半神经元,例如,考虑具有两个隐层的多层感知器:
在这里插入图片描述这里,m1和m2分别是对应于h1,h2维数的掩码向量。⭕是针对每个元素的乘法。
掩码向量中每个元素的值都是0或1,由参数r,通常设置为0.5决定。将数据传入下一层之前用h ~代替隐层,传递的值中与掩码向量中零相对应的值被清零。
丢弃技术是神经网络方法在图像分类任务中表现强劲的关键因素之一,特别是与relu激活单元相结合时。 1 \sqrt{1} 1

4.7 相似与距离层

我们有时希望基于两个向量计算一个标量值,以通过该值反映出两个向量之间的相似性、兼容性或距离。例如,向量v1,v2是MLP的两个层,我们希望训练网络以产生与某些样本相似的向量,并产生与其它训练样本不相似的向量。
接下来,我们将描述一些常用的函数,它们以两个向量v,u为输入,并返回一个标量。这些函数可以集成在前馈神经网络中。
点积 一个非常常用的就是点积
欧式距离 d= Σ ( u − v ) ² ) \sqrt{Σ(u-v)²)} Σ(uv)²)
请注意,这时一个距离度量,不是相似度,这里小值表示相似的向量,大值表示不相似。

嵌入层

当神经网络的输入包含符号分类特征(如K个不同符号中选取一个特征,具体比如每个封闭词汇表中的单词时),对于一些d的值,通常将每个可能的特征值(即词汇表的每个单词)与一个d维向量相关联。接下来,这些向量被当作模型的参数,与其他参数共同训练。从一个符号的特征值到d维向量的映射是通过嵌入层实现的。嵌入层中的参数是一个简单的矩阵E,其中每一行对应于词表中的一个词,各行的词不相同。这样一来,查找操作就是一个简单的索引过程:v1249=E[1249,:]。如果符号特征被表示成独热编码的向量x,那么查找操作可由xE实现。
在送入下一层之前,词向量通常会彼此连接。在讨论类别特征稠密表示以及预训练单词表示时,我们会更彻底的讨论此问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值