RNN

补充:

RNN 结构详解

一文搞懂RNN(循环神经网络)基础篇


相比与 图片、视频

更多的数据是文本、语音

这些会有时间先后顺序
在这里插入图片描述
每个单词,用向量来表示

【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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值