目录:
1.序列数据
2.语言模型
3.RNN(循环神经网络,对语言模型的建模,隐藏状态实现参数共享,由于梯度问题以及长期依赖引出)
4.LSTM(引入cell状态,遗忘门,输入门,输出门(用于得到候选cell状态))
5.GRU(简化LSTM的门,重置门(用于得到候选隐藏状态),更新门)
6.语言模型评价指标
7.堆叠网络以及Seq2seq的decoder的argmax
序列数据
前后数据之间具有关联性
单词是基本的元素,观察得到第三个元素依赖于第一个元素,然后前一个元素的出现影响后面的元素(不同应用,语音识别,机器翻译,文本生成,命名实体识别)
语言模型
建立一个模型,得到一个概率,例如上面的句子有8个元素,也就是得到一个这个8个元素组成的联合概率
语言模型总结就是:1.给一段文本分配概率 2.对当前文本预测下一个阶段文本的概率问题
n-Gram的统计语言模型
收集n-gram窗口在文本库中出现频率的统计数据,同使用这些数据构建模型预测下一个单词的概率
核心:n-gram的概率应正比于其出现的频率,并且假设 P(x(t+1))仅仅依赖于它之前的n-1个单词(马尔可夫假设)
count是通过处理大量文本对相应的n-gram出现次数计数得到的
n-gram统计语言模型的局限性
问题:
- 稀疏性,当我们预测的样本分子分母都没有在训练样本中出现过,那么就出现概率为0或者是其他情况
解决:分子通过拉普拉斯平滑,加入额外的参数 分母则是元组回退(如果n元组没有当前文本就退化n-1元组) - 必须存储所有的n-gram对应的计数,随着n的增大,模型存储量也会增大
这些限制了n的大小,但如果n过小,则我们无法体现稍微远一些的词语对当前词语的影响,这会极大的限制处理语言问题中很多需要依赖相对长程的上文来推测当前单词的任务的能力,如果n较大,那么稀疏性例如分子分母的问题就会出现,包括参数存储量问题
神经网络语言模型
DNN模型(全连接),基于固定窗口
解决了统计语言模型中:稀疏性和需要存储n元组的问题
问题:
1.固定窗口很小
2.如果扩大窗口,带来的W(参数矩阵)也会很大
3.没有任何可共享的参数(每个单词乘以的是不同的权重)导致模型不会共享单词位置的信息,也就是语义信息,词序在nlp中是重要的特征
具有分布式表示的特点
问题:没有解决并且是有限制当有更多的上下文去预测接下来的概率
循环神经网络
由于语言模型中随着t增长带来的计算量,所以利用神经网络这个工具来解决上面的问题
RNN
输入输出,U和W是权重,h是隐藏状态,h的输入有两个,一个是x,另外一个是上一个时间步的h,
U V W 等权重是循环使用的,
O的计算 是 h乘以W h的计算是 输入 和 上一个时间步的结果计算
循环使用权重矩阵(共享,当前的权重矩阵存储了前面的序列信息),提出了 hidden state,并且核心:重复的使用权重矩阵实现参数共享(所有矩阵,包括输入的权重,隐藏的权重,输出的权重) 窗口也没有了限制
流程: 首先是通过词嵌入得到词向量(et = Ext),有一个初始的隐藏状态和权重矩阵,每时刻的隐藏状态计算 ht =σ (Whh*ht-1+Whx*et+b1),隐藏状态的输出进行概率分布计算(yt = softmax(U * yht+b2))
训练rnn的语言模型:对于输入计算每一个时间步下的输出分布
损失函数:对于所有时间步下的真实值和预测值之间的交叉熵(元素表示为向量,所以对于每一维计算交叉熵,真实标记的和为1)的平均值
在计算梯度的时候,是按照分割的文本长度进行更新的,例如SGD更新是每次利用一个样本进行更新,在此处计算损失的时候是a batch的句子例如32个句子
对于Wh的反向梯度,是求和但是每一个部分涉及到累乘
**在前向传播中 ht =σ (Whhht-1+Whxet+b1)对Wht反向求导为:
对ht-1求导再乘以ht-1对Wht-1求导
利用多层感知机的前向传播 对比RNN的计算 观察是怎样进行的
以上明白了RNN的前向传播过程,参数的重复利用的
反向传播的计算(通过计算图的表达,找通路,有几个通路就有几个计算)
关注在对h求导时候的Whh是一个指数(原因是 在RNN中 隐藏状态的不断传递)
这个权重可能会引发 神经网络 的梯度消失 或者 爆炸
在对权重Whx,Whh求导的时候,利用对h的求导的便利性求解,
RNN的梯度消失和梯度爆炸问题

梯度爆炸引发的问题是在梯度更新是步长太大,容易走入局部极值点
解决:通过梯度裁剪
在网络中灵活的保存信息
RNN的优缺
优:1. 可以处理任意长度文本
2. 时间步t的计算可以利用前面时刻的信息
3. 模型大小不会随着文本增加而变大
4. 每一时刻都采用相同的权重矩阵,有效的进行了参数共享
缺:
1.由于需要顺序计算而不是并行计算,RNN计算较慢(需要等待前面时刻的计算)
2. 在实际中,处理不了较长时间步的信息(也就是随着由于梯度消失等问题距离较远的早期历史信息难以捕捉)
长短期记忆网络(LSTM)
对于梯度消失问题呢?其基本思路是我们设置一些存储单元来更有效的进行长程信息的存储(不能直接解决梯度消失,就多一些单元实现信息保存)
结构:在每一个时间步,有一个隐藏状态h和cell状态c
- 两者向量长度都是n
- cell存储的是长期的信息
- lstm可以对cell实现读取,擦除,并且写入信息: 对应的功能由3个门实现: 1. 每个门的向量长度是n 2. 在每个时间步,每个门状态可是open(1),closed(0),也可以是两者都可以经历 3. 门是动态的:值的计算基于循环的内容
极端情况是forget gate值为1,则之前的memory cell的全部信息都会传递下去,使得梯度消失问题不复存在。output gate决定了memory cell 中有多少信息需要保存在hidden state中。
候选记忆细胞的计算 和 GRU的候选隐藏状态(GRU里面的计算是用到了重置门计算)计算类似
输入权重+上一时间步的隐藏状态权重+偏置
记忆信息使用Tanh 门控使用S型
当前的记忆细胞是由 遗忘门+上一时间步的记忆细胞信息 和 输入门+当前的候选记忆细胞
遗忘门可以选择性的保留记忆细胞的信息,输入控制候选记忆细胞信息的流入
隐藏状态的计算 则是由 输出门和当前得到的记忆细胞计算得到
LSTM中 记忆细胞 类比于 RNN中的隐藏状态 传递历史信息
上一时间步的隐藏状态作用是和输入分别权重计算得到当前的候选记忆细胞
遗忘门和输入门的作用是分别和上一时间步的记忆细胞,当前候选记忆细胞计算得到当前记忆细胞
输出门的作用是利用当前的记忆细胞计算当前隐藏状态
双向RNN(不同的权重)

- 双向RNN仅仅适用于如果是要访问全部的输入(因为在单向的rnn中是当前状态获取到了上文,但是例如在情感分析的例子中,下文对上文也有影响)Bert就是双向Transformer的Encoder
- 不适用于语言模型,因为LM仅需要前文的信息
语言模型的评估-困惑度
(语言模型)逆概率(1/p)的几何平均值(1/T) 越低越好
RNN的其他作用,不只是语言模型
情感分类(最后隐藏状态表示整个句子的编码,也就是语义信息输出分类)
GRU
候选隐藏状态的计算
重置门用来逐元素相乘上一个状态
GRU的隐藏状态计算
重置门用来计算 候选隐藏状态, 更新们用来计算当前的隐藏状态
隐藏状态的激活函数sigmoid,值阈调整为 [0,1]
候选隐藏状态的 tanh激活函数
重置门是计算候选隐藏状态中对上一时间步隐藏状态选择遗忘哪些信息
更新门是利用上一时间步隐藏状态和当前候选隐藏状态计算得到当前时间步隐藏状态
机器翻译
SMT:Statistical Machine Translation
左面是翻译模型,给定并行的句子对学习的模型
右面是语言模型(生成模型)
变量a并不是显性的,求解的方法可以通过EM算法
除了翻译模型,语言模型还有其他许多的特征工程
Neural Machine Translation(NMT)
它依赖于Sequence-to-Sequence的模型架构,以及进一步将其改善的Attention机制
输出和输入序列不再需要满足长度相同的条件
encoder编码,decoder是解码的条件语言模型受到源语言的限制
(一维)低阶特征是词语的词性等,(堆叠层)高阶特征则是语义(整体结构或者是短语表示正面还是负面信息)信息
Greeding Decoding 贪婪解码
在decoder中argmax获得下一个词的概率,但是每次只获得一个,有时候会偏离预期的结果(在每一步挑选最可能的词)
问题:不能回撤决定
Beam search是一种启发式搜索算法
NMT的优点:
- 更好的表现(例如翻译的准确度)(产生的句子流畅,对上下文的更高的利用(利用条件语言模型以及长编码器对内容的利用),语义相似度的利用)
- 单一的神经网络可以优化为端到端的模型(不需要NMT一样需要许多的组件去调整)
- 需要更少的人工(特征工程,对于不同的句子对的处理方式是相同的)
NMT的缺点: - 缺少可解释性(很难去调试)
- 比较难控制
机器翻译的评价指标: