LSTM 与 GRU
弄完这块, 感觉对于 RNN (递归神经网络) 基本就接近尾声了. 相对于 之前的卷积神经网络, 我感觉 RNN 还是相对有意思一些, 也可能是在前面手推 CNN 公式时弄翻车的原因, 以及实在对图像处理那块没啥兴趣, 就搁置了. RNN 的应用, 越发现越广泛, 打算这阶段把理论大致理解后, 代码走一波. 搞搞什么对话机器人, 机器翻译这样的东西来玩一玩.
回顾LSTM
之前在处理关于 RNN 在梯度消失方面, 引入的 LSTM 这样的变体, 它的核心在于, 构造有 3个 所谓 "门" gate 的向量, 具体细节我也没仔细看过, 但中心思想是, 保留早期状态的信息 而不是向咱之前的直接进行覆盖.
在众多的RNN变体中, 应用最为广泛的, 除了 LSTM 还有这里要谈的 GRU.
GRU
Proposed by Cho et al. in 2014 as a simpler alternative to the LSTM.
On the each timestep t, we have input \(x^{(t)}\) and hidden state \(h^{(t)}\) no cell state.
\(u^{(t)} = \sigma(W_u h^{(t-1)} + U_u x^{(t)} + b_u)\) --> update gate
\(r^{(t)} = \sigma(W_r h^{(t-1)} + U_r x^{(t)} + b_r)\) --> reset gate
这有点那种 EM 算法的感觉, 计算, 更新, 计算, 更新....
\(\hat h^{(t)} = tanh(W_h (r^{(t) } * h^{(t-1)}) + U_h x^{(t)} + b_h )\)
\(h^{(t)} = (1-u^{(t)}) * h^{(t-1)} + u^{(t)} * \hat h^{(t)}\)
可以看出, GRU 的出发点跟 LSTM 是一样的, 也是希望能够记住更长的信息. 只不过可以看到, 这里的 GRU 起码在公式上, 是要比 LSTM 要简洁一些的, 同时这也意味着, 其所要维护的参数也相对少的呀.
LSTM 与 GRU
Researches have proposed many gated RNN variants, but LSTM and GRU are the most widely-used. (应用最为广泛的两种RNN变体)
The biggest difference is that **GRU is quicker to compute ** and has fewer parameters. (计算快且需要的参数较少, 就与 LSTM 对比, 它的 gate 只有2个呀)
There is no conclusive evidence (决定性的证据) that one consistently performs better than the other.
LSTM is a good default choice (especially if you data has particularly long dependencies, or you have lots of training data).
Rule or thumb start with LSTM, (一般来说, 可先尝试用 LSTM) , but switch to GRU if you want something more efficient. (等训练的结构基本稳定下来了, 可再换为GRU, 这样模型也会跑得更快哦)
Vanishing / Exploding Grandient
关于这个梯度消失, 梯度爆炸的问题, 其实不仅仅是只有 RNN 特有的. It can be a problem for all neural architectures (including **feed-forward, convolutional) especially **deep ones. 就咱传统的 F-B (前向, 后向) 人工神经网络, 多层的卷积神经网络, 都是会从存在的, 尤其在深度学习中更加常见.
从网络结构, 从数学上看, 对于梯度消失, 表明节点间没有什么**"关联性" **了. (导数的物理意义, "变化率"); 而对于梯度爆炸, 则参数很难去更新. (梯度下降法) . 导致模型都训练不了啦.
如果要论本质原因, 即现在的网络训练都是基于 BP 算法的呀.
- BP 算法的原理, 就是多元函数求偏导, 这个过程应用到, 求导的 链式法则
- Thus lower layers are learnt very slowly (hard to train)
solve
从总体的解决方案上来看呢, 在 BP 训练中, 有大致这么几种方式来处理.
- Skip - connections : 让误差向后传播的时候呢, 给跳跃式的传递, 而不必一层层地传
- Dence connections aka "DenceNet" 后一层直接跟前面的所有层都产生联系, 让误差就一步传递过去这样子.
- HightWay connections aka "HightWayNet". 思路也差不多, 只不过在连接的时候, 多了些 gate. 现在也不咋用
总之, 结论是: Though vanishing / exploding gradients are a general problem, RNN are particularly unstable due to the repeat multiplication by the same weight matrix . 还是 RNN 这种权值矩阵复用所带来的让人又爱又恨的问题呀.
小结
从最初的 RNN 认识其核心的特点, "权值矩阵复用, 和上一个的输出作为, 下一个状态的输入" 来认识这种新的神经网络, 然后到, 权值矩阵复用, 会带来, 梯度消失 和 梯度爆炸的问题, 这两个极端的会让训练出来的网络是错误的或者根本训练不了网络结构. 因而引出了一些 RNN 的变体, 重点瞧了一波 LSTM 和 GRU. 通过这种很多的 "gate" 的向量, 来保存 RNN 更早期的状态信息, 来试图解决梯度消失的问题. 而GRU 跟 LSTM 类似, 也是通过这种 gate 的思路 update, reset .. 但GRU 的效率会更高( 毕竟门少了, 参数也少了嘛).
就到这, 后面如果有兴趣, 再去看一些更多的变体, 如 双向的 RNN 和 多层的 RNN . 我其实有瞟过一眼, 感觉有点难..暂时就不搞了..等稍微理解了再补上来吧.
LSTM 与 GRU的更多相关文章
- TensorFlow之RNN:堆叠RNN、LSTM、GRU及双向LSTM
RNN(Recurrent Neural Networks,循环神经网络)是一种具有短期记忆能力的神经网络模型,可以处理任意长度的序列,在自然语言处理中的应用非常广泛,比如机器翻译.文本生成.问答系统 ...
- LSTM和GRU
LSTM和GRU LSTM 忽略偏置: \[\begin{align} i_t&=\sigma(x_t\cdot W_i+h_{t-1}\cdot U_i)\\ f_t&=\sigma ...
- 第二十一节,使用TensorFlow实现LSTM和GRU网络
本节主要介绍在TensorFlow中实现LSTM以及GRU网络. 一 LSTM网络 Long Short Term 网络—— 一般就叫做 LSTM ——是一种 RNN 特殊的类型,可以学习长期依赖信息 ...
- lstm和gru详解
一.LSTM(长短期记忆网络) LSTM是一种特殊的RNN类型,一般的RNN结构如下图所示,是一种将以往学习的结果应用到当前学习的模型,但是这种一般的RNN存在着许多的弊端.举个例子,如果我们要预测“ ...
- 深度学习-LSTM与GRU
http://www.sohu.com/a/259957763_610300此篇文章绕开了数学公式,对LSTM与GRU采用图文并茂的方式进行说明,尤其是里面的动图,让人一目了然.https://zyb ...
- 十 | 门控循环神经网络LSTM与GRU(附python演练)
欢迎大家关注我们的网站和系列教程:http://panchuang.net/ ,学习更多的机器学习.深度学习的知识! 目录: 门控循环神经网络简介 长短期记忆网络(LSTM) 门控制循环单元(GRU) ...
- 深度学习四从循环神经网络入手学习LSTM及GRU
循环神经网络 简介 循环神经网络(Recurrent Neural Networks, RNN) 是一类用于处理序列数据的神经网络.之前的说的卷积神经网络是专门用于处理网格化数据(例如一个图像)的神经 ...
- Naive RNN vs LSTM vs GRU
0 Recurrent Neural Network 1 Naive RNN 2 LSTM peephole Naive RNN vs LSTM 记忆更新部分的操作,Naive RNN为乘法,LSTM ...
- 循环神经网络之LSTM和GRU
看了一些LSTM的博客,都推荐看colah写的博客<Understanding LSTM Networks> 来学习LSTM,我也找来看了,写得还是比较好懂的,它把LSTM的工作流程从输入 ...
- LSTM CNN GRU DGA比较
测试环境:linux,8cpu核,8G内存 优化后的模型比较 模型 速度/eps 准确率 NN ...
随机推荐
- [CF576E] Painting Edges 题解
模版题的升级了. 使用二分图经典判定方法(一个点拆成两个点 \(x,x+n\),连边 \((x,y)\) 就是连接 \((x,y+n),(x+n,y)\),那么是否是二分图就等价于判断 \(x,x+n ...
- luogu-P3343题解
简要题意 给定一张 \(n\) 个点 \(m\) 条边的图,边的边权是 \([0, 1]\) 之间均匀分布的随机实数,且相互独立.求最小生成树的最大边权的期望值. 思路 首先有一个比较神秘的跟概率有关 ...
- nginx 根据 URL 参数引入不同的文件
同步发布:https://blog.jijian.link/2020-06-30/nginx-import-file/ 编程世界中各种奇奇怪怪的需求都有,本次遇到一个需求:根据URL参数判断,包含 x ...
- nodejs 图片添加水印(png, jpeg, jpg, gif)
同步发布:https://blog.jijian.link/2020-04-17/nodejs-watermark/ nodejs 作为一个脚本语言,图片处理这方面有点弱鸡,无法跟 php 这种本身集 ...
- [tldr] 配置windows terminal使用git bash
windows terminal默认使用power shell作为shell,但是power shell不好用,还是习惯linux的命令行行为. 参考Windows Terminal 配置 Git B ...
- php-fpm 启动后没有监听端口9000
netstat -tpln未发现监听9000端口.查看/var/log/php7-fpm.log一切正常. 随后查看PHP配置文件:/usr/local/php/etc/php-fpm.conf (源 ...
- IvorySQL 4.0 发布:全面支持 PostgreSQL 17
2024 年 12 月 24 日,IvorySQL 4.0 发布了! 这是 2024 年以来发布的最新版本,相较于上个版本,有了较大的变化. 该版本有多项增强:全面支持 PostgreSQL 17,新 ...
- Linux权限与特殊权限
目录 5.1 权限讲解 5.1.1 什么是权限 5.1.2 为什么要管理权限 5.1.3 权限的分类 5.1.4 Linux的文件属于谁? 5.1.5 文件属主.属组.其他用户 5.1.6 所属者的表 ...
- CentOS7图形化界面和命令行界面之间的转换
最近在学习Lunix操作系统下的CentOS7系统,参考了网页上大多数的资料并进行在自己的亲身实践,最终想要记录一下我在CentOS7系统中有关命令行和图形化界面之间的转换.1.查看当前的默认界面形式 ...
- Noise——随机之美
本篇博文介绍图形学中噪音生成的一般方法. Noise可以干什么? 不规则表面生成 有机体模拟 流体烟雾模拟 甚至是使用noise对灯光强度,位置做扰动: 只有我们想象不到的,没有noise不能涉猎的! ...