神经网络学习日记(四)——RNN、LSTM、BiLSTM、GRU

本文是笔者为了完成毕业设计而进行学习的一个个人学习日记

图片和链接均源自网络,侵删

RNN网络结构

RNN作为循环神经网络的基础结构,只能对短期的内容进行记忆,但是是不得不学的。相对于普通的FCNN,它更关注时间序列,随着时间的推进,不断有新的输入加入到RNN中,而每次经过计算后的输出值,会作为部分输入参与到下一个节点的计算中。如下图:

rnn

在标准的RNN中,每个神经元中都只有一个简单的结构,例如一个Sigmoid层或一个Tanh层,将输入变换为(0, 1)或(-1, 1)上的输出,公式如下:
σ ( x ) = 1 1 + exp ⁡ ( − x ) t a n h ( x ) = e x − e − x e x + e − x \sigma(x)=\frac{1}{1+\exp(-x)}\\ tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}} σ(x)=1+exp(x)1tanh(x)=ex+exexex

深度学习之RNN(循环神经网络):https://blog.csdn.net/qq_32241189/article/details/80461635

Pytorch循环神经网络(RNN)快速入门与实战:https://blog.csdn.net/weixin_45727931/article/details/114369073

长短时记忆网络(LSTM)

长短时记忆网络,相较于普通的RNN,它解决了短期依赖的问题。LSTM的关键在于细胞状态,它是贯穿于细胞上方的水平线,只存在一些少量的线性交互,信息在上面流传时保持相对小的变化

lstm

如上图所示,LSTM拥有三种类型的门结构:忘记门、输入门和输出门,来保护和控制细胞状态。

忘记门

忘记门在LSTM神经元中的位置如下图所示。它会读取上一个神经元的输出 h t − 1 h_{t-1} ht1和当前输入 x t x_t xt,经过一个简单的sigmoid层,输出一个 f t f_t ft,即: f t = σ ( W f h h t − 1 + W f x x t + b f ) f_t=\sigma(W_{fh}h_{t-1}+W_{fx}x_t+b_f) ft=σ(Wfhht1+Wfxxt+bf)

而这个输出 f t f_t ft会与上一个神经元输出的细胞状态 C t − 1 C_{t-1} Ct1相乘,由于 f t f_t ft的值在0到1之间,与原先的细胞状态相乘后,相当于忘记了一定程度 C t − 1 C_{t-1} Ct1的内容。

lstm1

例如,在语言处理中,我们假设原先的细胞状态 C t − 1 C_{t-1} Ct1可能保存着当前主语的信息(如性别等),而当我们看到新的主语时,我们希望丢弃原先的主语信息,防止干扰后续信息的正常流传。

输入门

输入门在LSTM神经元中的位置如下如所示。输入值通过Tanh层产生新的候选值向量 C ~ t \tilde{C}_t C~t,它会经过与Sigmoid层产生的 i t i_t it相乘,Sigmoid层决定了我们需要更新什么值(即 i t × C ~ t i_t\times\tilde{C}_t it×C~t),最后,这个值会加入到细胞状态中。

lstm2

类比到上面的例子中,当我们丢弃了原先的主语信息后,我们需要把新的主语信息加入到细胞状态中,来代替原先的信息。

输出门

经过上面的变化,我们已经得到了新的细胞状态 C t C_t Ct,即:
C t = f t × C t − 1 + i t × C ~ t C_t=f_t\times C_{t-1}+i_t\times\tilde{C}_t Ct=ft×Ct1+it×C~t
而新的细胞状态将会有一部分要作为输出,这部分通过Sigmoid层来决定。我们将细胞状态 C t C_t Ct经过Tanh层处理后,与Sigmoid门产生的 o t o_t ot相乘,产生了我们需要输出的 h t h_t ht

lstm3

同样类比到上面的例子,这个输出的部分可能包含了一些主语之外的其他信息,需要通过细胞状态进行推断。

最后,这里还有两张图,但不适合放在这里,就放两个超链接吧:LSTM详细结构图LSTM结构动图

如何从RNN起步,一步一步通俗理解LSTM:https://blog.csdn.net/v_JULY_v/article/details/89894058

Pytorch LSTM实现中文单词预测(附完整训练代码):https://blog.csdn.net/guyuealian/article/details/128582675

时间序列预测——LSTM模型(附代码实现):https://blog.csdn.net/weixin_52910499/article/details/124693212

双向长短时记忆网络(BiLSTM)

BiLSTM指的是双向LSTM,从上面LSTM的介绍中我们也可以看出,单项的循环神经网络结构模型实际上只是不断参考“上文”和“当前”的信息,而没有考虑到“下文”的信息。在实际语言分析中,我们有可能会需要结合上下文内容,因此,我们有了双向长短时记忆网络。其最终的输出的结果为正向的LSTM结果与反向LSTM结果的简单堆叠。

bilstm

Pytorch实战笔记(1)——BiLSTM 实现情感分析:https://blog.csdn.net/qq_35357274/article/details/128701233

一幅图真正理解LSTM、BiLSTM:https://blog.csdn.net/weixin_42118657/article/details/120022112

门控神经网络(GRU)

GRU是门控神经网络(Gate Recurrent Units),它与LSTM最大的不同在于GRU将忘记门和输入门合并了,组成了一个“更新门”。目前没有详细学,感觉论文看过来应该跟NLP关系不大。这里有个动图可以了解一下。

还有一个介绍了全部上述四种RNN及其变体的博客,图做的挺好的:

【Pytorch学习笔记十二】循环神经网络(RNN)详细介绍(常用网络结构及原理):https://blog.csdn.net/QH2107/article/details/126706353

个人神经网络学习日记:
神经网络学习日记(一)——神经网络基本概念
神经网络学习日记(二)——全连接神经网络及Pytorch代码实现
神经网络学习日记(三)——CNN卷积神经网络
神经网络学习日记(四)——RNN、LSTM、BiLSTM、GRU
神经网络学习日记(五)——数据加载器(DataLoader)的调用

由于是第一次写博客,不知道是否有侵犯其他人文章版权的问题,如果有请务必联系我,谢谢!

  • 36
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值