补充:
相比与 图片、视频
更多的数据是文本、语音
这些会有时间先后顺序
每个单词,用向量来表示
【5,1】 5个词或5句话 用1维向量表示
【5,100】 5个词或5句话 用100维向量表示
【5,1000】 5个词或5句话 用1000维向量表示
时间序列
维度太高
还有相近词的语义没有考虑
用cos
存取数据
batch每次送多少进行运算
传统的神经网络
RNN是可以利用之前的信息
比如
我出生在中国,所以我说____
RNN会结合前面的句子,预测出 “汉语”的可能性最大
序列模型类型
语音识别
情感分类
机器翻译
为什么在序列模型使用CNN等神经网络效果不好
- 序列数据前后之间是有很强的关联性
。如:曾经有一份真挚的感情,摆在我面前,我没有去_____? - 序列数据的输入输出长度不固定
循环神经网络RNN
循环(递归)神经网络(RNN)是神经网络的一种。RNN将状态在自身网络中循环传递,可以接受时间序列结构输入。
类型
一对一
一对多
多对一
多对多
同步多对多
基础RNN介绍
相比与 图片、视频
更多的数据是文本、语音
这些会有时间先后顺序
中间的代表隐藏层,会把前一个细胞或者单元的状态传递给后一个
所有 cell 的 U V W 参数共享,
这里有两个激活函数、两个偏置
每一个cell(圆圈)有两个输入,分别是 前一个cell 的状态和当前序列的输入x
每个cell:有两个输出,当前cell状态 和 cell的预测输出o
g1 一般用 tanh / relu
g2 一把用 sigmoid(一个输出时用) / softmax(多个输出时用)
意思是说
输出受到前面时刻的隐层状态的影响
就是
会兼顾 上下文
会兼顾 语义
会兼顾 先后顺序
序列生成案列
在一个序列中,会加 s 和 e ,视为整个序列的一部分
这里输入的词的表示方式
词的表示
- one_hot编码表示
- 建立一个所有词的词库,包含(开始和结束表示)
输出的表示 softmax
这里的含义就是
假设现在已经确定有 “我” 这个词了
那么下一个输出的概率就是一个条件概率
也就是已知 “我” 的条件下,预测出现 “昨天”的概率是多少,出现 “迟到” 的概率是多少…,出现 “了” 的概率是多少,也包括 出现本身 “我” 的概率
这些概率那个一个最大 ,即是下一个的输出
比如这里输出我,输出前一个 cell 的状态 ,最终得到 出现昨天的概率最大,所以得到的结果是昨天,这样一直下去
加入有3000个词,就会有3000个概率值
每一个时刻的输出是所有词的概率值的向量
使用 softmax 来产生计算概率
矩阵运算表示
m 代表词的个数
n 是一个手动指定的长度,通常用来指定某一个时刻 cell 的状态输出大小
交叉熵损失
对于神经网络 ,基本都要计算它的损失
总误差就是各个时刻词的误差之和
RNN 时间(时序)反向传播算法(BPTT)
RNN 有时间的概念
这里的U V W 是共享参数
梯度:参数调整
求不同参数导数的步骤
最后一个cell的ds:计算最后一个时刻交叉熵损失对于s_t的梯度,记忆交叉熵损失对于st ,V,by的导数
最后一个前面cell的ds:·求出当前层损失对于当前隐层状态输出值st的梯度+上一层相对于st的梯度
每一个cell 导数的计算过程
反向传播,梯度更新参数过程,不断的优化参数
这里是 softmax
梯度消失与梯度爆炸
RNN 总结
前项传播:主要是
- 两个输入,xt 和 st-1
- 两个输出,st 和 ot
反向传播,要优化参数
每一个cell 都是先求出st的偏导数,再求 其他参数
案例:手写RNN前项传播和反向传播
前向传播实现
单个cell的前向传播
保存当前cell的一些输入输出值,反向传播要使用
隐藏输出计算和cell的预测输出计算
代码
所有cell 的前项传播实现
有s0、x序列、参数
确定输出x序列的形状 m 个词, 1维 ,T个时刻
比如下图,X的形状 就是 5个词,编码后每个词为一个一维向量,6个时刻
完整代码
测试
x序列一共有3个词,每个词的形状都是3x1(编码后),时刻有4个,因为多加了一个s ,e,
其他参数维度是手动指定的
看这个图理解
每一次输出,都会出现这3个词的概率,选择概率最大的
反向传播代码
也同样分为单个和所有
所有就是通过循环直接调用单个
比如下面这个就是一个单个反向传播
按顺序,计算所有需要的导数,并保存
单个cell的反向传播
多个cell的反向传播
假设知道了所有时刻相对于损失的的ds梯度值
测试
这里ds是所有损失的的梯度值
1、每个cell的st由两部分组成
2、不同时刻,对于U,W,ba这些参数需要相加
完整代码实现
测试
那么接下来,我们看看RNN的一些改进结构,这里大家只要了解相关结构以及作用即可,不需要会公式的推
GRU
首先回顾一下RNN的前向传播结构
zt 和 rt 的共同作用都是为了让前面的记忆能保存更多的当前的cell
在RNN这种记忆不是太多
就是词太多,后面的传过去的已经几乎没有
所以为了增强这个记忆,设置了这两个参数
LSTM
三个输入,三个输出
一对一
多对一(情感分析、文本分类)
异步多对多(翻译)
同步的多对多(文本生成)
seq2seq与Attention机制
seq2seq