RNN,LSTM,GRU基本原理的个人理解
记录一下对RNN,LSTM,GRU基本原理(正向过程以及简单的反向过程)的个人理解
RNN
Recurrent Neural Networks,循环神经网络
(注意区别于recursive neural network,递归神经网络)
为了解决DNN存在着无法对时间序列上的变化进行建模的问题(如自然语言处理、语音识别、手写体识别),出现的另一种神经网络结构——循环神经网络RNN。
RNN结构
第tt层神经元的输入,除了其自身的输入xtxt,还包括上一层神经元的隐含层输出st−1st−1
每一层的参数U,W,V都是共享的
每一层并不一定都得有输入和输出,如对句子进行情感分析是多到一,文本翻译多到多,图片描述一到多
数学描述
(以下开始符号统一)
回忆一下单隐含层的前馈神经网络
输入为X∈Rn×xX∈Rn×x(n个维度为x的向量)
隐含层输出为
H=ϕ(XWxh+bh)
H=ϕ(XWxh+bh)
输出层输入H∈Rn×hH∈Rn×h
输出为
Y^=softmax(HWhy+by)
Y^=softmax(HWhy+by)
现在对XX、HH、YY都加上时序下标
同时引入一个新权重Whh∈Rh×hWhh∈Rh×h
得到RNN表达式
Ht=ϕ(XtWxh+Ht−1Whh+bh)
Ht=ϕ(XtWxh+Ht−1Whh+bh)
Y^t=softmax(HtWhy+by)
Y^t=softmax(HtWhy+by)
H0H0通常置零
深层RNN和双向RNN
通过时间反向传播和随之带来的问题
输入为xt∈Rxxt∈Rx
不考虑偏置
隐含层变量为
ht=ϕ(Whxxt+Whhht−1)
ht=ϕ(Whxxt+Whhht−1)
输出层变量为
ot=Wyhht
ot=Wyhht
则损失函数为
L=1T∑t=1Tℓ(ot,yt)
L=1T∑t=1Tℓ(ot,yt)
以一个三层为例
三个参数更新公式为
Whx=Whx−η∂L∂Whx
Whx=Whx−η∂L∂Whx
Whh=Whh−η∂L∂Whh
Whh=Whh−η∂L∂Whh
Wyh=Wyh−η∂L∂Wyh
Wyh=Wyh−η∂L∂Wyh
明显的
∂L∂ot=∂ℓ(ot,yt)T⋅∂ot
∂L∂ot=∂ℓ(ot,yt)T⋅∂ot
根据链式法则
∂L∂Wyh=∑t=1Tprod(∂L∂ot,∂ot∂Wyh)=∑t=1T∂L∂oth⊤t
∂L∂Wyh=∑t=1Tprod(∂L∂ot,∂ot∂Wyh)=∑t=1T∂L∂otht⊤
先计算目标函数有关最终时刻隐含层变量的梯度
∂L∂hT=prod(∂L∂oT,∂oT∂hT)=W⊤yh∂L∂oT
∂L∂hT=prod(∂L∂oT,∂oT∂hT)=Wyh⊤∂L∂oT
假设ϕ(x)=xϕ(x)=x(RNN中用激活函数relu还是tanh众说纷纭,有点玄学)
∂L∂ht=prod(∂L∂ht+1,∂ht+1∂ht)+prod(∂L∂ot,∂ot∂ht)=W⊤hh∂L∂ht+1+W⊤yh∂L∂ot
∂L∂ht=prod(∂L∂ht+1,∂ht+1∂ht)+prod(∂L∂ot,∂ot∂ht)=Whh⊤∂L∂ht+1+Wyh⊤∂L∂ot
通项为
∂L∂ht=∑i=tT(W⊤hh)T−iW⊤yh∂L∂oT+t−i
∂L∂ht=∑i=tT(Whh⊤)T−iWyh⊤∂L∂oT+t−i
注意上式,当每个时序训练数据样本的时序长度T较大或者时刻t较小,目标函数有关隐含层变量梯度较容易出现衰减和爆炸
∂L∂Whx=∑t=1Tprod(∂L∂ht,∂ht∂Whx)=∑t=1T∂L∂htx⊤t
∂L∂Whx=∑t=1Tprod(∂L∂ht,∂ht∂Whx)=∑t=1T∂L∂htxt⊤
∂L∂Whh=∑t=1Tprod(∂L∂ht,∂ht∂Whh)=∑t=1T∂L∂hth⊤t−1
∂L∂Whh=∑t=1Tprod(∂L∂ht,∂ht∂Whh)=∑t=1T∂L∂htht−1⊤
梯度裁剪
为了应对梯度爆炸,一个常用的做法是如果梯度特别大,那么就投影到一个比较小的尺度上。θθ为设定的裁剪“阈值”,为标量,若梯度的范数大于此阈值,将梯度缩小,若梯度的范数小于此阈值,梯度不变
g=min(θ∥g∥,1)g
g=min(θ‖g‖,1)g
LSTM
RNN的隐含层变量梯度可能会出现衰减或爆炸。虽然梯度裁剪可以应对梯度爆炸,但无法解决梯度衰减。因此,给定一个时间序列,例如文本序列,循环神经网络在实际中其实较难捕捉两个时刻距离较大的文本元素(字或词)之间的依赖关系。
LSTM(long short-term memory)由Hochreiter和Schmidhuber在1997年被提出。
LSTM结构
这里两张图先不用细看,先着重记住公式后再回来看
数学描述
(同上,符号统一)
设隐含状态长度hh,tt时刻输入Xt∈Rn×xXt∈Rn×x(xx维)及t−1t−1时刻隐含状态Ht−1∈Rn×hHt−1∈Rn×h,
输入门,遗忘门,输出门,候选细胞如下
It=σ(XtWxi+Ht−1Whi+bi)
It=σ(XtWxi+Ht−1Whi+bi)
Ft=σ(XtWxf+Ht−1Whf+bf)
Ft=σ(XtWxf+Ht−1Whf+bf)
Ot=σ(XtWxo+Ht−1Who+bo)
Ot=σ(XtWxo+Ht−1Who+bo)
C~t=tanh(XtWxc+Ht−1Whc+bc)
C~t=tanh(XtWxc+Ht−1Whc+bc)
(思考侯选细胞激活函数的不同)
记忆细胞
Ct=Ft⊙Ct−1+It⊙C~t
Ct=Ft⊙Ct−1+It⊙C~t
想象,如果遗忘门一直近似1且输入门一直近似0,过去的细胞将一直通过时间保存并传递至当前时刻
隐含状态
Ht=Ot⊙tanh(Ct)
Ht=Ot⊙tanh(Ct)
输出同RNN
Y^=softmax(HWhy+by)
Y^=softmax(HWhy+by)
GRU
由Cho、van Merrienboer、 Bahdanau和Bengio在2014年提出,比LSTM少一个门控,实验结果却相当
GRU结构
数学描述
设隐含状态长度hh,tt时刻输入Xt∈Rn×xXt∈Rn×x(xx维)及t−1t−1时刻隐含状态Ht−1∈Rn×hHt−1∈Rn×h,
重置门,更新门如下
Rt=σ(XtWxr+Ht−1Whr+br)
Rt=σ(XtWxr+Ht−1Whr+br)
Zt=σ(XtWxz+Ht−1Whz+bz)
Zt=σ(XtWxz+Ht−1Whz+bz)
候选隐含状态
H~t=tanh(XtWxh+Rt⊙Ht−1Whh+bh)
H~t=tanh(XtWxh+Rt⊙Ht−1Whh+bh)
隐含状态
Ht=Zt⊙Ht−1+(1−Zt)⊙H~t
Ht=Zt⊙Ht−1+(1−Zt)⊙H~t
输出
Y^=softmax(HWhy+by)
Y^=softmax(HWhy+by)
(无力吐槽csdn了,预览和实际用的不一套渲染,公式丑死)
---------------------
作者:lily_knight
来源:CSDN
原文:https://blog.csdn.net/qq_38210185/article/details/79376053
版权声明:本文为博主原创文章,转载请附上博文链接!
RNN,LSTM,GRU基本原理的个人理解的更多相关文章
- 深度学习中的序列模型演变及学习笔记(含RNN/LSTM/GRU/Seq2Seq/Attention机制)
[说在前面]本人博客新手一枚,象牙塔的老白,职业场的小白.以下内容仅为个人见解,欢迎批评指正,不喜勿喷![认真看图][认真看图] [补充说明]深度学习中的序列模型已经广泛应用于自然语言处理(例如机器翻 ...
- RNN/LSTM/GRU/seq2seq公式推导
概括:RNN 适用于处理序列数据用于预测,但却受到短时记忆的制约.LSTM 和 GRU 采用门结构来克服短时记忆的影响.门结构可以调节流经序列链的信息流.LSTM 和 GRU 被广泛地应用到语音识别. ...
- RNN & LSTM & GRU 的原理与区别
RNN 循环神经网络,是非线性动态系统,将序列映射到序列,主要参数有五个:[Whv,Whh,Woh,bh,bo,h0][Whv,Whh,Woh,bh,bo,h0],典型的结构图如下: 和普通神经网 ...
- [PyTorch] rnn,lstm,gru中输入输出维度
本文中的RNN泛指LSTM,GRU等等 CNN中和RNN中batchSize的默认位置是不同的. CNN中:batchsize的位置是position 0. RNN中:batchsize的位置是pos ...
- RNN - LSTM - GRU
循环神经网络 (Recurrent Neural Network,RNN) 是一类具有短期记忆能力的神经网络,因而常用于序列建模.本篇先总结 RNN 的基本概念,以及其训练中时常遇到梯度爆炸和梯度消失 ...
- RNN, LSTM, GRU cells
项目需要,先简记cell,有时间再写具体改进原因 RNN cell LSTM cell: GRU cell: reference: 1.https://towardsdatascience.com/a ...
- RNN,GRU,LSTM
2019-08-29 17:17:15 问题描述:比较RNN,GRU,LSTM. 问题求解: 循环神经网络 RNN 传统的RNN是维护了一个隐变量 ht 用来保存序列信息,ht 基于 xt 和 ht- ...
- NLP教程(5) - 语言模型、RNN、GRU与LSTM
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www.showmeai.tech/article-det ...
- 自己动手实现深度学习框架-7 RNN层--GRU, LSTM
目标 这个阶段会给cute-dl添加循环层,使之能够支持RNN--循环神经网络. 具体目标包括: 添加激活函数sigmoid, tanh. 添加GRU(Gate Recurrent U ...
随机推荐
- 【180】IDL 读写 HDF 文件
HDF(Hierarchical Data Formats)数据格式由 NCSA 开发.HDF 提供了大量的数据模式,包括多维数组.表格.图像.注解和调色板.在下面的章节中,将描述 HDF 科学数据系 ...
- CodeForces 722A Broken Clock (水题)
题意:给定一个时间,然后改最少的数字,使得它成为12进制或者24进制. 析:24进制主要判是不是大于23,如果是把第一位变成0,12进制判是不是大于12,如果是再看第二位是不是0,是0,第一位变成1, ...
- ASP.NET Core MVC 打造一个简单的图书馆管理系统 (修正版)(四)图书信息的增删改查
前言: 本系列文章主要为我之前所学知识的一次微小的实践,以我学校图书馆管理系统为雏形所作. 本系列文章主要参考资料: 微软文档:https://docs.microsoft.com/zh-cn/asp ...
- Git学习二
一.在工作区和暂存区退回 在工作区: $git checkout -- filename 在暂存区: $git reset HEAD filename $git checkout -- filenam ...
- bzoj 4176: Lucas的数论【莫比乌斯反演+杜教筛】
首先由这样一个结论: \[ d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1] \] 然后推反演公式: \[ \sum_{i=1}^{n}\sum_{j=1}^{n}\su ...
- (DP)51NOD 1183 编辑距离
编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除 ...
- Unix\Linux | 总结笔记 | 查看文件的方式
0 目录 vi cat head tail more less 1.vi vi编辑器的内置命令 有些内置命令使用键盘组合键即可完成,有些内置命令则需要以冒号“:”开头输入.常用内置命令如下: Ctrl ...
- JAVA启动参数三:非Stable参数
前面我们提到用-XX作为前缀的参数列表在jvm中可能是不健壮的,SUN也不推荐使用,后续可能会在没有通知的情况下就直接取消了:但是由于这些参数中的确有很多是对我们很有用的,比如我们经常会见到的-XX: ...
- [CERC2017]Buffalo Barricades
这个题目,扫描线+玄学** 大概操作就是用个扫描线从上往下扫. 博主有点懒,就直接贴代码了,但是我还是给大家贴个比较详细的博客,除了代码都可以看wym的博客,我基本上就是按wym大佬的思路来的,当然, ...
- 数学/找规律/暴力 Codeforces Round #306 (Div. 2) C. Divisibility by Eight
题目传送门 /* 数学/暴力:只要一个数的最后三位能被8整除,那么它就是答案:用到sprintf把数字转移成字符读入 */ #include <cstdio> #include <a ...