nlp-期末背诵版
1.激活函数
1.1深度学习的基本原理是
基于人工神经网络,信号从一个神经元进入,经过非线性的激活函数,传入到下一层神经元;再经过该层神经元的激活,继续往下传递,如此循环往复,直到输出层。正是由于这些非线性函数的反复叠加,才使得神经网络有足够的能力来抓取复杂的特征。
1.3å
加入激活函数,是为了增强模型的非线性,如果不经过非线性激活,那么无论神经网络加多少层永远都是线性组合,而加入了非线性激活函数后,已经可以证明,可以以任意精度逼近非线性函数。显而易见,激活函数在深度学习中举足轻重。
1.2什么是激活函数
在神经元中,输入的 inputs 通过加权,求和后,还被作用了一个函数,这个函数就是激活函数。
2.常用的激活函数
1.sigmoid函数:
其中,a用于控制sigmoid函数的形状,在神经网络中,a一般取1。
Sigmoid函数的导数:
Sigmoid 函数和导数画图如下 :
特点:它能够把输入的连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1.
2.Tanh函数全称Hyperbolic Tangent,即双曲正切函数,定义如下:
导数如下:
Tanh函数和导数:
3.ReLU函数
Relu激活函数(The Rectified Linear Unit),虽然它形式非常简单
优点:
1.比较好地解决了梯度消失的问题
2.计算速度非常快,只需要判断输入是否大于0
3.收敛速度远快于sigmoid和tanh。它是比较常用的激活函数。
2.梯度消失
使用BP,也即导数的后向传递来优化:先计算输出层对应的损失,然后将损失以导数的形式不断向上一层网络传递,修正相应的参数,达到降低损失的目的。
Sigmoid函数在深度网络中常常会导致导数逐渐变为0,使得参数无法被更新,神经网络无法被优化。原因在于两点:
(1) 在上图中容易看出,当)中
较大或较小时,导数接近0,而,当前层的导数需要之前各层导数的乘积,几个小数的相乘,结果会很接近0
(2) Sigmoid导数的最大值是0.25,这意味着导数在每一层至少会被压缩为原来的1/4。不同的层次计算出来的梯度的大小不同,越靠前的层的学习速度就越慢。也就是,梯度消失的问题。
3.skip-gram和cbow
word embedding是一种表示词的方法(将单词按照含义进行编码成向量)
word2vec是word embedding所在论文附带的word2vec的工具包(表示词之间的关系)
两个算法:
3.1skip-grams(SG) 给定目标单词,预测上下文单词
Skip-Gram模型:和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。
input:特定的这个词”Learning”是我们的输入
output:我们的上下文大小取值为4,8个上下文词是我们的输出
Network:我们的输入是特定词, 输出是softmax概率排前8的8个词,对应的Skip-Gram神经网络模型输入层有1个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。
这样当我们有新的需求,要求出某1个词对应的最可能的8个上下文词时,我们可以通过一次DNN前向传播算法得到概率大小排前8的softmax概率对应的神经元所对应的词即可。
https://blog.csdn.net/weixin_30878501/article/details/96556202
3.2Continuous Bag of Words(CBOW),从词袋上下文中预测目标单词
CBOW模型:训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。
- input:我们的上下文大小取值为4,上下文对应的词有8个,前后各4个,这8个词是我们模型的输入。由于CBOW使用的是词袋模型,因此这8个词都是平等的,也就是不考虑他们和我们关注的词之间的距离大小,只要在我们上下文之内即可。
- output:期望输出词是”Learning”,输出是所有词的softmax概率(训练的目标是期望训练样本特定词对应的softmax概率最大)
- Network:对应的CBOW神经网络模型输入层有8个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。
- 这样当我们有新的需求,要求出某8个词对应的最可能的输出中心词时,我们可以通过一次DNN前向传播算法并通过softmax激活函数找到概率最大的词对应的神经元即可。
4.RNN:lstm
1.之前的
在RNN之前的神经网络,只能单独的处理一个个的输入,前一个输入和后一个输入是完全没有关系的.
但是,像上面的例子需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。
2.RNN(recurrent neural network,循环神经网络)
2.1RNN的主要思想就是把隐藏层/输出层的值保存在memory中,参与到新的输入的计算中。
2.2RNN的优点是使得序列处理称为可能:序列可以是输入,可以是输出,或者输入输出都是序列。
RNN使得可以处理向量序列:

第二个譬如像是输入一张图片,输出对图片的描述,图片本身作为一个向量,输出一个句子对它进行描述
第三个可以是对句子进行情感分析,输入是一个序列,输出只有一项
2.3RNN为什么会有记忆功能呢?
因为在下一次的计算中,隐藏单元也和输入一起参与了运算。我们知道隐藏单元是输入的计算结果;因此可以在一定程度上保留输入的信息。
3.LSTM是(long short-term memory)长短期记忆网络
3.1为何要提出长的短期记忆网络呢?
隔得太远,RNN会失效;LSTM提出的主要目标是让网络具有较长远的记忆。
3.2结构
LSTM和RNN的整体架构是一样的,但是 中间的模块的结构不同。相比于一般的RNN,LSTM的“循环单元”有四个网络结构,相互影响.
这里有三个门,分别是 forget gate,input gate和output gate。input gate用于控制有多少的输入可以被加入到cell中;output gate用于控制新的cell中的内容有多少可以被输出;forget gate用于控制旧的cell中的内容有多少可以保存。至于门到底是打开,还是关闭,这就是网络自己学习到的。
3.3LSTM的过程
LSTM的第一步是决定需要从cell状态中扔掉什么样的信息,由“遗忘门(forget gate)”的sigmoid层决定.
第二步是决定我们需要在cell state里存储什么样的信息
在决定需要遗忘和需要加入的记忆之后,就可以更新旧的cell state
最后,我们需要决定要输出的东西
LSTM的性能好于RNN,和它4倍于RNN的系数关系很大。
3.lstm 如何来避免梯度消失?
4.GRU
Gate Recurrent Unit)是循环神经网络(Recurrent Neural Network, RNN)的一种。和LSTM(Long-Short Term Memory)一样,也是为了解决长期记忆和反向传播中的梯度等问题而提出来的。
GRU更简单,效果也差不多。
5.seq2seq:attention, self-attention;
1.什么是seq2seq:
Seq2Seq模型是RNN(包括LSTM和GRU)重要的一个变体. seq2seq又叫Encoder-Decoder模型。它可以实现从一个序列到任意一个序列的转换。
最基础的Seq2Seq模型包含了三个部分,即Encoder、Decoder以及连接两者的中间状态向量,Encoder通过学习输入,将其编码成一个固定大小的状态向量S,继而将S传给Decoder,Decoder再通过对状态向量S的学习来进行输出。
2.seq2seq+attention:
0)attention概念:
Attention是从大量信息中有选择地筛选出少量重要信息并聚焦到这些重要信息上,忽略大多不重要的信息。聚焦的过程体现在权重系数的计算上,权重越大越聚焦于其对应的Value值上,即权重代表了信息的重要性,而Value是其对应的信息。
1) 为什么要加attention:
lstm模型虽然具有记忆性,但是当Encoder阶段输入序列过长时,解码阶段的lstm无法很好的针对最早输入的序列(可能会遗忘最早的序列信息)。
2) attention如何加入:
在Decoder阶段:将每一时刻解码的输入(上一时刻的输出)与Encoder阶段所有时刻隐藏层的输出信息进行加权求和(通俗点讲就是:在预测下一个词时都会把Encoder阶段的信息都看一遍,决定预测当前词和Encoder中的哪些词相关)。得到Decoder阶段当前时刻的Ci(每个时刻都会有一个新的Ci)。当前时刻隐藏层的新状态Si则是根据上一时刻的状态Si-1,Yi-1,Ci 三者的一个非线性函数得出。
引入attention的一个直观解释是,对于seq2seq,类似于翻译人员从头到尾阅读德语文本, 完成后,他开始逐字翻译成英语。 如果句子过长,则他可能会忘记文本前面部分所读的内容。而seq2seq +attention则类似于翻译人员从头到尾阅读德语文本,同时写下关键字,然后他开始翻译成英语。 在翻译每个德语单词时,他使用了自己写下的关键字。
3)对齐机制的attention:
在Decoder阶段每一时刻解码获得的Ci向量与普通attention一样,隐藏层状态Si的获得不同,Si是根据Si-1,Yi-1,Ci和Encoder阶段对应时刻的输出。
3.seq2seq应用场景:
seq2seq的用途很广,可以做机器翻译,也可以做问答系统:
由于这种Encoder-Decoder结构不限制输入和输出的序列长度,因此应用的范围非常广泛,比如:
机器翻译。Encoder-Decoder的最经典应用,事实上这一结构就是在机器翻译领域最先提出的
文本摘要。输入是一段文本序列,输出是这段文本序列的摘要序列。
阅读理解。将输入的文章和问题分别编码,再对其进行解码得到问题的答案。
语音识别。输入是语音信号序列,输出是文字序列
self-attention
self-attention机制允许输入彼此交互(“自我”)并找出它们应该更多关注的对象(“关注”)。 输出是这些交互和注意力得分的加权和。
为何Self Attention逐渐被广泛使用?
- 引入Self Attention后会更容易捕获句子中长距离的相互依赖的特征,因为如果是RNN或者LSTM,需要依次序序列计算,对于远距离的相互依赖的特征,要经过若干时间步步骤的信息累积才能将两者联系起来,而距离越远,有效捕获的可能性越小。
- Self Attention在计算过程中会直接将句子中任意两个单词的联系通过一个计算步骤直接联系起来,所以远距离依赖特征之间的距离被极大缩短,有利于有效地利用这些特征
- Self Attention对于增加计算的并行性也有直接帮助作用
6.transformer;
1.1实质
Transformer 实际上就是一个带self-attention的seq2seq,是第一个完全依赖于 Self-Attention 来计算其输入和输出表示的模型,而不使用 RNN 或 CNN。
1.2构成
Transformer 由且仅由 self-Attention 和 Feed Forward Neural Network 组成。Transformer中包括了编码器和解码器各 6 层,总共 12 层的 Encoder-Decoder。
transformer中输入为何要包括位置信息?
1).词序变化语义不同
在同一个句子中,即使所有的词都相同但词序的变化也可能导致句子的语义完全不同,比如”北京到上海的机票”与”上海到北京的机票”,它们的语义就有很大的差别。
2)如果不引入
而Self-Attention结构是不考虑词的顺序的,如果不引入位置信息,前一个例子两句话中中的”北京”会被编码成相同的向量,但实际上我们希望两者的编码向量是不同的,前一句中的”北京”需要编码出发城市的语义,而后一句中的”北京”则为目的城市。
3)换言之
如果没有位置信息,Self-Attention只是一个结构更复杂的词袋模型。所以,在词向量编码中引入位置信息是必要的。
为什么transformer要加入positional embedding呢?
因为attention的天涯若比邻,失去了句子中词语的位置信息。
7.多义词;
多义词
多义词是自然语言中经常出现的现象,也是语言灵活性和高效性的一种体现
多义词对Word Embedding来说有什么负面影响
1.模型区分不开多个含义
多义词Bank,有两个常用含义,但是Word Embedding在对bank这个单词进行编码的时候,是区分不开这两个含义的。
2.为什么区分不开?
因为它们尽管上下文环境中出现的单词不同,但是在用语言模型训练的时候,不论什么上下文的句子经过word2vec,都是预测相同的单词bank,而同一个单词占的是同一行的参数空间,这导致两种不同的上下文信息都会编码到相同的word embedding空间里去。所以word embedding无法区分多义词的不同语义,这就是它的一个比较严重的问题。
从word2vec出现之后,人们提出了各种方法来解决这个问题,直到ELMO提供了一种简洁优雅的解决方案。
怎么解决
ELMO的提出就是为了解决这种语境问题,动态的去更新词的word embedding。
ELMO的思想是:
先用语言模型学习单词的Word Embedding,此时没有区分多义词,但是在实际使用Word Embedding时,单词已经具备特定的上下文了,这时可以根据上下文单词的语义去调整单词的Word Embedding表示,这样经过调整后的Word Embedding更能表达在这个上下文中的具体含义。因此ELMO实际上是根据当前上下文对Word Embedding进行动态调整的一种思路。
8.mask
mask就是对某些值进行掩盖,使其不产生效果。
Transformer 模型里面涉及两种 Mask。分别是 Padding Mask 和 Sequence Mask。
其中,Padding Mask 在所有的 Scaled Dot-Product Attention 里面都需要用到,而 Sequence Mask 只有在 Decoder 的 Self-Attention 里面用到。
1、padding mask:处理非定长序列,区分padding和非padding部分,如在RNN等模型和Attention机制中的应用等
2、sequence mask:防止标签泄露,如:Transformer decoder中的mask矩阵,BERT中的[Mask]位,XLNet中的mask矩阵等
所以, Scaled Dot-Product
Attention 的 forward 方法里面的参数 attn_mask 在不同的地方会有不同的含义。
什么是 Padding Mask 呢?
在NLP中,文本一般是不定长的,所以在进行 batch训练之前,要先进行长度的统一,过长的句子可以通过truncating 截断到固定的长度,过短的句子可以通过 padding 增加到固定的长度,但是 padding 对应的字符只是为了统一长度,并没有实际的价值,因此希望在之后的计算中屏蔽它们,这时候就需要 Mask。
Sequence Mask 是为了使得 Decoder 不能看见未来的信息。也就是对于一个序列,在 time_step 为 t 的时刻,我们的解码输出应该只能依赖于 t 时刻之前的输出,而不能依赖 t 之后的输出。因此我们需要想一个办法,把 t 之后的信息给隐藏起来。
9.自回归和自编码
1.自回归语言模型(Autoregressive LM)
在ELMO/BERT出来之前的语言模型其实是根据上文内容预测下一个可能跟随的单词,就是常说的自左向右的语言模型任务,或者反过来也行,就是根据下文预测前面的单词,这种类型的LM被称为自回归语言模型
GPT,ELMO是自回归语言模型。ELMO是两个自回归语言模型的拼接,本质上仍然是自回归语言模型
3自回归语言模型的优缺点
优点:生成类NLP任务,比如文本摘要,机器翻译等,在实际生成内容的时候,就是从左向右的,自回归语言模型天然匹配这个过程。而Bert这种DAE模式,在生成类NLP任务中,就面临训练过程和应用过程不一致的问题,导致生成类的NLP任务到目前为止都做不太好。
缺点:只能利用上文或者下文的信息,不能同时利用上文和下文的信息
2.自编码语言模型(Autoencoder LM)
1.定义
Bert通过在输入X中随机Mask掉一部分单词,然后预训练过程的主要任务之一是根据上下文单词来预测这些被Mask掉的单词。那些被Mask掉的单词就是在输入侧加入的所谓噪音。类似Bert这种预训练模式,被称为DAE LM (Denoising Autoencoding)。
2.优点
它能比较自然地融入双向语言模型,同时看到被预测单词的上文和下文
3.缺点
在输入侧引入[Mask]标记,导致预训练阶段和Fine-tuning阶段不一致的问题
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!