RNN循环神经网络(AI写唐诗)

本文详细介绍了循环神经网络(RNN)及其变体LSTM(长短时记忆)在网络中的应用。RNN用于处理序列数据,如手写数字识别,其拼接操作允许信息在时间步长间传递。LSTM通过遗忘门、输入门和输出门解决了RNN的梯度消失问题,提高了长期依赖的捕捉能力。双向LSTM进一步增强了模型的表现。此外,GRU作为一种简化版的LSTM,也能有效训练并提高效率。文中还提到了RNN在AI创作如唐诗生成中的应用场景,以及训练和模型评估的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RNN循环神经网络–潘登同学的深度学习笔记

RNN

DNN 都只能单独的取处理一个个的输入,前一个输入和后一个输入是完全没有关系的。但是,某些任务需要能够更好的处理序列的信息,即前面的输入和后面的输入是有关系的。比如,当我们在理解一句话意思时,孤立的理解这句话的每个词是不够的,我们需要处理这些词连接起来的整个序列; 当我们处理视频的时候,我们也不能只单独的去分析每一帧,而要分析这些帧连接起来的整个序列。

与词向量算法的区别, 词向量算法 是 将一句话的词全部加起来求平均得到句子的词向量,所以对于同一句话,里面的词颠倒顺序,完全词不达意,只要还是那几个字,结果就完全一致;

RNN

用语言来描述一下整个过程:

  • 大体上还是与DNN、CNN等神经网络算法一致,x进,O出,中间还是隐藏层,当然要看具体做什么内容,如果做的是图像识别,那隐藏层夹杂CNN;
  • 而对于序列问题来说,我们想做到后面的输出会受到前面输入的影响,就通过w矩阵来操作,当后面的输入进入隐藏层中时,前面输入通过隐藏层得出的结果会经过w矩阵,得到一个相当于偏置项的结果,再与后面的输入加和,最后做非线性变换…

如果将RNN展开,将会是如下情况

RNN展开

X t − 1 , X t , X t + 1 X_{t-1},X_t,X_{t+1} Xt1,Xt,Xt+1分别每个时刻的输入, U U U表示输入层到隐藏层, S t − 1 、 S t 、 S t + 1 S_{t-1}、S_{t}、S_{t+1} St1StSt+1表示每个时刻隐藏层的输出结果, W W W表示前一时刻的隐藏结果作用的下一时刻的作用矩阵, V V V表示隐藏层到输出层的作用矩阵

RNN的数学表达式

O t = g ( S t ⋅ V ) S t = f ( X t ⋅ U + S t − 1 ⋅ W ) O_t = g(S_t \cdot V)\\ S_t = f(X_t \cdot U + S_{t-1} \cdot W) Ot=g(StV)St=f(XtU+St1W)

RNN手写数字识别

主要思路: 把一张图片的一行视作一次输入,在第28次输入的时候,产生的结果就是最终我们想要的结果,所以在RNN的一层中,总共会有28个RNN节点(将RNN展开的话);

在这里插入图片描述

RNN的拼接操作

RNN隐藏层操作

隐藏层的加和操作,可以理解为:

  • 输入矩阵 U m × n U_{m \times n} Um×n 与 矩阵 W n × n W_{n \times n} Wn×n 上下拼接成 新矩阵 T m + n × n T_{m+n \times n} Tm+n×n
  • 输入数据矩阵 X B S × m X_{BS \times m} XBS×m 与 上一时刻传递过来的 矩阵 S B S × n S_{BS \times n} SBS×n 左右拼接成 新矩阵 X S B S × m + n XS_{BS \times m+n} XSBS×m+n
  • 然后两个矩阵相乘即可

然后这种操作其实也对应着一种名字Vanilla RNN就是最基础的BasicRNNCell

LSTM 长短时记忆(Long Short Time Memory)

前面的BasicRNNCell,每次传递到下一时刻时,都会携带前t时刻的信息与下一时刻的输入进行拼接再进入tanh,那么离当前时刻越近的输入,带到后面的信息就越多,离当前时刻越远的信息带到后面就越少,很像我们之前说到过的动量梯度下降的那个优化器,当前的动量 = 0.9*上一时刻动量 + 梯度;这是题外话了,回到正题; 正是因为这样的原因,离当前时刻越远的输入,到后面携带的信息量越少,对应反向传播的时候,回到最开始处的梯度就越小,当整个LSTM的链越长,那么就会产生梯度消失…

为了解决前面提到的问题,产生了LSTM

LSTM

可以看到,与BasicRNNCell相比,多了三个sigmoid和一些点乘、点加操作,而这些sigmoid分别都有自己的名字

  • 遗忘门
  • 输入门
  • 输出门

LSTM过程详析

LSTM数学表达

  • 遗忘门:
    f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f) ft=σ(Wf[ht1,xt]+bf)
    LSTM公式1

  • 输入门:
    i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) C t ~ = t a n h ( W c ⋅ [ h t − 1 , x t ] + b C ) i_t = \sigma (W_i \cdot [h_{t-1},x_t] + b_i) \\ \tilde{C_t} = tanh(W_c \cdot [h_{t-1},x_t] + b_C) it=σ(Wi[ht1,xt]+bi)Ct~=tanh(Wc[ht1,xt]+bC)
    LSTM公式2

  • 长时记忆:
    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×Ct~
    LSTM公式3

  • 输出门:
    o t = σ ( W o ⋅ [ h t − 1 , x t ] + b 0 ) h t = o t × t a n h ( C t ) o_t = \sigma(W_o \cdot [h_{t-1},x_t] + b0) h_t = o_t \times tanh(C_t) ot=σ(Wo[ht1,xt]+b0)ht=ot×tanh(Ct)
    LSTM公式4

LSTM手写数字识别

在这里插入图片描述

最后结果是要比BasicRNN好狠多的,有的时候测试集准确率接近了1.0

双向LSTM

在这里插入图片描述

在这里插入图片描述

GRU

相比LSTM,使用GRU能够达到相当的效果,并且相比之下更容易进行训练,能够很大程度上提高训练效率,因此很多时候会更倾向于使用GRU。根据 Cho, et al. 在 2014 年的介绍,GRU 旨在解决标准 RNN 中出现的梯度消失问题。GRU 也可以被视为 LSTM 的变体,因为它们基础的理念都是相似的,且在某些情况能产生同样出色的结果

在这里插入图片描述

相较于LSTM的六个公式,四个W矩阵,GRU只有四个公式,三个W矩阵,其中 r t r_t rt表示新学到的知识, z t z_t zt表示新学到的与之前的知识应该如何取舍,观察最后的输出公式, h t = ( 1 − z t ) ∗ h h − 1 + z t ∗ h t ~ h_t = (1-z_t)*h_{h-1} + z_t * \tilde{h_t} ht=(1zt)hh1+ztht~,当 z t z_t zt越接近与1,表示应该忘掉更多的旧知识转向新知识(或者与新知识有关的旧知识 h t ~ \tilde{h_t} ht~)…

RNN里面应用的Topology结构

RNN的拓扑结构

AI写唐诗

这里的AI写唐诗采用的是many to many的网络拓扑结构,在训练阶段,输入数据与输出标签是错一位的关系,即一个RNN 的输出标签是下一个RNN的输入;而在推理阶段,输出值直接作为下一时刻的输入值,如下图所示

在这里插入图片描述

数据预处理

在这里插入图片描述

RNN网络结构

在这里插入图片描述

训练模型

在这里插入图片描述

调用模型

在这里插入图片描述

结果查看

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PD我是你的真爱粉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值