RNN总结

文章目录

  • RNN总结
  • 前言
  • 一、解决的问题
  • 二、RNN基本模型
    • 1.基本神经元
    • 2.RNN整体结构
      • 2.1将隐藏层中的值传入
      • 2.2将输出的值传入
      • 2. 3双向传播
  • 三、 Long Short-Term Memory 长短期记忆 LSTM
  • 四、 RNN的学习
    • 1.损失函数
    • 2.困难的训练过程

前言

该篇博客是笔者学习李宏毅老师课程后所写的学习笔记,如文中有错误,感谢大家指正

一、解决的问题

  我们以前学过的一些神经网络如CNN、全连接神经网络,虽然能完成特征提取、分类预测的任务,但是它在work的过程中并不能记住前文,例如在下面翻译句子这个例子中,两个对应位置除动词外其他完全相同,但语义完全相反的句子,普通的网络不能识别出他们的区别,为了解决这个问题,我们引入Recurrent Neural Networks——RNN

二、RNN基本模型

1.基本神经元

  RNN的一个基本神经元不仅由输入、输出、隐藏层组成,它还有一个存储单元,用来存储前一个神经元计算后传输进来的值,这样就使得一个输出不是仅仅与对应的单输入有关,而是它前面的神经元输入都能对它产生影响(单向传播的RNN)。
下面我们通过一个样例来具体说明RNN的存储单元是如何工作的:
参数说明:在这个神经元中所有的权重都是1,没有修正项,所有的激活函数都是线性函数,存储单元的初始值是0。
(1)第一次两个输入为1,通过线性激活函数,得到隐藏层中两个值为2
(2)将存储单元中的值0,更新为隐藏层中的值2
(3)两个隐藏层中的值通过线性函数计算,两个输出值为4
(4)第二次两个输入为1,通过线性激活函数,将值2传入隐藏层
(5)存储单元中的两个2一起两个隐藏层,与新传入的2相加,得到隐藏层中的值为6
(6)将存储单元中的值更新为6
(7)通过线性激活函数,得到输出为12


  由上例我们可以发现,两次同样的输入,因为存储单元的存在,两个输出完全不同,由此可以看出,对于RNN序列输入的顺序很重要,对一个输入序列的内部顺序做出微调,输出的结果可能大相径庭。

2.RNN整体结构

  通过上文对一个神经元如何工作做分析后,我们对RNN一个神经元的存储记忆功能有了初步的了解,下面我们简单介绍RNN网络如果工作(一个局部)

2.1将隐藏层中的值传入

  以一个五单词输入的序列为例,将X1X^1X1输入后计算出隐藏层的值 a1a^1a1和y1y^1y1,并将a1a^1a1的值放入存储单元,在计算X2X^2X2时将存储单元中的值一起传入a2a^2a2中计算,这样就是一个输入不仅对它对应的输出有影响,对它后面的输出都会产生影响。

2.2将输出的值传入

  上文介绍的Elman Network在工作过程中将隐藏层中的值记忆并传播,二Jordan Network将上一层的输出记忆,并在矩阵运算后传入下一层的隐藏层中

2. 3双向传播

  前面介绍的两种RNN网络虽然有记忆功能,但是只能是前面的输入对后面的输出造成影响,而后面的输入无法对前面的输出造成影响,为了解决这个问题,也可以使用双向传播的方式。在双向传播的网络中,让正向传播和反向传播的隐藏共同作用,一起得到输出yyy

三、 Long Short-Term Memory 长短期记忆 LSTM

  LSTM是普通RNN的一个进阶版,对存储单元进行改进。
  LSTM的一个存储单元有四个输入和一个输出,在单输出单输出的基础上,添加了三个控制门,分别为input gate、output gate和forget gate,通过三个控制门的共同作用完成对memory中内容存储、输入的控制
  上图中输入门为zzz ,输入控制门为ziz_izi​,遗忘控制门为 zfz_fzf​(遗忘门打开表示记住内容,遗忘门关闭表示忘记内容,与正常语义相反) ,输出控制门为 zoz_ozo​
计算过程如下:
(1)输入zzz通过激活函数后得到g(z)g(z)g(z)
(2)输入控制门的ziz_izi​通过激活函数后得到f(zi)f(z_i)f(zi​)
(3)将g(z)g(z)g(z)和f(zi)f(z_i)f(zi​)相乘,并传给存储单元
(4)遗忘控制们的zfz_fzf​通过激活函数后得到f(zf)f(z_f)f(zf​),并将存储单元memory中的值c与f(zf)f(z_f)f(zf​)相乘
(5)将memory中的值c更新为g(z)f(zi)g(z)f(z_i)g(z)f(zi​)+cf(zf)cf(z_f)cf(zf​),记作c′c^{'}c′
(6)将c′c^{'}c′通过激活函数后得到h(c′)h(c^{'})h(c′)
(6)将输出控制门的zoz_ozo​通过激活函数得到f(zo)f(z_o)f(zo​),
(7)将h(c′)h(c^{'})h(c′)f(zo)f(z_o)f(zo​)相乘并输入
在这里,激活函数使用sigmoid函数,因为它的输出在0和1之间,0表示控制们关闭,1表示控制门开启


  下面我们用一个具体计算案例说明计算过程:(图中只计算了输入部分,遗忘和输出请读者自行计算)

  在这个例子中,函数g和h使用线性函数,f都使用sigmoid函数。
通过计算过程我们可以看出:
(1)只有当输入门打开时,输入值才能传入到memory中;
(2)当遗忘门打开时,会将上一时刻的内容和此刻的输入相加,否则控制门的值为零,与ccc相乘后为0,遗忘上一时刻的值,此时memory只有新传入的值;
(3)只有当输出门打开时,值才能输出

注意:输出控制门、输出控制门、遗忘控制门的开关是通过数据集学习而来,不是人为设置的,即图片中的权重和bias校正项是学习更新得出


  在LSTM的网络中,一个输入xtx^txt 送入以后,要先分别和四个权重向量相乘,生成四个新的值zzz、ziz^izi、zfz^fzf、zoz^ozo,再将其分别送入激活函数中进行计算。
  不难发现,RNN训练时直接把向量或序列送入模型,即可通过神经元完成计算;而LSTM是四输入一输出,除了input,还有三个控制门,这使得LSTM的参数量是普通网络的四倍,这也使得它可能发生过拟合。
  在实际的网络中输入向量通常不只是xtx^txt,而是将上一个节点memory中存储的ct−1c^{t-1}ct−1和送入激活函数前的ht−1h^{t-1}ht−1排列起来,一起作为输入

四、 RNN的学习

1.损失函数

在通过网络预测出输出yiy^iyi,将yi用向量表示,在这个向量中只有它对应的词义是1,其他都是零,将其与标签比对,从而算出损失函数(笔者需要再深入学习,此处描述可能不严谨)

2.困难的训练过程

  和普通的Neural Networks相同,RNN通过计算损失函数、反向传播的方式进行参数更新,但在实践中发现RNN的网络很难训练,每次迭代的总损失值变化很大。这是因为在RNN的训练中,一个参数被反复使用,所以一个参数发生微小的变化,最终可能带来巨大的变化,即发生了梯度消失,或梯度爆炸。
  用LSTM可以有效改善,原因如下:使用LSTM可以解决梯度消失的问题,因为RNN中每个时间点的memory都会被洗掉,然后放入新的值,但是LSTM是以前的memory中的ct−1c^{t-1}ct−1乘上遗忘控制门的f(zf)f(z_f)f(zf​)再和新送入memory的g(z)f(zi)g(z)f(z_i)g(z)f(zi​)相加,所以如果现在的权重能影响到memory中的值的话,一但发生影响,这个影响会始终存在,而RNN采用重置的方式更新memory,产生的影响会消失。所以LSTM可以解决梯度消失的问题。
  注意:当初用LSTM解决梯度消失的时候,没有forget gate,所以现在要通过参数保证遗忘门多数情况下都是开着的。
  GRU只用两个门,是简单版的LSTM,参数少三分之一,过拟合的情况缓解。
将input和forget门联动,input门打开,forget门关闭,即旧的值清掉新的值才能放进来

RNNLSTM学习总结相关推荐

  1. 中国联通净增5G用户数超越中国电信,但夺回千年老二或是梦想

    在中国联通和中国移动公布了5月份的用户数据之后,中国电信也公布了它的数据,数据显示中国联通的净增5G用户数领先中国电信80多万,业界有人士认为中国联通保持目前的势头或将超越中国电信,夺回运营商市场的千 ...

  2. 2017-12-29-effective-python-02-functions

    layout title keywords category tags post 编写高质量的python代码 -- 02. 函数 python python python 2017-12-29-ef ...

  3. [深度学习TF2][RNN-LSTM]文本情感分析包含(数据预处理-训练-预测)

    基于LSTM的文本情感分析 0. 前言 1. 数据下载 2. 训练数据介绍 3. 用到Word2Vector介绍 wordsList.npy介绍 wordVectors.npy介绍 4 数据预处理 4 ...

  4. [深度学习]-基于tensorflow的CNN和RNN-LSTM文本情感分析对比

    基于tensorflow的CNN和LSTM文本情感分析对比 1. 背景介绍 2. 数据集介绍 2.0 wordsList.npy 2.1 wordVectors.npy 2.2 idsMatrix.n ...

  5. 深度学习领域四个不可不知的重大突破

    为何阅读本文? 无论该领域中的从业者,或是企业组织,为了运用深度学习技术,首先需要做好两个准备: "能做什么":了解深度学习领域的最新进展能够用来做什么. "怎么做&qu ...

  6. RNN-LSTM循环神经网络-03Tensorflow进阶实现

    全部代码:点击这里查看 关于Tensorflow实现一个简单的二元序列的例子可以点击这里查看 关于RNN和LSTM的基础可以查看这里 这篇博客主要包含以下内容 训练一个RNN模型逐字符生成文本数据(最 ...

  7. 深度学习在轨迹数据挖掘中的应用研究综述

    深度学习在轨迹数据挖掘中的应用研究综述 人工智能技术与咨询 来源:< 计算机科学与应用> ,作者李旭娟等 关键词: 深度学习:数据挖掘:轨迹挖掘:长短时记忆:序列到序列 摘要: 在过去十年 ...

  8. [深度学习-实战篇]情感分析之卷积神经网络-TextCNN,包含代码

    0. 前言 在"卷积神经网络"中我们探究了如何使用二维卷积神经网络来处理二维图像数据.在之前的语言模型和文本分类任务中,我们将文本数据看作是只有一个维度的时间序列,并很自然地使用循 ...

  9. [深度学习-原理篇]什么是循环神经网络RNN与LSTM

    1. 什么是 RNN 循环神经网络(Recurrent Neural Network,RNN)是一种以序列数据为输入来进行建模的深度学习模型,它是 NLP 中最常用的模型. 2. RNN 的结构 RN ...

最新文章

  1. 应用Etherchannel扩展企业服务的高可用性
  2. 【FPGA】相关介绍
  3. 如何在Eclipse中显示行号
  4. java中的方法在哪里_Java中的本机方法是什么,应在哪里使用?
  5. c语言输出后面空格,新人提问:如何将输出时每行最后一个空格删除
  6. 2 在会计中未发现任何后继凭证
  7. 微信公众平台开发问答 【转发】
  8. 【ERROR】:LNK1123: failure during conversion to COFF
  9. 邮件服务器拦截与反垃圾邮箱的相关方法
  10. 联想计算机phoenix award bios,phoenix-Award BIOS
  11. flask ai 简单语音对话
  12. 世界著名管理定律:管人用人育人留人定律
  13. CSP-S2020总结
  14. 计算机使用hdmi需要设置方法,如何在计算机显示器上切换HDMI
  15. 《金牌网管师——助理级网吧网管》目录
  16. 把edge默认上网页面改为百度
  17. 《Kotin 极简教程》第13章 使用 Kotlin 和 Anko 的Android 开发
  18. 江苏“同心圆”工程为银发投资安全设“保护圈”
  19. 如何启动与终止PHP CLI程序的后台运行
  20. sed: -e expression #1, char 0: no previous regular expression

热门文章

  1. 基于uni-app开发的仿奈雪の茶小程序前端模板
  2. 美国杜克大学计算机学院,杜克大学计算机专业留学的生活经历故事
  3. ognlognl表达式 研究
  4. 使用工具【ZipCenOp.jar】自动修复zip伪加密文件
  5. Java中使用MVC三层架构做登陆验证
  6. 单芯片电容测量方案PCAP01原理
  7. 实心和空心哪个抗弯能力强_同样材质,同样长度,质量相同的空心管和实心管,实心管抗弯曲能力强 (4.0分)...
  8. 辉仔日记之学代码第十五期——IO流图书管理系统
  9. u-boot for tiny210 version2.0(by liukun321咕唧咕唧)
  10. MS51替换N76E003注意事项