深度学习——循环神经网络RNN(笔记)
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
循环神经网络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之间的时序信息存储在潜变量hWhh中
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个时间步上的梯度在反向传播过程中产生为OT的矩阵乘法链导致数值不稳定。一连串的矩阵相乘的话会导致结果要么很小要么很大如果结果很小的话可能会导致训练不动如果结果很大的话可能会发生梯度爆炸导致结果出错。
②梯度裁剪有效防止梯度爆炸
如果梯度长度超过θ那么拖影回长度θ
① g是所有层的梯度全部放在向量g当中
②假设g的长度L太长导致超过θ需要将长度L降回到θ
只要g的长度是正常的不需要做操作了g长度超出范围就要裁剪到范围中有效的避免梯度爆炸
8.应用
①一对一
也就是最简单的 MLP 给定一个样本然后输出一个标签
一对多
②文本生成给定一个词然后生成一个一个的词
多对一
③文本分类给定一个序列在最后的时刻输出得到具体的分类
多对多
问答、机器翻译给定一个序列先不输出然后在序列输入完毕之后输出答案
Tag 生成给定一个序列然后输出每个词的 Tag 比如输入一个句子然后输出句子中每个词是名词、动词还是形容词等
【总结】
1、对隐藏状态使用循环计算的神经网络称为循环神经网络RNN循环神经网络的输出取决于当下输入和前一时间的隐变量
循环神经网络的隐藏状态可以捕获当前时间步序列的历史信息
隐变量是用来存储历史信息和下一个历史信息的转换规则所以在拿到过去的输入和当前的隐藏状态就能够预测当前的输出
Whh 拥有一定的时序预测目的
2、应用到语言模型中时循环神经网络根据当前词预测下一次时刻词根据当前的输入更新当前时刻的隐藏状态就能够预测下一个时刻的输出RNN 是一个隐变量模型隐变量是一个向量
3、通常使用困惑度来衡量语言模型的好坏
取平均值然后进行指数操作就得到了困惑度
困惑度实际上衡量了语言模型对下一个词的预测所选取的候选词数量这个候选词的数量越少越好
4、为了解决梯度爆炸的问题RNN 一般是需要进行梯度裁剪的这也是最简单的方法
5、循环神经网络模型的参数数量不会随着时间步的增加而增加
6、使用循环神经网络可以创建字符级语言模型