前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >动图详解LSTM和GRU

动图详解LSTM和GRU

作者头像
YoungTimes
发布2022-04-28 19:26:22
8480
发布2022-04-28 19:26:22
举报

问题:短期记忆

反向传播(Back Propagation)是一种与最优化方法(比如梯度下降方法)结合、用来训练人工神经网络的常见方法。该方法对网络中所有权重计算损失函数的梯度,然后将梯度反馈给最优化方法,用来更新网络权重以最小化损失函数。

在神经网络中一个典型的问题就是梯度消失(Gradient Vanishing)的问题,其原因在于是随着神经网络层数的加深,梯度逐渐减小甚至接近0,当梯度变的非常小的时候,就不能为学习提供足够的信息。

Recurrent Neural Networks(递归神经网络,RNN)也存在梯度消失的问题,当输入的序列足够长时,RNN前期的层通常通常由于梯度消失而停止学习,从而导致RNN只拥有短期记忆。也就是说如果输入的序列的足够长,RNN在处理序列后面的信息时,可能已经将序列前面的信息丢失或者遗忘了,RNN很难完整的传递完整的长序列信息。

视频来源Youtube: https://www.youtube.com/watch?v=8HyCNIVRbSU

短期记忆的解决方案-LSTM和GRU

LSTM和GRU的短期记忆的解决方案,它通过门控(Gates)机制调节信息的流向。Gates可以学习到序列数据中哪些信息是重要的,需要保留;哪些信息是不重要的,可以丢弃,从而解决长序列的信息传递问题。

RNN回顾

为了更好的理解LSTM和GRU是如何实现的,先回顾下Recurrent Neural Network是如何工作的。

以机器翻译为例,RNN先将句子和词语转换为机器可识别的词向量(Word Vector),然后把词向量one by one的交给RNN进行处理。

Processing sequence one by one

RNN处理信息过程中,Hidden State作为神经网络的记忆数据,保留了神经网络已经看到的历史信息。通过将前一单元的Hidden State传递给后一个RNN单元,从而实现对历史信息的记忆。

Passing hidden state to next time step

RNN计算Hidden State的过程如下:它将当前RNN单元的输入和前一个RNN单元输出的Hidden State组合起来,经过一个Tanh激活函数,生成当前单元的Hidden State。

RNN Cell

Tanh激活函数将输入值压缩至-1和1之间。

Tanh squishes values to be between -1 and 1

如果不采用Tanh激活函数,数据流经多层神经网络后,个别维度会出现急剧膨胀,甚至变成一个天文数字。下图是神经网络每层都对输入数据做了一个x3的操作的效果。

vector transformations without tanh

Tanh函数确保网络的输出值在-1与1之间,下图是同样的输入数据流经激活函数为Tanh的多层神经网络的效果。

vector transformations with tanh

LSTM

LSTM与RNN有相似的数据流控制机制,差别在于LSTM Cell内部的运作逻辑。

LSTM Cell and It’s Operations

LSTM的核心概念是Cell States和各种Gates。Cell State在整个序列的处理过程中都携带相关的信息,即使较早时刻的信息也可以很好的保留,从而降低了短期记忆问题的影响。

Gates都是不同神经网络,它们可以决定哪些信息需要保留在Cell States中,哪些信息需要遗忘。

Sigmoid

Gates中使用了Sigmoid激活函数,Sigmoid激活函数与Tanh激活函数类似,只不过它不是将所有输入数据压缩到(-1, 1)之间,而是将输入数据压缩到(0, 1)之间。Sigmoid激活函数对于Gates数据更新或者遗忘数据非常有用,因为任意数值乘以0都等于0,从而使得这些数据被遗忘或则消失;任意数值乘以1都等于原数值,从而使得这些信息保留下来。所以最终Gates通过训练可以哪些数据是重要的,需要保留;哪些数据是不重要的,需要遗忘。

Sigmoid squishes values to be between 0 and 1

下面在深入看看各种Gates都做了什么。

Forget Gate

Forget Gate决定哪些信息需要丢弃,哪些信息需要保留。它合并前一个Hidden State和当前的Input信息,然后输入Sigmoid激活函数,输出(0,1)之间的数值。输出值接近0的信息需要被遗忘,输出值接近1的信息需要被保留。

Forget gate operations

Input Gate

Input Gate首先将前一个Hidden State和当前Input合并起来,送入Sigmoid函数,输出(0,1)之间的值,0表示信息不重要,1表示信息重要。

Hidden State和Input的输入同时也被送入Tanh函数,输出(-1, 1)之间的数值。

Sigmoid的输出和Tanh的输出相乘,决定哪些Tanh的输出信息需要保留,哪些输出信息需要丢弃。

Input gate operations

Cell State

前一个Cell State的输出,首先与Forget Gate的输出相乘,选择性的遗忘不重要的信息,再与Input Gate的输出相加,从而实现将当前的Input信息添加到Cell State中,输出新的Cell State。

Calculating cell state

Output Gate

Output Gate用于输出Hidden State。Output Gate首先将前一个Hidden State和当前Input送入Sigmoid函数,然后与新的Cell State通过Tanh函数的输出相乘,决定Hidden State要将哪些信息携带到下一个Time Step。

output gate operations

概括来说,就是Forget Gate决定哪些历史信息要保留;Input Gate决定哪些新的信息要添加进来;Output Gate决定下一个Hidden State要携带哪些历史信息。

Code Demo

通过Python伪代码辅助更好的理解整个LSTM的运行过程。

GRU

GRU与LSTM非常相似,但它去除了Cell State,使用Hidden State来传递信息。GRU只有两个Gates: Reset Gate和Update Gate。

GRU cell and it’s gates

上图不够直接明白,再来一张中国台湾大学李宏毅教学视频中的讲解。

如上图所示,r是Reset Gate,z为Update Gate。

通过重置门(Reset Gate)处理前一个Cell的输出:

h^{t-1^{\prime}}=h^{t-1} \odot r
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 半杯茶的小酒杯 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题:短期记忆
  • 短期记忆的解决方案-LSTM和GRU
  • RNN回顾
  • LSTM
    • Sigmoid
      • Forget Gate
        • Input Gate
          • Cell State
            • Output Gate
              • Code Demo
              • GRU
              相关产品与服务
              机器翻译
              机器翻译(Tencent Machine Translation,TMT)结合了神经机器翻译和统计机器翻译的优点,从大规模双语语料库自动学习翻译知识,实现从源语言文本到目标语言文本的自动翻译,目前可支持十余种语言的互译。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档