神经网络通俗理解学习笔记(2)循环神经网络RNN

发布于:2024-09-18 ⋅ 阅读:(12) ⋅ 点赞:(0)

序列建模

序列数据-时间
不同时间上收集到的数据,描述现象随时间变化的情况

时间序列分析是指从时间排列的数据点中抽取有价值的总结和统计信息的行为,既包含对过去数据的诊断,也包含对未来数据的预测

序列数据-文本:
由一串有序的文本组成的序列

在这里插入图片描述
将文本分词,然后给每个词表示成向量

主要解决的问题:
自然语言理解·
文献分类
情感分类
问答系统

分词(tokenization)

序列数据-图像
有序图像组成的序列,后一帧图像可能会受前一帧的影响

序列模型
Sequence Model: 用于处理和预测序列数据的模型

最经典的序列模型——

自回归模型

在这里插入图片描述
因为是x预测x自己不是预测y,所以是自回归

隐变量自回归模型

在这里插入图片描述

文本数据预处理

主要流程
中文文本需要用分词算法来完成分词
英文文本需要拼写检查、词干提取词形还原
在这里插入图片描述

去除噪声(Text Clearning)

删除文本中不相关或者无用的信息,提高文本处理的效率
停用词:英文介词、代词、连词等,中文助词、量词、词等
在这里插入图片描述

词元化(Tokenization)

Tokenization:把输入的文本流,切分成一个个子串

在这里插入图片描述

去除停用词

文本中出现频率过高或者并不具有实际意义的词
在这里插入图片描述

在这里插入图片描述

标准化(Normalization)

词干提取(stemming):抽取词的词干或词根形式
词形还原(lemmatization):把任何形式语言词汇还原为一般形式
在这里插入图片描述

词表(Vocabulary)

将文本中出现的所有词汇组成列表
1.遍历数据集,统计词频
2.过滤高频词和低频词,保留中间频率词
3.为每个词分配一个编号,并建立词表

在这里插入图片描述
高频词和低频词意义不大,我们的目的是为了提取特征

特征提取-词袋模型

Bag of Words:根据词表中单词在句子中出现次数转化为向量
在这里插入图片描述
对于稀疏情况不适用
而且没考虑顺序

特征提取-N-gram模型

基于概率的判别式语言模型
在这里插入图片描述

特征提取-词嵌入(常用)

将词表示成实数向量,可以捕捉词和词之间的语义和语法的关系,使得词之间可以通过数学方式进行比较和运算
Word Embedding 通过预测上下文的词学习词向量
word2vec
GloVe 统计词之间的共性关系
在这里插入图片描述

可以使用小规模数据集训练词向量模型
也可用于解决语义相似性问题和文本分类问题

实际经常组合不同方法
文本分类中通常用词嵌入表示文本特征,再用N-gram模型捕捉语序的特征

循环神经网络

神经网络可以看作拟合任何函数的黑盒子

基本思想
全连接网络结构上就没有顺序相关的这种处理模块

展开计算图
计算图是形式化一组计算结构的形式
展开(unfolding)计算图导致深度网络结构中的参数共享

在这里插入图片描述

网络结构

在隐藏层之间构建了循环层

在这里插入图片描述
网络结构
隐藏层间连接形成循环神经网络,模型由此具备了记忆能力

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

网络结构变体

在这里插入图片描述

Teacher Forcing

在这里插入图片描述
在这里插入图片描述

随时间反向传播

BPTT算法
Backpropagation Through Time将序列数据的每个时间步看作一层,然后在每个时间步上使
用标准BP算法来计算梯度。
递归计算梯度
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

每个隐变量都有来自后续时刻和当前时刻 输出2个方面的损失求和
有了参数梯度,就可以根据梯度下降法或其各种变体来进行迭代更新,求权重参数

在这里插入图片描述
每一个参数都要把各个时间步骤传过来损失的梯度进行累加
这个过程是一起进行,没办法做到时间的解耦
这也是经典循环神经网络相对难训练的原因

循环神经网络代码实现

时间序列数据预测

一半神经网络模型预测

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

序列数据预处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
模型训练

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
模型越策
在这里插入图片描述
在这里插入图片描述

RNN模型预测

RNN模型结构
在这里插入图片描述

数据预处理
在这里插入图片描述
lable从向量变成二维矩阵
在这里插入图片描述
在这里插入图片描述

构建RNN模型

在这里插入图片描述
在这里插入图片描述

训练

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

RNN的长期依赖问题

什么是长期依赖
当前系统的状态,可能依赖很长时间之前系统状态

在这里插入图片描述
长期记忆失效原因
权重矩阵连乘
在这里插入图片描述
当w小于1的时候,指数级衰减,h0几乎被遗忘
当大于1的时候,指数级爆炸

初始条件很小变化会导致结果不成比例严重变化,对于我们想训练一个稳定的模型不符合的

本质也是深层网络级联导致

拟改进策略:

#改激活函数
RNN中可以用ReLU函数,但不能解决梯度消失、爆炸问题
对矩阵W的初始值敏感,十分容易引发数值问题

只要w不是单位矩阵,依然会出现w的t次方的情况,和是什么样的激活函数没关系
这里和全连接神经网络梯度爆炸不同

RNN 对W权重系数矩阵初始值很敏感
RNN 不同隐层间共用相同的权值矩阵

#截断时间步
TBPTT算法:Truncated Back Propagation Through Time
依赖一个时间窗口
在这里插入图片描述

深度循环神经网络 Deep RNN

基本思想
能捕捉数据中更复杂模式并更好地处理长期依赖关系
深度分层模型比浅层模型更有效率
Deep RNN比传统RNN表征能力更强
如何引入深层结构?

三种深层方式

在这里插入图片描述

DT-RNN

在这里插入图片描述

DT(s)-RNN

在这里插入图片描述

DOT-RNN

在这里插入图片描述

Stacked RNN

在这里插入图片描述

模型比较

在这里插入图片描述
增加多个浅变换结构的隐藏层
实现对复杂特征更有效的捕捉和处理

在这里插入图片描述

双向循环神经网络 1997

单向RNN的局限:

  • 多数RNN只有一个因果结构
  • 许多应用中,输出预测可能依赖整个输入序列
  • 往往需要捕捉序列中上下文之间的关系

双向网络结构

  • 两个互相叠加的RNN
  • 输出不仅取决于先前,还取决于未来

在这里插入图片描述

在这里插入图片描述

两遍运算
翻转输入,训练过程

在这里插入图片描述
主要特点分析
使用来自序列两端的信息来估计输出
前向传播需要在双向层中进行,反向传播依赖前向传播结果
计算速度慢,梯度求解链很长,训练代价高
主要用于序列编码和双向上下文观测统计
效果有限

门控循环单元 GRU

Gated Recurrent Unit
与LSTM的区别
1.将LSTM原来的三个门简化成为两个:重置门和更新门
2.不保留单元状态,只保留隐藏状态作为单元输出
3.重置门直接作用于前一时刻的隐藏状态

在这里插入图片描述

基本原理
引入了两种“门”来控制信息的流动,即重置门(reset gate)和更新门(update gate)

在这里插入图片描述
重置门(Reset Gate)
用来决定从上一时刻的隐藏状态中“复制”多少信息

在这里插入图片描述

更新门
用来决定从上一时刻的隐藏状态中“更新”多少信息

在这里插入图片描述
候选隐状态
用来计算当前时刻的隐藏状态

在这里插入图片描述

隐状态
模型在处理序列数据时记录的当前时刻之前的信息

在这里插入图片描述
GRU 记录了序列中上下文的信息,帮助模型更好处理序列数据
隐藏状态第一个作用记录上下文信息帮助模型更好处理序列数据,第二个控制序列流动解决梯度消失和梯度爆炸问题提高模型效率

计算步骤
GRU 的计算过程分为四个步骤:
在这里插入图片描述

长短期记忆网络

Long-Short Term Memory

RNN的问题:

  • 处理长序列数据时会有梯度消失或爆炸的问题
  • RNN的计算效率相对较低
  • 长时间以前的记忆基本对现在没有什么影响了

在这里插入图片描述

基本思想
保留较长序列数据中重要信息,忽略不重要信息

RNN都有重复链式结构
标准RNN结构简单
LSTM链式结构特殊

在这里插入图片描述
在这里插入图片描述

门控记忆单元
门(gate)控制记忆单元,信息可以沿着这个链条传送

RNN只有底下一个链条,对短期输入很敏感
现在人为加入状态C,来保存长期记忆

怎么控制这种长期状态呢
t-1时刻传入的状态Ct-1要决定有多少信息要保留
t-1时刻传入的状态Ct-1有多少需要传递到t+1时刻
当前时刻的隐层输出ht又是什么

在这里插入图片描述

LSTM专门设计这种门控结构来控制信息的保留和丢弃
具体包括3个门:输入门、遗忘门、输出门

下面这条链好比短期记忆
上面这条好比日记本,保存长期记忆

决定去除哪些信息
遗忘门
在这里插入图片描述
0-1之间的数,越接近0代表去除,越接近1代表保留

输入门
决定什么新的信息将被保留下来
在这里插入图片描述

输入门和候选记忆单元联合更新状态
在这里插入图片描述

输出门
用于控制记忆细胞更新时所使用的输入信息

在这里插入图片描述
相当于用日记更新当前的短期记忆
同时保持长短期记忆,并且互相更新

某种程度上模拟大脑关注重要片段,忽略无关信息,极大拓展其应用

复杂循环神经网络代码实现

进阶循环神经网络
DRNN–更深的网络结构
BRNN-双向的训练方向
LSTM-梗直哥更强的记忆能力
GRU-更简洁而高效

模型定义

在这里插入图片描述
在这里插入图片描述
输入输出维度16,隐藏层大小64

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
相比前面少了64,因为少了个门

模型实验

美国道琼斯股价波动数据库
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

默认使用Tanh激活函数,收盘价Close数据非常大,很容易导致模型出现梯度消失或者梯度爆炸

可以修改激活函数解决

在这里插入图片描述

在这里插入图片描述

或者对数据归一化也可以进行解决 可以提高收敛速度
在这里插入图片描述

效果还是不行,再把学习率改小
在这里插入图片描述
在这里插入图片描述
损失函数正常了

在这里插入图片描述
拟合归一化后的数据

效果对比

在这里插入图片描述
在这里插入图片描述

看的绝对值,所以BRNN效果最好

编码器-解码器网络

基本思想
编码器-解码器模型:将输入数据转化成另外一种输出数据

基本思想
编码器-解码器模型:将输入数据转化成另外一种输出数据
应用广泛:机器翻译、自动摘要、文字图像自动生成

序列到序列学习
Sequence to Sequence Learning:两个循环神经网络组成

在这里插入图片描述

输入输出长度不一样 标准RNN不好处理

历史巧合
2014年两个团队几乎同时提出·
编码器-解码器、序列到序列·
本质都是两个RNN

在这里插入图片描述

编码器
把不定长的输入序列变换成定长的上下文变量

在这里插入图片描述

解码器
通过将上下文变量c中的信息解码生成输出序列

在这里插入图片描述

在这里插入图片描述

模型训练
最大似然估计
在这里插入图片描述

Seq2seq模型代码实现

模型架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

序列到序列模型简单实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模型架构

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模型训练

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模型验证

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
因为测试集包含错误,所以结果错误挺多,如果用干净测试集效果会好点

束搜索算法

在这里插入图片描述

模型的输出是一个个时间步依次获得
前面的结果还会影响后面的结果
每个输出都是基于历史生成结果的条件概率
当基数大的时候,考虑遍历多个时间步构成的整个生成空间是不现实的
在这里插入图片描述

最容易想到的策略
贪心搜索
从词汇表V中获取条件概率最高的标记

每个实践步都选当前条件概率最大的输出
再将开始到当前步的结果作为输入去获得下一个时间步的输出,直到模型给出生成结束的标志

在这里插入图片描述
在这里插入图片描述

束搜索(对贪心搜索改进)
保留多种可能序列Beam Search:

在每个时间,不在仅保留概率最高的一个输出
而是保留beam size 多个
当为1 的时候 就退化为贪心搜索
在这里插入图片描述
在这里插入图片描述

很多情况下束搜索比贪心搜索更好

连乘可能到0溢出

改进策略
对长序列,使用log运算并增加惩罚系数

在这里插入图片描述
优点
高效:能同时生成多个序列·
质量高:只考虑序列中最可能元素
多样化:跟踪多个序列,而不是一个

缺点
速度慢:能同时生成多个序列
内存要求:大规模序列下有问题·
仅确定性模型可用

序列到序列最典型应用就是机器翻译

机器翻译代码实现

数据集下载

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
pad填充 因为输入要长度相等
unk未知字符 词表有限 对没见过token都用这个替代

在这里插入图片描述
在这里插入图片描述
序列超过48 要截断,不足要填充

在这里插入图片描述

模型训练

在这里插入图片描述
传入padding 标记,pad就不会参与计算梯度
在这里插入图片描述
在这里插入图片描述

模型训练

在这里插入图片描述
ignore 让pad不计算损失

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

模型保存

在这里插入图片描述

几个epoch保存一下
一来避免中间前功尽弃,二来避免训练到最后前功尽弃

模型评估

Bleu
Bilingual Evaluation Understudy
《BLEU: a Method for Automatic Evaluation of Machine Translation》

优点
计算速度快
原理容易理解
任意语言通用

实际就是计算2个句子相似程度
评价翻译质量

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
还有很大提升空间

在这里插入图片描述