循环神经网络(RNN)
循环神经网络(RNN)
文章目录
- 循环神经网络(RNN)
- 注意!!!!!!!
- RNN模型的作用
- 为什么要使用RNN而不是用MLP?
- RNN输入与输出
- RNN模型
- 简单RNN模型
- LSTM(Long Short-Term Memory)长短期记忆模型
- GRU(Gated Recurrent Units)
- 参考视频
注意!!!!!!!
博主第一次发布的文章有点生疏,写得不够好,没有考虑到一些图片的大小以及一些小细节,本次文章主要是当成博主自己的心得笔记,如果能帮助到大家那更好,大伙嘴下留情啊!!!!!!!
在文章的最后有参考视频,小伙伴们如果还有疑惑可以看下面的参考视频,或许能对你有帮助!!!
RNN模型的作用
当序列数据需要考虑其本身的顺序性,比如天气、股票价格、语音等事件序列数据,RNN模型适合训练序列数据。
为什么要使用RNN而不是用MLP?
多层感知模型(Multilayer Perception Model)的短板在于:它输入端的神经元数量是预先设定的,每一个神经元都代表一个字或词,当在序列中增加输入信息的话(也就是加入新的字或词),模型就很难处理。
为什么难处理呢? 原因是每增加一个新的字或词,就相应的增加一个神经元,根据MLP结构,也就是全连接,会导致所有权重需要重新训练。
RNN模型则避免了这个问题,它在每期计算中会同时考虑当期输入值和前期状态值,并利用相同的模型架构循环下去。
RNN输入与输出
one to many
many to one
n to n
- n to m
RNN模型
简单RNN模型
- 符号定义:
H_{i-1}
: 上期状态期H{i}
: 当期状态值x_i
: 输入值tanh(w_x +w_hH_0 + b)
: 激活函数
- BPTT(Backpropagation Through Time)
同样的,BPTT也会导致梯度消失和梯度爆炸,因为tanh取值范围为(-1,1),因此就需要LSTM模型和GRU模型。
LSTM(Long Short-Term Memory)长短期记忆模型
- LSTM模型
- 可以看出有3个sigmoid函数和2个tanh函数:sigmoid函数的取值范围在(0,1),而tanh函数的取值范围为(-1,1),因此sigmoid函数可以作为闸门,用来控制信息流出的比例;而tanh函数能够控制信息的增减方向,并把值锁在-1到1的区间内。
三扇门
- 遗忘门(forget gate)
- 输入门(input gate)
- 输出门(output gate)
- 遗忘门
- 输入门
- 输出门
- 相比简单RNN模型,LSTM增加了记忆状态C这一元素。
SLTM原理
- 上期状态值Ct−1C_{t-1}Ct−1通过遗忘门过滤到本期的部分,加上本期新增的部分决定CtC_tCt
来到遗忘门:上期过滤的部分通过sigmoid函数的遗忘门来控制。
遗忘门的值为0时,意味着上期记忆完全遗忘。
遗忘门的值为1时,上期值记忆完全保留。
其公式为:ft=sigmoid(wf∗[Ht−1,xt])f_t = sigmoid(w_f*[H_{t-1},x_t])ft=sigmoid(wf∗[Ht−1,xt])
- 来到输入门:sigmoid控制信息流出的比例;tanh控制信息流出的方向,上期状态值的sigmoid函数和tanh函数两者相乘得到本期新增的记忆部分,它与前期记忆流入的部分相加,得到当期的记忆状态值。
- sigmoid公式为:it=sigmoid(wi∗[Ht−1,xt])i_t = sigmoid(w_i*[H_{t-1},x_t])it=sigmoid(wi∗[Ht−1,xt])
- tanh公式为:ut=tanh(wu∗[Ht−1,xt])u_t = tanh(w_u*[H_{t-1},x_t])ut=tanh(wu∗[Ht−1,xt])
- ==本期记忆状态值CtC_tCt==公式为:Ct=Ct−1∗ft+ut∗itC_t = C_{t-1}*f_t + u_t*i_tCt=Ct−1∗ft+ut∗it
- 其中ftf_tft表示的是遗忘门的sigmoid函数:ft=sigmoid(wf∗[Ht−1,xt])f_t = sigmoid(w_f*[H_{t-1},x_t])ft=sigmoid(wf∗[Ht−1,xt])
- ==本期记忆状态值CtC_tCt==公式为: Ct=Ct−1∗sigmoid(wf∗[Ht−1,xt])+tanh(wu∗[Ht−1,xt])∗sigmoid(wi∗[Ht−1,xt])C_t = C_{t-1}*sigmoid(w_f*[H_{t-1},x_t]) + tanh(w_u*[H_{t-1},x_t])*sigmoid(w_i*[H_{t-1},x_t])Ct=Ct−1∗sigmoid(wf∗[Ht−1,xt])+tanh(wu∗[Ht−1,xt])∗sigmoid(wi∗[Ht−1,xt])
最后来到输出门:输出门的sigmoid函数和当期记忆值CtC_tCt的tanH值相乘,得到本期的输出值HtH_tHt**, CtC_tCt和HtH_tHt会循环流入至T+1期,参与到下期的计算。
sigmoid函数:ot=sigmoid(wo∗[Ht−1,xt])o_t = sigmoid(w_o*[H_{t-1},x_t])ot=sigmoid(wo∗[Ht−1,xt])
==本期输出值HtH_tHt==公式为:Ht=ot∗tanh(ct)H_t = o_t*tanh(c_t)Ht=ot∗tanh(ct)
==本期输出值HtH_tHt==为: Ht=sigmoid(wo∗[Ht−1,xt])∗tanh(ct)H_t = sigmoid(w_o*[H_{t-1},x_t])*tanh(c_t)Ht=sigmoid(wo∗[Ht−1,xt])∗tanh(ct)
循环操作多次后,获得ypredicty_predictypredict值
- 公式为:Ypredict=Hk∗wyY_{predict} = H_k * w_yYpredict=Hk∗wy
(此图虽然是简单RNN模型,但LSTM的YpredictY_{predict}Ypredict的由来也是一样的)
- 为什么说LSTM模型能够有效缓解梯度消失和梯度爆炸的问题呢?
- 核心部分
- 该4部分相加之后的和要么>1,要么在0~1之间,ΔWΔWΔW由黄框前面和多个4部分相乘后获得。
- 该ΔWΔWΔW一般由0到1区间的数和>1的数多个混合相乘,从图可以看出该系统会变得更加稳定,不容易出现梯度消失和梯度爆炸的问题。
GRU(Gated Recurrent Units)
- GRU模型
GRU模型在计算当期状态值HtH_tHt时,同时考虑历史信息部分和新增信息部分
两扇门
- 更新门(updata gate)
- 重置门(reset gate)
- 更新门
更新门确定着上期状态能进入当期的比例ztz_tzt。
- 重置门
重置门决定了上期信息的遗忘比例rtr_trt。
GRU工作原理
- 来到更新门:上期状态能进入当期的比例ztz_tzt 由sigmoid(wu∗[Ht−1,xt])sigmoid(w_u*[H_{t-1},x_t])sigmoid(wu∗[Ht−1,xt])而来,它与上期状态值Ht−1H_{t-1}Ht−1 相乘,就得到了新状态中历史信息的部分。
- 来到重置门:上期信息的遗忘比例rtr_trt 由sigmoid(wu∗[Ht−1,xt])sigmoid(w_u*[H_{t-1},x_t])sigmoid(wu∗[Ht−1,xt])而来,它与上期状态值Ht−1H_{t-1}Ht−1相乘,并和当期输入信息部分相加,再通过tanH函数转化得到当前信息数据,当前信息数据和和对应比例==1−z1-z1−z相乘,得到新状态中新增信息的部分。
- 历史信息部分和新增信息部分相加,得到最终当期状态值。
参考视频
【数之道 09】揭开循环神经网络RNN模型的面纱_哔哩哔哩_bilibili
【循环神经网络】5分钟搞懂RNN,3D动画深入浅出_哔哩哔哩_bilibili
循环神经网络(RNN)相关推荐
- 深度学习 -- TensorFlow(9)循环神经网络RNN
目录 一.循环神经网络RNN介绍 二.Elman network && Jordan network 三.RNN的多种架构 1.一对一 2.多对一 3.多对多 4. 一对多 5.Seq ...
- 循环神经网络(RNN、LSTM、GRU)
循环神经网络(RNN.LSTM.GRU) 目录 循环神经网络(RNN.LSTM.GRU) 概述: 计算: LSTM(长短记忆模型): GRU:
- 「NLP」 深度学习NLP开篇-循环神经网络(RNN)
https://www.toutiao.com/a6714260714988503564/ 从这篇文章开始,有三AI-NLP专栏就要进入深度学习了.本文会介绍自然语言处理早期标志性的特征提取工具-循环 ...
- 深度学习~循环神经网络RNN, LSTM
目录 1. 循环神经网络RNN 1.1 RNN出现背景 1.2 RNN概念 2. LSTM 2.1 LSTM出现背景 2.2 LSTM结构 参考 1. 循环神经网络RNN 1.1 RNN出现背景 pr ...
- 循环神经网络(RNN, Recurrent Neural Networks)介绍
循环神经网络(RNN, Recurrent Neural Networks)介绍 循环神经网络(Recurrent Neural Networks,RNNs)已经在众多自然语言处理(Natural ...
- DL之RNN:循环神经网络RNN的简介、应用、经典案例之详细攻略
DL之RNN:循环神经网络RNN的简介.应用.经典案例之详细攻略 目录 循环神经网络RNN的简介 1.RNN的分类 1.RNN的常见算法分类 2.RNN的三种分类
- 【NLP】 深度学习NLP开篇-循环神经网络(RNN)
从这篇文章开始,有三AI-NLP专栏就要进入深度学习了.本文会介绍自然语言处理早期标志性的特征提取工具-循环神经网络(RNN).首先,会介绍RNN提出的由来:然后,详细介绍RNN的模型结构,前向传播和 ...
- Pytorch实现基本循环神经网络RNN (3)
1.47.Pytorch实现基本循环神经网络RNN (3) Recurrent Neural networks(Rumelhart, 1986)主要用来处理序列型数据,具有对以往数据的记忆功能.下图所 ...
- [Python人工智能] 十二.循环神经网络RNN和LSTM原理详解及TensorFlow编写RNN分类案例
从本专栏开始,作者正式开始研究Python深度学习.神经网络及人工智能相关知识.前一篇讲解了TensorFlow如何保存变量和神经网络参数,通过Saver保存神经网络,再通过Restore调用训练好的 ...
- 循环神经网络(RNN)相关知识
文章目录 RNN概述 前向传播公式 通过时间反向传播(BPTT) RNN确定序列长度方式 其他RNN结构 基于RNN的应用 1,序列数据的分析 2,序列数据的转换 3,序列数据的生成 RNN的不足 1 ...
最新文章
- [转载]极速狂飚 Windows 2003系统25招加速大法
- php改变图片大小png背景变黑,php – 当将透明背景的PNG图像调整大小/转换为JPEG时,如何用白色替换黑色背景...
- Linux驱动基础:MSM平台AP/CP通信机制
- 第一次参加数学建模竞赛如何夺取一等奖
- C# 加载C++的dll
- 安装 Android Studio 2.3 详细过程及错误解决
- 若依前后端不分离项目上传文件或图片不能显示出来?
- Q100:怎么用三角形网格细分回旋体(rotational sweeping / revolution)
- ansible笔记(4):常用模块之文件操作
- Java 输出通过 InetAddress 获得的 IP 地址数组
- [导入]一个Form验证的方案
- 汉王考勤机管理系统服务器,汉王考勤管理系统7
- 微信小程序后端Java接口开发与调试
- 计算机D盘无法读取,D盘目录或文件已损坏,无法读取解决方案
- 平安人寿打造新一代年金保险产品:御享财富和御享金瑞
- ajax怎么传递list类型参数到后端,ajax传递给后台数组参数方式
- 二级域名分发系统美化版网站源码 附搭建教程
- PSIFT:Pore Scale-invariant feature transform;毛孔尺度不变特征点
- python读取txt文件中的数字_python从txt文件读取数据
- Difficulties vanish when faced boldly.
热门文章
- elementUI里面upload组件上传图片时选择图片之后不显示图片的问题,
- 源码再现,SpringBoot 居然只有一个 IOC 容器
- lua 函数 默认值_简明lua教程
- 为 windows cmd 设置代理
- php调用pdf虚拟打印机,window_在Win7系统中怎么安装PDF彩色虚拟打印机?,前面说过,Word不能直接将文档 - phpStudy...
- Marked.js让您的文档编辑更加轻松自如!
- java怎么使用sni,启用SNI扩展的SSL握手 - 服务器上的证书选择
- MySQL(二) DDL、DML、DQL、DTL概述
- InvalidArgumentError (see above for traceback): Number of ways to split should evenly divide the spl
- 2015年工作总结——①名IT女的日常