首页 > 其他分享 >循环神经网络 RNN LSTM GRU 笔记

循环神经网络 RNN LSTM GRU 笔记

时间:2023-06-02 18:32:12浏览次数:40  
标签:GRU RNN 单词 神经网络 记忆 LSTM



文章目录

  • 1. 神经网络基础
  • 2. RNN 循环神经网络
  • 2.1 背景与概念
  • 2.2 RNN基本方法
  • 2.3 拓展
  • 3. LSTM
  • 3.1 概念
  • 3.2 LSTM基本方法
  • 3.3 原理解释
  • 4. GRU
  • 4.1 概念与背景
  • 4.2 GRU基本方法


1. 神经网络基础

循环神经网络 RNN LSTM GRU 笔记_rnn

上图是一个简单的全连接神经网络结构,每一条连接线上都有一个权重,蕴含着网络学得的“能力”。
不妨记输入循环神经网络 RNN LSTM GRU 笔记_基本方法_02,隐层循环神经网络 RNN LSTM GRU 笔记_循环神经网络_03,输出循环神经网络 RNN LSTM GRU 笔记_基本方法_04。则对于该网络,不同的输入循环神经网络 RNN LSTM GRU 笔记_rnn_05之间是相互独立的,互不影响。

为了方便下文的讲述,我们把该网络模型用下图概括,记该模型为循环神经网络 RNN LSTM GRU 笔记_循环神经网络_06:

循环神经网络 RNN LSTM GRU 笔记_lstm_07

参考:四种基本的神经网络架构

2. RNN 循环神经网络

2.1 背景与概念

以自然语言处理为例。自然语言是有语序关系的,如果我们想让一个模型从自然语句中学得一些“能力”,可以依次将每个单词送入神经网络(如上文神经网络模型循环神经网络 RNN LSTM GRU 笔记_循环神经网络_06),然后这个网络可以学到每个单词的潜在表达(向量)。但是,自然语句的语序关系考虑了吗?

“What time is it?”,这句话包含4个单词(标点忽略),当一个人说出前3个单词的时候,听者会有很大概率想到"it"这个单词。但是我们上面提到的模型循环神经网络 RNN LSTM GRU 笔记_循环神经网络_06做不到啊,前3个单词分别喂入网络让其学习后,再喂入"it"时,循环神经网络 RNN LSTM GRU 笔记_循环神经网络_06丝毫不会记得之前以什么顺序喂入过哪些单词。换句话说就是,我们把一个完整的句子拆成单词,让网络去学习每个单词,却不学习句子(例如英语极差的我在参加英语听力考试,就算我听到了每一个单词,却不知道组合起来是啥意思)。

那能不能既让网络学到每个单词,又学到整个句子的语序逻辑呢?于是,循环神经网络诞生了。循环神经网络(Recurrent Neural Network,RNN)是一种用于处理序列数据的神经网络。比如某个单词的意思会因为上文提到的内容不同而有不同的含义,RNN就能够很好地解决这类问题。

2.2 RNN基本方法

RNN在上文提到的模型循环神经网络 RNN LSTM GRU 笔记_循环神经网络_06上做了一个修改,让隐层单元循环神经网络 RNN LSTM GRU 笔记_lstm_12自己到自己进行全连接但是,这样做的目的并不是让单词循环神经网络 RNN LSTM GRU 笔记_rnn_13的隐层学习自己的隐层,而是把自己的隐层喂给下一个单词循环神经网络 RNN LSTM GRU 笔记_lstm_14学习。如此一来,循环神经网络 RNN LSTM GRU 笔记_lstm_14就从循环神经网络 RNN LSTM GRU 笔记_lstm_16中学到一点东西。

具体来说,RNN新增的这个全连接的权重循环神经网络 RNN LSTM GRU 笔记_rnn_17不是给自己用的,而是给下一个单词用的。如下图,左边是一个简单RNN模型,右边是向这个RNN模型分别喂入三个单词循环神经网络 RNN LSTM GRU 笔记_gru_18,每喂入一个单词,隐层都会以权重循环神经网络 RNN LSTM GRU 笔记_rnn_17把自己喂入下一个单词的隐层。

循环神经网络 RNN LSTM GRU 笔记_gru_20

循环神经网络 RNN LSTM GRU 笔记_rnn_21
循环神经网络 RNN LSTM GRU 笔记_lstm_22

注意!图中RNN模型的参数U,V,W均为矩阵。输入循环神经网络 RNN LSTM GRU 笔记_rnn_13是单词的词嵌入向量(embedding),输出是每个单词的潜在表达(后面的单词隐含着前面的单词)。

2.3 拓展

  1. 上面介绍的简单RNN模型只有一个隐层,实际应用中可以有多个隐层,如
  2. 循环神经网络 RNN LSTM GRU 笔记_循环神经网络_24

  3. 上面介绍的RNN模型是单向的,在实际应用中,常常使用BiRNN(双向循环神经网络)表现效果更佳。具体来说,就是在上面的RNN模型中,增加一个并联的隐层,从右向左传播,同时多出一个参数循环神经网络 RNN LSTM GRU 笔记_lstm_25
  4. 循环神经网络 RNN LSTM GRU 笔记_循环神经网络_26

  5. 前两种拓展是可以结合起来的

参考: RNN-简书文章一文搞懂RNN(循环神经网络)基础篇

3. LSTM

3.1 概念

长短期记忆(Long short-term memory, LSTM)是一种特殊的RNN,主要是为了解决长序列训练过程中的梯度消失梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现

3.2 LSTM基本方法

循环神经网络 RNN LSTM GRU 笔记_基本方法_27

LSTM相对于RNN来说,每个单词对应的LSTM单元向后传播的两个参数:

循环神经网络 RNN LSTM GRU 笔记_rnn_28:隐含长期历史记忆;该数值在传播中改变很慢。
循环神经网络 RNN LSTM GRU 笔记_循环神经网络_29:隐含短期记忆;该数值传播中变化较大。类比于RNN中的循环神经网络 RNN LSTM GRU 笔记_lstm_30

下面看看LSTM内部干了什么:

循环神经网络 RNN LSTM GRU 笔记_gru_31

3.3 原理解释

LSTM一共有三个门控:遗忘门(forget gate)、输入门(input gate)、输出门(output gate),下面左图标注了LSTM三个门所处的位置,右图标注了GRU两个门所处的位置:

循环神经网络 RNN LSTM GRU 笔记_基本方法_32

  1. 遗忘阶段。遗忘门对前面的LSTM单元传播过来的长期记忆循环神经网络 RNN LSTM GRU 笔记_基本方法_33选择性遗忘;
  2. 记忆阶段。输入门对当前输入选择性记忆,然后与遗忘阶段得到的长期记忆相加,作为本单元的长期记忆;
  3. 输出阶段。输出门对前两个阶段得到的输出做一次选择,结果为当前lstm单元的短期记忆;另外,可以对该短期记忆做一次全连接神经网络得到该lstm单元最终输出循环神经网络 RNN LSTM GRU 笔记_gru_34

LSTM核心是通过循环神经网络 RNN LSTM GRU 笔记_gru_35,循环神经网络 RNN LSTM GRU 笔记_基本方法_36,循环神经网络 RNN LSTM GRU 笔记_基本方法_37这三个门控实现对过去信息以及当前输入信息的综合处理。这三个门都是由Sigmoid神经网络层输出0到1之间的数字,这个数字描述每个组件有多少信息可以通过, 0表示不通过任何信息,1表示全部通过。通过门控状态来控制传输状态,记住需要长时间记忆的,忘记不重要的信息;而不像普通的RNN那样只能够“呆萌”地仅有一种记忆叠加方式。对很多需要“长期记忆”的任务来说,尤其好用。

参考:人人都能看懂的LSTM

上面只是展示了一个LSTM单元所进行的操作,实际操作中多个LSTM单元是如何运行的呢?如图所示:

循环神经网络 RNN LSTM GRU 笔记_rnn_38


参考:

4. GRU

4.1 概念与背景

GRU(Gate Recurrent Unit)是循环神经网络(Recurrent Neural Network, RNN)的一种。和LSTM(Long-Short Term Memory)一样,也是为了解决长期记忆和反向传播中的梯度等问题而提出来的。 GRU和LSTM在很多情况下实际表现上相差无几,那么为什么我们要使用新人GRU(2014年提出)而不是相对经受了更多考验的LSTM(1997提出)呢?因为GRU的训练参数更少,模型训练效率更高。

4.2 GRU基本方法

循环神经网络 RNN LSTM GRU 笔记_lstm_39

GRU模型的输入输出结构与RNN相同。 每个单词对应的GRU单元向后传播1个参数:

循环神经网络 RNN LSTM GRU 笔记_循环神经网络_29:实际等于当前GRU单元的输出循环神经网络 RNN LSTM GRU 笔记_gru_41

循环神经网络 RNN LSTM GRU 笔记_基本方法_42


循环神经网络 RNN LSTM GRU 笔记_循环神经网络_43是Hadamard Product,也就是操作矩阵中对应的元素相乘,要求两个相乘矩形状相同; 循环神经网络 RNN LSTM GRU 笔记_基本方法_44代表进行矩阵加法。下面是图中3个隐层状态的计算公式(其中,循环神经网络 RNN LSTM GRU 笔记_gru_45表示两个列向量拼接):

  1. 控制重置的门控(reset gate);用于重置前一个GRU单元传来的循环神经网络 RNN LSTM GRU 笔记_循环神经网络_46
    循环神经网络 RNN LSTM GRU 笔记_基本方法_47
  2. 控制更新的门控(update gate);用于同时控制遗忘记忆
    循环神经网络 RNN LSTM GRU 笔记_循环神经网络_48
  3. 输入特征提取;首先用门控r重置(过滤)上一个GRU单元传过来的信息循环神经网络 RNN LSTM GRU 笔记_循环神经网络_46,再与当前GRU单元的输入循环神经网络 RNN LSTM GRU 笔记_基本方法_50拼接,然后经过全连接层得到当前输入的特征表达循环神经网络 RNN LSTM GRU 笔记_gru_51(该表达隐含少量过去的信息):
    循环神经网络 RNN LSTM GRU 笔记_rnn_52
    循环神经网络 RNN LSTM GRU 笔记_gru_53
  4. 记忆更新阶段;对过去信息和当前特征信息进行取舍,由第2步得到的更新门控循环神经网络 RNN LSTM GRU 笔记_lstm_54来控制比例。
    循环神经网络 RNN LSTM GRU 笔记_gru_55

GRU很聪明的一点就在于,仅使用了同一个门控循环神经网络 RNN LSTM GRU 笔记_rnn_56 就同时可以进行遗忘和选择记忆(LSTM则要使用多个门控);或者可以理解为:当前要记忆的特征,那就不从历史信息中获取,反之,当前不记忆的特征,那就从历史中获取

参考:人人都能看懂的GRU


标签:GRU,RNN,单词,神经网络,记忆,LSTM
From: https://blog.51cto.com/u_16125110/6404562

相关文章

  • LSTM模型
    摘自:http://www.voidcn.com/article/p-ntafyhkn-zc.html(二)LSTM模型1.长短期记忆模型(long-shorttermmemory)是一种特殊的RNN模型,是为了解决RNN模型梯度弥散的问题而提出的;在传统的RNN中,训练算法使用的是BPTT,当时间比较长时,需要回传的残差会指数下降,导致网络权重更新缓慢,无法体现出R......
  • LSTM入门学习——结合《LSTM模型》文章看
    摘自:https://zybuluo.com/hanbingtao/note/581764长短时记忆网络的思路比较简单。原始RNN的隐藏层只有一个状态,即h,它对于短期的输入非常敏感。那么,假如我们再增加一个状态,即c,让它来保存长期的状态,那么问题不就解决了么?如下图所示:新增加的状态c,称为单元状态(cellstate)。我们把上......
  • m基于HOG特征提取和GRNN网络的人体姿态识别算法matlab仿真,样本为TOF数据库的RGB-D深
    1.算法仿真效果matlab2022a仿真结果如下:TOF数据库如下:2.算法涉及理论知识概要1、HOG特征:方向梯度直方图(HistogramofOrientedGradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统计图像局部区域的梯度方向直方图来构成特征。......
  • m基于HOG特征提取和GRNN网络的人体姿态识别算法matlab仿真,样本为TOF数据库的RGB-D深
    1.算法仿真效果matlab2022a仿真结果如下:  TOF数据库如下:      2.算法涉及理论知识概要1、HOG特征:        方向梯度直方图(HistogramofOrientedGradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子。它通过计算和统......
  • RWKV – transformer 与 RNN 的强强联合
    在NLP(NaturalLanguageProcessing,自然语言处理)领域,ChatGPT和其他的聊天机器人应用引起了极大的关注。每个社区为构建自己的应用,也都在持续地寻求强大、可靠的开源模型。自Vaswani等人于2017年首次提出AttentionIsAllYouNeed之后,基于transformer的强大的模型......
  • 使用LSTM做电影评论负面检测——使用朴素贝叶斯才51%,但是使用LSTM可以达到99%准确度
     基本思路:每个评论取前200个单词。然后生成词汇表,利用词汇index标注评论(对每条评论的前200个单词编号而已),然后使用LSTM做正负评论检测。embedding层本质上是word2vec!!!在进行数据降维,但是不是所有的LSTM都需要这个,比如在图像检测mnist时候,就没有这层!importtensorflowastffromt......
  • 使用CNN做电影评论的负面检测——本质上感觉和ngram或者LSTM同,因为CNN里图像检测卷积
    代码如下:from__future__importdivision,print_function,absolute_importimporttensorflowastfimporttflearnfromtflearn.layers.coreimportinput_data,dropout,fully_connectedfromtflearn.layers.convimportconv_1d,global_max_poolfromtflearn.layers......
  • 使用神经网络-垃圾邮件检测-LSTM或者CNN(一维卷积)效果都不错【代码有问题,pass】
     fromsklearn.feature_extraction.textimportCountVectorizerimportosfromsklearn.naive_bayesimportGaussianNBfromsklearn.model_selectionimporttrain_test_splitfromsklearnimportmetricsimportmatplotlib.pyplotaspltimportnumpyasnpfromskle......
  • 在树莓派上实现numpy的LSTM长短期记忆神经网络做图像分类,加载pytorch的模型参数,推理mn
    这几天又在玩树莓派,先是搞了个物联网,又在尝试在树莓派上搞一些简单的神经网络,这次搞得是LSTM识别mnist手写数字识别训练代码在电脑上,cpu就能训练,很快的:importtorchimporttorch.nnasnnimporttorchvisionimportnumpyasnpimportosfromPILimportImage#定义LSTM......
  • 李宏毅语音课程-RNN-T模型
    rnn-tdecoder:给一个输入h,输出多个字符直到输出空字符Φ。接着输入下一个MCCC特征实际会在输出字符的后面会加一个RNN(最上面的蓝色块)。把原来的RNN剔除(中间黄色块)。原因:1.增加的RNN相当于一个语言模型LM,可以提前从text中训练。2.方便RNN-T的训练。  训练时:穷举所......