LSTM和GRU

概述#

长短期记忆 LSTM(Long Short Term Memory),该类型的神经网络可以利用上输入数据的时序信息。对于需要处理与顺序或时间强相关数据的领域(自然语言处理、天气预测等)相当合适。

GRU(Gate Recurrent Unit)可以视为 LSTM 的简化版本。运算量更小,却能达到 LSTM 相当的性能。

介绍 LSTM 之前,要先了解什么是 RNN。

RNN#

递归神经网络 RNN(Recurssion Neural Network),通过让网络能接收上一时刻的网络输出达成处理时序数据的目标。

通常来说,网络通过输入 x 可以得到输出 y。而 RNN 的思路是将 i1 时刻的输出 y 视为 “状态” hi1,用为 i 时刻的网络输入。

如此,网络的输入有两个:xi,和上一个时刻的输出 hi1。网络的输出仍为一个,并且可以作为下一个时刻的网络输入 hi

LSTM#

RNN 有很多缺点(遗忘、梯度爆炸与梯度消失),现在更多使用 LSTM。

LSTM 引入了单元状态(cell state)的概念。网络的输入现在有 x、隐藏态(hidden state)hi1、单元状态 ci1。。

单元状态 ci 变化很慢,通常是 ct1 的基础上加一些数值。而 hi 对于不同节点有很大区别。

LSTM 具体细节#

i 时刻,网络先将本次输入 xt 和上一隐藏态 hi1 拼接,经由四个不同的矩阵(矩阵参数可学习)做乘法,获得用途各异的四个状态 zfzizoz

zf=sigmoid(Wfconcatenate(xt,ht1))zi=sigmoid(Wiconcatenate(xt,ht1))zo=sigmoid(Woconcatenate(xt,ht1))z=tanh(Wconcatenate(xt,ht1))

一次运算的步骤如下:

  • i1 时刻传来的单元状态 ci1 首先与 zf 相乘,用于代表记忆的遗忘(forget)

  • ziz 相乘,代表对记忆进行选择,哪些记忆需要记录(information)。上一步经过遗忘处理的 ci1 与需要记录的记忆进行加运算,完成记录。

此步完成后,ci1 化身为 ci 作为下一步的单元状态输入

  • 最后用 zo 控制输出(output)。zo 与上一步的 ci1tanh 结果相乘,获得本时刻的输出 yi,并作为下一步的隐藏态输入 ht

GRU#

GRU 可以实现与 LSTM 相当的性能,且运算量更低。

GRU 具体细节#

GRU 没有单元状态 ci。网络接收两个输入:当前输入 xi、上一隐藏状态 hi1。两个输入经过两个不同的矩阵(矩阵参数可学习)做乘法,获得两个门控(gate):

r=sigmoid(Wrconcatenate(xt,ht1))z=sigmoid(Wzconcatenate(xt,ht1))

r 为重置门控(reset gate),z 为更新门控(update gate)。

一次运算的步骤如下:

  • i1 时刻传来隐藏状态 hi1r 相乘,获得 hi1。这一步代表有选择性地保留记忆(遗忘)
  • ht1 与输入 xi 拼接,再乘一个参数可学习的矩阵,取 tanh 获得 h。这一步让 h 记忆了当前时刻的状态(记录)
  • (1z) 乘上 hi1,用 z 乘上 h,将两者的和视为当前的隐藏状态 hi。可见 hi 结合了以前的记忆与现在的状态,代表记忆的更新

现在,将 hi 视为下一时刻的输入,即完成了一次运算。

参考来源#

作者:chirp

出处:https://www.cnblogs.com/chirp/p/18100567

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   倒地  阅读(140)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示