循环神经网络RNN:对于序列模型的神经网络
1.回顾:潜变量自回归模型
使用潜变量ht总结过去的信息
①xt跟当前的ht和x(t-1)相关
②ht跟ht-1和xt-1相关
③n元语法模型中,单词xt在时间t的条件概率取决于前面n-1个单词
隐藏层和隐藏状态的区别是什么
①隐藏层是输入到输出的路径上(观测角度)隐藏的层
②隐藏状态是给定步骤所做的任何事情(技术角度)的输入,这些状态只能通过先前的时间步的数据计算
2.循环神经网络:具有隐状态的神经网络
假设有一个观察x和隐变量ht。根据ht输出ot
①t时刻的输出ot是根据ht输出的,ht是使用的是x(t-1)的内容
②计算损失的时候,比较ot和xt之间的损失
③xt是更新ht使得观察xt向后移动
④隐状态:捕获并保留序列直到当前时间步的历史信息
3.循环神经网络在三个相邻时间步的计算逻辑:
①拼接当前时间步t的输入xt和前一时间步t-1的隐状态H(t-1)
②将拼接的结果送入带有激活函数的全连接层
③全连接层的输出就是当前时间步t的隐状态Ht
循环神经网络与多层感知机的区别是多了一个时间轴,没有时间关系的话,循环神经网络会退化成MLP多层感知机。
①保存了前一个时间步的隐状态h(t-1)
②引入了一个新的权重参数Whh是前一个时间步的隐藏变量
4.循环神经网络如何更新
①ht是一个隐状态,Whx是隐藏层的权重
②Whh是前一个时间步的隐藏变量
③循环神经网络是在MLP的基础上加上Whh*h(t-1)使得能够前一时刻h(t-1)产生关联
④循环神经网络没有对x进行建模,所有的x之间的时序信息存储在潜变量h,Whh中
5.循环神经网络在语言模型的使用
①基于循环神经网络的字符级语言模型
Ⅰ语言模型的目标是 根据过去和当前的词元预测下一个词元,所有把原始序列移位一个词元作为标签
Ⅱ简化训练,使用的是字符级语言模型,将文本词元化为字符而不是单词
②训练步骤
输入序列“machine”
标签是“achine”
在训练过程中,对每个时间步的输出层的输出进行softmax操作,使用交叉熵损失计算模型输出和标签之间的误差
①O3通过隐藏层的隐状态循环计算,O3由文本序列’m’,’a’,’c’确定
②训练数据中输入文本序列的下一个字符是‘h’。第三个时间步的损失将取决于下一个字符的概率分布,而下一个字符是基于特征序列 “m”、“a”、“c” 和这个时间步的标签 “h” 生成的
6.困惑度:下一个词的候选数量
语言模型实际上是分类模型。假设字典大小是m,语言模型是m类的分类问题,每次预测下一个词的时候,实际上在预测下一个词的类别。
①衡量一个语言模型的好坏可以用平均交叉熵
N是序列长度,P是语言模型的预测概率,xt是真实词
②NLP使用困惑度exp(Π)来衡量,是平均每次可能选项,指数运算结果变大。
1表示完美,无穷大是最差情况
7.梯度剪裁
①迭代中计算这T个时间步上的梯度,在反向传播过程中产生为O(T)的矩阵乘法链,导致数值不稳定。一连串的矩阵相乘的话会导致结果要么很小,要么很大:如果结果很小的话可能会导致训练不动;如果结果很大的话,可能会发生梯度爆炸导致结果出错。
②梯度裁剪有效防止梯度爆炸
如果梯度长度超过θ,那么拖影回长度θ
① g是所有层的梯度全部放在向量g当中
②假设g的长度L太长导致超过θ,需要将长度L降回到θ
只要g的长度是正常的不需要做操作了,g长度超出范围就要裁剪到范围中,有效的避免梯度爆炸
8.应用
①一对一
也就是最简单的 MLP :给定一个样本,然后输出一个标签
一对多
②文本生成:给定一个词,然后生成一个一个的词
多对一
③文本分类:给定一个序列,在最后的时刻输出,得到具体的分类
多对多
问答、机器翻译:给定一个序列,先不输出,然后在序列输入完毕之后输出答案
Tag 生成:给定一个序列,然后输出每个词的 Tag ,比如输入一个句子,然后输出句子中每个词是名词、动词还是形容词等
【总结】
1、对隐藏状态使用循环计算的神经网络称为循环神经网络(RNN),循环神经网络的输出取决于当下输入和前一时间的隐变量
循环神经网络的隐藏状态可以捕获当前时间步序列的历史信息
隐变量是用来存储历史信息和下一个历史信息的转换规则,所以在拿到过去的输入和当前的隐藏状态就能够预测当前的输出
Whh 拥有一定的时序预测目的
2、应用到语言模型中时,循环神经网络根据当前词预测下一次时刻词根据当前的输入更新当前时刻的隐藏状态就能够预测下一个时刻的输出RNN 是一个隐变量模型,隐变量是一个向量
3、通常使用困惑度来衡量语言模型的好坏
取平均值,然后进行指数操作,就得到了困惑度
困惑度实际上衡量了语言模型对下一个词的预测所选取的候选词数量,这个候选词的数量越少越好
4、为了解决梯度爆炸的问题,RNN 一般是需要进行梯度裁剪的,这也是最简单的方法
5、循环神经网络模型的参数数量不会随着时间步的增加而增加
6、使用循环神经网络可以创建字符级语言模型