神经网络和NLP——神经网络入门

神经⽹络和NLP——神经⽹络⼊门
前段时间⼀⼝⽓读完了 NN4NLP,很是畅快,⾮常喜欢作者⾏⽂讲解的⼝吻和逻辑。⼤概两周读完,每页都有收获,读完后反⽽担⼼有所疏漏,知识太多留不住,索性从头来⼀遍,把学习过程的知识点和思考记录下来,也算精简版供⾃⼰今后查阅。
感兴趣的,可以⼀起学习讨论,真的很推荐这本书。
⼤致介绍下该书。NN4NLP 由 Goldberg 撰写,是 CMU CS11-747 课程的教材,配合公开课⾷⽤更佳,。本书并⾮系统介绍 NN 和NLP,⽽是聚焦 NN 在 NLP 领域的具体应⽤,所以分成了四⼤部分:NN 中前馈神经⽹络的⼊门,前馈神经⽹络在 NLP 中的应⽤,RNN 等特殊结构在 NLP 中的应⽤,部分前沿⽅向介绍。
因此,本博客也打算分成多篇进⾏总结,其他篇章请⾃⾏搜索本博客。
城市生活2008NLP 与 NN 简介
由于⼈类语⾔的天然歧义性、不断变化演进、难以确切定义表⽰⽀配语⾔的规则、符号化离散化可组合性稀疏性对计算不友好等特性,使得NLP 研究极具挑战性。
早期,NLP 的研究停留在符号层⾯,即基于逻辑、规则和本体。现在,NLP 研究的主流是基于统计的机器学习⽅法。很长⼀段时间,核⼼的 NLP 技术⼤多是监督学习中的线性模型⽅法,如感知机、线性 SVM、LR 等。⼤约从2014年起,NLP 的主流⽅法转移到⾮线性的神经⽹络⽅法,从⽽输⼊也从稀疏⾼维特征向量变为低位稠密特征向量。
NN 不仅像传统 ML ⽅法⼀样学习预测,也学习如何正确表达数据,即在处理输⼊输出对时,⽹络内部产⽣⼀系列转化以处理输⼊数据来预测输出数据。设计者需要做的事设计⽹络结构和训练机制,给⽹络提供适当的输⼊输出对,并适当地编码输⼊数据,繁重的学习正确表达数据的⼯作由⽹络完成。
NN ⼀⼤优点就是⼤幅简化了特征⼯程⼯作,即允许设计者仅制定⼀个较⼩的核⼼的基本的⾃然的特征集合,由 NN 结构来将它们组合为更⾼层级的特征(representation)。也可以说NN最⼤威⼒就在于学习到好的 representation 的能⼒。通常这些 representation很复杂,不单单是线性组合,因此不再具有可解释性。
虽然应⽤核⽅法的 ML 算法也可以实现从核⼼特征中⾃动结合更⾼层次的特征,但还是存在缺陷。应⽤核⽅法的分类器的计算复杂度和训练数据的规模呈线性关系,因⽽难以处理⼤规模数据,⽽ NN 分类器的计算复杂度只是⽹络规模的线性关系,和训练数据规模⽆关。
NN 在 NLP 中的应⽤,很⼤⼀部分涉及嵌⼊层(embedding layer),即将离散符号应设为连续的低
维向量。两⼤类 NN 结构中,前馈神经⽹络接收固定尺⼨的输⼊或者变长但不考虑元素顺序的输⼊,其中 MLP 可以⽤在任意之前线性模型可⽤的任务中; RNN 则主要⽤于处理序列数据,由于避免了之前序列模型中普遍需要的 Markov 假设,⼤⼤推⼴了在语⾔模型、⾃动机器翻译等多个 NLP 任务中的应⽤。当然,RNN 很少作为孤⽴模块使⽤,通常作为可训练模块,配合后续⽹络模块⼀起使⽤,主要⽤来产⽣向量,喂给后续的预测模块,但训练过程还是 RNN 部分和预测部分⼀起训练,即 end-to-end。
注意,本书中介绍的 NLP 任务⼤多是低层次相对定义明确的任务,像对话系统、⽂档摘要、问答系统等尚属于开放问题的,并未涉及。
神经⽹络⼊门
1 从监督机器学习中的线性模型到 MLP
本书所讨论的 NN 是⼀类监督 ML 算法,因此需要对监督 ML 算法有基本了解,但过于基础,不再细述。
线性模型的限制是处理不了⾮线性可分问题,典型如 XOR 问题。
⼀种⽅法是,⼿动设计⾮线性映射,将线性不可分数据转化为线性可分的,通常是变换到更⾼维空间,
再利⽤线性模型解决。但这个⼿动设计过程需要靠直觉运⽓。
⼀种⽅法是,利⽤核技巧,过程同上。但利⽤核技巧的 SVM ⽅法将线性依赖训练集的尺⼨,使得难以应⽤到⼤规模训练数据集。另⼀个缺点是⾼维空间增加了过拟合的风险。
另⼀种⽅法是,定义⼀个可训练的⾮线性映射函数,将其与后续的线性分类器⼀同训练,即到合适的映射表⽰的⼯作成了训练算法的责任,从⽽解决⾮线性可分问题,此即 NN 的主要思想。显然,这个映射函数应可微,从⽽可以应⽤基于梯度的训练⽅法。如下图,
上图即描述了⾮常常见的 NN 结构——MLP。
2 前馈神经⽹络
2.1 MLP
典型的前馈神经⽹络如下图所⽰,
数学上,可表⽰为
神经元(Neuron)实现了上⼀节的φ作⽤,其中的⾮线性激活函数实现了 g 的作⽤。
如果该层所有神经元都与下⼀层所有神经元相连接,称之为全连接层或者仿射层。北京全路通信信号研究设计院
定义了线性映射的项 W 和 b 属于⽹络的参数,由优化算法学习。给定⽹络参数,即指定了映射函数;给定⽹络结构,即指定了映射函数集合。
不过不像线性模型,MLP 的损失函数并不是关于⽹络参数的凸问题,所以难以获得全局最优解,但仍是使⽤基于梯度的优化⽅法去搜寻。
2.2 表现能⼒
那么 MLP 的表现能⼒如何呢?Universality Theorem 表明,MLP1 是⼀个通⽤逼近器,简单来说可以实现任意的由 N 维实数空间到 M 维实数空间的连续函数。
虽然理论表明⼀层 MLP 即具有极强的表达能⼒,但并没告诉我们如何实现这⼀能⼒,实际上训练到想要的程度并不简单,包括超参设置。 理论表明,更深的 MLP ⽐更⼴的 MLP 性能表现更好。
(1) 从模拟电路⾓度类⽐,多层逻辑门来实现某函数更简单些。
(2)从模块化⾓度来看,不同层实现不同的分类区分功能,越前⾯实现的分类功能越基础,这样每个基本的分类器也能获得⾜够的训练样本。
2.3 ⾮线性
⾮线性 g 有多种形式,⽬前并没有⽐较好的理论指导什么样的条件⽤什么⾮线性函数更好,通常根据确切任务靠经验选取。
常⽤的如下:
Sigmoid,σ(x)=1/(1+e^-x)以前较权威,⽬前在 NN 的内层中已弃⽤。
Tanh,tanh(x)=(e^2x-1)/(e^2x+1)。
Hard tanh,是 tanh 的近似,但计算和求导更快,hardtanh(x)={-1,x<-1;1,x>1;x,otherwise}。
ReLU,ReLU(x)=max(0,x),虽然形式很简单,但在很多任务中表现不错,尤其是和dropout正则化技术结合时。
2.4 正则化和 dropout
防⽌ NN 过拟合技术包括正则化和 dropout。
正则化包括 L1、L2和 elastic-net 等,
dropout 设计来避免⽹络学习着依赖特定权重,可以通过在随机梯度训练中,对每个训练样本随机舍弃⽹络中或某层的⼀半神经元(即神经元输出为0)来实现。
理论分析表明,dropout 和 L2 有很强的关联性,此外也可以把 dropout 看做模型平均和 ensemble 技术。
3 NN 的训练
NN 也是可微的参数化函数,可通过基于梯度的优化算法训练。虽然 NN 的⾮线性导致⽬标函数⾮凸,基于梯度的⽅法很难到全局最优,但实践中仍然很有效。
线性模型中的梯度计算依赖微分的链式法则,这在复杂⽹络中变得艰难且易错。乐村98年提的反向传播算法有效地解决了这个问题。
反向传播算法通过缓存中间结果,来计算利⽤链式法则的复杂表达式的导数。反向传播算法也可以看做反转⾃动微分算法的特例。
3.1 计算图抽象yintu
计算图抽象可以⽅便实现:构建任意⽹络、估计对应输⼊的预测(前向传导)、关于任意标量损失计算参数的梯度(反向传导)。
计算图将任意数学计算表述为⼀个图,是⼀个有向⽆环图(DAG)。NN 也是⼀个数学表达式,因此可以表⽰成计算图,如 MLP1 可以表⽰为
通常计算图的构造通过已有的软件库或者 API 完成,之后只要直接执⾏前向计算获得计算结果,或者反向计算获得梯度即可。
(1) 前向计算
注意,这⾥的 N 个节点的序号 i 由拓扑排序确定,DAG 拓扑排序的经典算法由 khan、DFS 等。
(2) 反向计算
(3) 实现软件
实现计算图模型的软件包有不少,包括 Theano、TensorFlow、Chainer、DyNet 等。
DyNet 和 Chainer 使⽤的动态图构建⽅式,TensorFlow 和 Theano 采⽤了静态图构建⽅式。
在动态图构建⽅式中,每次对训练样本通过语⾔编码重新产⽣⼀个不同的计算图,然后前向和⽅向传播应⽤于该图。在静态图构建⽅式中,计算图的形状通过 API 在计算最初只定义⼀次,然后优化图编译器会产⽣⼀个最优的计算图,每个训练样本都将喂给这个最优计算图。
人鬼之战
静态图构建⽅式是把双刃剑。⼀⽅⾯,⼀旦构建就可以在 CPU 或 GPU 上⾼效运⾏,特别适合固定结构的⼤型图。另⼀⽅⾯,编译过程本⾝⾮常耗时,使得接⼝更难应⽤。此外,对于 RNN 和在结构化预测环境中,动态图构建⽅式更⽅便。
4 实践考量
国家发改委杨宜勇简介4.1 训练结果不理想时
(1)选择合适的损失函数
当使⽤ softmax 输出层时,选择交叉熵,⽽⾮平⽅和。
(2)Mini-batch
有时⼤点的 minibatch 计算效率更⾼,如 GPU 上。
(3)尝试新的激活函数
早期的 sigmoid 容易产⽣梯度消失问题,15年开始采⽤ ReLU及其变种。
ReLU 属于 MaxOut 的特例。
(4)⾃适应学习速率
学习速率通常从0.001、0.01、0.1、1中进⾏试验。⼀般学习速率应随着训练进⾏递减。
注意,learning rate cannot be one-size-fits-all, and give different parameters different learning rate。
AdaGrad、AdaDelta、RMSProp、Adam 等,属于⾃适应学习速率算法。通常,对于⼤规模⽹络,Adam 表现更⾼效也更强健。
(5)添加动量
SGD+Momentum,Nesterov Momentum 等,属于SGD 的变种,将前⾯的梯度进⾏累积影响本次更新。
(6)shuffling
训练样本供给给⽹络的顺序也很重要。⼀般建议提前 shuffle 数据。但当样本不是 IID 时,shuffle 反⽽不合适。
每个 epoch 采⽤的训练数据都要 shuffle,通常软件包⾃⾏处理了,如 keras。
4.2 测试结果不理想时:
(1)早点停⽌迭代
早点停⽌训练,避免过拟合。
(2)衰减权重(属于正则化)
更新公式中,在 w 前乘以⼀个0.99之类的,让 w 越来越⼩。从⽽修剪掉⽆⽤的权重。
(3)dropout(属于正则化)
训练时,每个 mini-batch 对隐层神经元随机删除 p%后进⾏训练。此时,每次实际上训练了不同的⽹络结构,且更 thinner。可以看出,采⽤ dropout 也可以看做采⽤了 ensemble。
测试时,不必 dropout,每个训练好的权重乘以 (1-p)%即可。
>带锈防锈剂

本文发布于:2024-09-24 03:17:26,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/53858.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:训练   线性   计算   学习   数据   算法   实现
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议