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

news/2024/7/23 21:14:03 标签: rnn, 深度学习, 神经网络

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

文章目录

  • RNN循环神经网络--潘登同学的深度学习笔记
  • RNN
    • RNN的数学表达式
    • RNN手写数字识别
    • RNN的拼接操作
  • LSTM 长短时记忆(Long Short Time Memory)
    • LSTM数学表达
    • LSTM手写数字识别
  • 双向LSTM
  • GRU
  • RNN里面应用的Topology结构
    • AI写唐诗
      • 数据预处理
      • 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网络结构

在这里插入图片描述

训练模型

在这里插入图片描述

调用模型

在这里插入图片描述

结果查看

在这里插入图片描述


http://www.niftyadmin.cn/n/740210.html

相关文章

Encoder-Decoder框架与Attention机制

Attention机制 – 潘登同学的深度学习笔记 文章目录Attention机制 -- 潘登同学的深度学习笔记Encoder-Decode框架Encoder-Decode应用于聊天机器人数据预处理训练模型模型应用Attention机制计算相似度矩阵的方式论文提出的方法更常用的方法Self-Attention机制Multi headAttentio…

transformer机制

transformer机制 – 潘登同学的深度学习笔记 文章目录transformer机制 -- 潘登同学的深度学习笔记应用了残差思想的self-Attention Encoder加入位置信息Position Embeddingtransformer模型详解Decoder的第一层self-AttentionDecoder的第二层self-Attention理解为啥第二层不需要…

命名实体识别BiLSTM-CRF

命名实体识别BiLSTM-CRF – 潘登同学的NLP笔记 文章目录命名实体识别BiLSTM-CRF -- 潘登同学的NLP笔记标注策略早期方法基于统计学习的方法深度学习方法BiLSTM-CRF如果不加CRF层CRF 层可以从训练数据学习限制CRF层Emission score(发射分数)Transition score(转移分数)Loss函数训…

“流量”什么可以吃吗?怎么吃好流量,赚点零花钱

什么是流量了,是联通移动的流量吗 ?流量真的可以吃吗?小编今天要介绍的是一种读者观看的那种流量,肯定有人会说引流量那还不简单吗?今天小编要介绍的就不是那么简单的,流量其实也分很多种,做的方…

什么叫做自媒体,什么是流量,该如何引导流量了

第一篇小编先来和大家介绍一下什么自媒体,要怎么要做自媒体,自媒体怎么样吸引流量,怎么样用这些流量变现,先来看看什么叫自媒体:在自媒体时代,各种不同的声音来自四面八方,"主流媒体"…

Word2Vec进阶 - ELMO

Word2Vec进阶 - ELMO – 潘登同学的NLP笔记 文章目录Word2Vec进阶 - ELMO -- 潘登同学的NLP笔记ELMO原理整体架构Char Encoder LayerBiLSTMELMO词向量实验结果总结ELMO ELMo出自Allen研究所在NAACL2018会议上发表的一篇论文《Deep contextualized word representations》&…

微信公众号要怎么样运营!为什么别人运营一个公众号可以赚几万?

前面的二篇一个是介绍自媒体,一个介绍流量,这一篇就来讲讲微信公众号该如何运营,怎么样才可以运营好一个公众号达到盈利了,下面小编就来分析下公众号是怎么算收益的,我们具体该怎么做:第一个文章赚钱不管做…

word2Vec进阶 -Bert

Word2Vec进阶 - Bert – 潘登同学的NLP笔记 文章目录Word2Vec进阶 - Bert -- 潘登同学的NLP笔记Bert介绍BERT的结构Bert的输入Bert的输出预训练任务Masked Language Model(MLM)Next Sentence Prediction(NSP)总结ERNIEERNIE2.0预训…