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 ...
随机推荐
- 川崎机器人维修kasawaki维护注意事项
为确保川崎机械臂的正确安全操作.防止人员伤害和财产损失,请遵守下述方框符号表达的安全信息. --注意事项 在进行Kasawaki川崎机器人维修操作前,请注意如下事项以确保安全. 1. 在开始检查之前, ...
- C#方法练习
提示用户输入用户名和密码,写一个方法来判断用户输入的是否正确,返回给用户一个登陆结果,并且还要单独的返回给用户一个登陆信息 ,如果用户名错误,除了返回登陆结果之外,还要返回一个 "用户名错误 ...
- Vulnhub-Zico2靶机-漏扫弱口令数据库+文件包含反弹shell+zip,tar提权
一.靶机搭建 选择扫描虚拟机 选择路径即可 二.信息收集 官方信息 先看一下官网的信息 级别:中级 目标:获取root并读取标志文件 说明: Zico正试图建立自己的网站,但在选择使用什么CMS时遇到 ...
- AI与.NET技术实操系列(二):开始使用ML.NET
引言 在当今技术飞速发展的时代,机器学习(Machine Learning, ML)已成为推动创新和变革的核心力量.从智能推荐系统到自动化决策工具,ML的应用无处不在,深刻影响着我们的生活和工作方式. ...
- Amazon S3 概念及如何集成到 .net 8 C#
Amazon S3(Simple Storage Service)是一个高度可扩展.数据可用性高.安全性强的对象存储服务. Amazon S3 使用对象存储架构,数据以对象的形式存储在桶(bucket ...
- FastAPI 路径参数完全指南:从基础到高级校验实战 🚀
title: FastAPI 路径参数完全指南:从基础到高级校验实战 date: 2025/3/5 updated: 2025/3/5 author: cmdragon excerpt: 探讨 Fas ...
- 基于Element的el-input实现一个可以显示千分位符的金额输入框
直接上代码 1 <template> 2 <!-- 定义一个 Element UI 的输入框组件 --> 3 <el-input 4 v-model="form ...
- Java24你发任你发,我用Java8
大家好,我是晓凡. 各位 Java 开发者们!是不是还在为 Java 23 的新特性忙得焦头烂额? 别急,Java 24 已经悄咪咪地发布了! 这可是自 Java 21 以来的第三个非长期支持版本,而 ...
- 设置git忽略文件
要设置Git忽略文件,你可以使用一个名为.gitignore的特殊文件.在这个文件中,你可以列出需要Git忽略的文件.文件夹.或者匹配模式.当Git执行操作时,它会自动忽略这些被列出的文件. 1. 在 ...
- Linux下时区/系统时间/硬件时间的设置
涨姿势,顺带笔记,留爪. 先简述下时区/系统时间/硬件时间的3个主要命令吧 tzselect tzselect命令主要针对时区设置和查看 tz=timezone的缩写,直译=时区 date date命 ...