文章来源于磐创AI,作者VK


  磐创AI分享  

作者 | Renu Khandelwal

编译 | VK

来源 | Medium

我们从以下问题开始

  • 循环神经网络能解决人工神经网络和卷积神经网络存在的问题。

  • 在哪里可以使用RNN?

  • RNN是什么以及它是如何工作的?

  • 挑战RNN的消梯度失和梯度爆炸

  • LSTM和GRU如何解决这些挑战

假设我们正在写一条信息“Let’s meet for___”,我们需要预测下一个单词是什么。下一个词可以是午餐、晚餐、早餐或咖啡。我们更容易根据上下文作出推论。假设我们知道我们是在下午开会,并且这些信息一直存在于我们的记忆中,那么我们就可以很容易地预测我们可能会在午餐时见面。

当我们需要处理需要在多个时间步上的序列数据时,我们使用循环神经网络(RNN)

传统的神经网络和CNN需要一个固定的输入向量,在固定的层集上应用激活函数产生固定大小的输出。

例如,我们使用128×128大小的向量的输入图像来预测狗、猫或汽车的图像。我们不能用可变大小的图像来做预测

现在,如果我们需要对依赖于先前输入状态(如消息)的序列数据进行操作,或者序列数据可以在输入或输出中,或者同时在输入和输出中,而这正是我们使用RNNs的地方,该怎么办。

在RNN中,我们共享权重并将输出反馈给循环输入,这种循环公式有助于处理序列数据。

RNN利用连续的数据来推断谁在说话,说什么,下一个单词可能是什么等等。

RNN是一种神经网络,具有循环来保存信息。RNN被称为循环,因为它们对序列中的每个元素执行相同的任务,并且输出元素依赖于以前的元素或状态。这就是RNN如何持久化信息以使用上下文来推断。

RNN是一种具有循环的神经网络

RNN在哪里使用?

前面所述的RNN可以有一个或多个输入和一个或多个输出,即可变输入和可变输出。

RNN可用于

  • 分类图像

  • 图像采集

  • 机器翻译

  • 视频分类

  • 情绪分析

RNN是如何工作的?

先解释符号。

  • h是隐藏状态

  • x为输入

  • y为输出

  • W是权重

  • t是时间步长

当我们在处理序列数据时,RNN在时间步t上取一个输入x。RNN在时间步t-1上取隐藏状态值来计算时间步t上的隐藏状态h并应用tanh激活函数。我们使用tanh或ReLU来表示输出和时间t的非线性关系。

将RNN展开为四层神经网络,每一步共享权值矩阵W。

隐藏状态连接来自前一个状态的信息,因此充当RNN的记忆。任何时间步的输出都取决于当前输入以及以前的状态。

与其他对每个隐藏层使用不同参数的深层神经网络不同,RNN在每个步骤共享相同的权重参数。

我们随机初始化权重矩阵,在训练过程中,我们需要找到矩阵的值,使我们有理想的行为,所以我们计算损失函数L。损失函数L是通过测量实际输出和预测输出之间的差异来计算的。用交叉熵函数计算L。

RNN,其中损失函数L是各层所有损失的总和

为了减少损失,我们使用反向传播,但与传统的神经网络不同,RNN在多个层次上共享权重,换句话说,它在所有时间步骤上共享权重。这样,每一步的误差梯度也取决于前一步的损失。

在上面的例子中,为了计算第4步的梯度,我们需要将前3步的损失和第4步的损失相加。这称为通过Time-BPPT的反向传播。

我们计算误差相对于权重的梯度,来为我们学习正确的权重,为我们获得理想的输出。

因为W在每一步中都被用到,直到最后的输出,我们从t=4反向传播到t=0。在传统的神经网络中,我们不共享权重,因此不需要对梯度进行求和,而在RNN中,我们共享权重,并且我们需要在每个时间步上对W的梯度进行求和。

在时间步t=0计算h的梯度涉及W的许多因素,因为我们需要通过每个RNN单元反向传播。即使我们不要权重矩阵,并且一次又一次地乘以相同的标量值,但是时间步如果特别大,比如说100个时间步,这将是一个挑战。

如果最大奇异值大于1,则梯度将爆炸,称为爆炸梯度。

如果最大奇异值小于1,则梯度将消失,称为消失梯度。

权重在所有层中共享,导致梯度爆炸或消失

对于梯度爆炸问题,我们可以使用梯度剪裁,其中我们可以预先设置一个阈值,如果梯度值大于阈值,我们可以剪裁它。

为了解决消失梯度问题,常用的方法是使用长短期记忆(LSTM)或门控循环单元(GRU)。

在我们的消息示例中,为了预测下一个单词,我们需要返回几个时间步骤来了解前面的单词。我们有可能在两个相关信息之间有足够的差距。随着差距的扩大,RNN很难学习和连接信息。但这反而是LSTM的强大功能。

长短时记忆网络(LSTM)

LSTMs能够更快地学习长期依赖关系。LSTMs可以学习跨1000步的时间间隔。这是通过一种高效的基于梯度的算法实现的。

为了预测消息中的下一个单词,我们可以将上下文存储到消息的开头,这样我们就有了正确的上下文。这正是我们记忆的工作方式。

让我们深入了解一下LSTM架构,了解它是如何工作的

LSTMs的行为是在很长一段时间内记住信息,因此它需要知道要记住什么和忘记什么。

LSTM使用4个门,你可以将它们认为是否需要记住以前的状态。单元状态在LSTMs中起着关键作用。LSTM可以使用4个调节门来决定是否要从单元状态添加或删除信息。

这些门的作用就像水龙头,决定了应该通过多少信息。

  1. LSTM的第一步是决定我们是需要记住还是忘记单元的状态。遗忘门使用Sigmoid激活函数,输出值为0或1。遗忘门的输出1告诉我们要保留该值,值0告诉我们要忘记该值。

  1. 第二步决定我们将在单元状态中存储哪些新信息。这有两部分:一部分是输入门,它通过使用sigmoid函数决定是否写入单元状态;另一部分是使用tanh激活函数决定有哪些新信息被加入。

  1. 在最后一步中,我们通过组合步骤1和步骤2的输出来创建单元状态,步骤1和步骤2的输出是将当前时间步的tanh激活函数应用于输出门的输出后乘以单元状态。Tanh激活函数给出-1和+1之间的输出范围

  2. 单元状态是单元的内部存储器,它将先前的单元状态乘以遗忘门,然后将新计算的隐藏状态(g)乘以输入门i的输出。

最后,输出将基于单元状态

从当前单元状态到前一单元状态的反向传播只有遗忘门的单元相乘,没有W的矩阵相乘,这就利用单元状态消除了消失和爆炸梯度问题

LSTM通过决定忘记什么、记住什么、更新哪些信息来决定何时以及如何在每个时间步骤转换记忆。这就是LSTMs如何帮助存储长期记忆。

以下LSTM如何对我们的消息进行预测的示例

GRU,LSTM的变体

GRU使用两个门,重置门和一个更新门,这与LSTM中的三个步骤不同。GRU没有内部记忆

重置门决定如何将新输入与前一个时间步的记忆相结合。

更新门决定了应该保留多少以前的记忆。更新门是我们在LSTM中理解的输入门和遗忘门的组合。

GRU是求解消失梯度问题的LSTM的一个简单变种

原文链接:https://medium.com/datadriveninvestor/recurrent-neural-network-rnn-52dd4f01b7e8

✄------------------------------------------------

看到这里,说明你喜欢这篇文章,请点击「在看」或顺手「转发」「点赞」。

往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑获取一折本站知识星球优惠券,复制链接直接打开:https://t.zsxq.com/yFQV7am本站qq群1003271085。加入微信群请扫码进群:

【深度学习】循环神经网络(RNN)简易教程相关推荐

  1. 深度学习 --- 循环神经网络RNN详解(BPTT)

    今天开始深度学习的最后一个重量级的神经网络即RNN,这个网络在自然语言处理中用处很大,因此需要掌握它,同时本人打算在深度学习总结完成以后就开始自然语言处理的总结,至于强化学习呢,目前不打算总结了,因为 ...

  2. 深度学习 循环神经网络RNN

    循环神经网络简介: 循环神经网络(Recurrent Neural Networks)是一种特殊的神经网络结构, 它是根据"人的认知是基于过往的经验和记忆"这一观点提出的. 它与D ...

  3. 深度学习---循环神经网络RNN详解(LSTM)

    上一节我们详细讲解了RNN的其中一个学习算法即BPTT,这个算法是基于BP的,只是和BP不同的是在反向传播时,BPTT的需要追溯上一个时间的权值更新,如下图,当前时刻是s(t),但是反向传播时,他需要 ...

  4. MLK | 一文理清深度学习循环神经网络

    MLK,即Machine Learning Knowledge,本专栏在于对机器学习的重点知识做一次梳理,便于日后温习,内容主要来自于<百面机器学习>一书,结合自己的经验与思考做的一些总结 ...

  5. 深度学习-循环神经网络(RNN)

    作者: 明天依旧可好 QQ交流群: 807041986 注:关于深度学习的相关问题,若本文未涉及可在下方留言告诉我,我会在文章中进行补充的. 原文链接:https://mtyjkh.blog.csdn ...

  6. 深度学习--循环神经网络(Recurrent Neural Network)

    RNN(Recurrent Neural Network)是怎么来的? 一些应用场景,比如说写论文,写诗,翻译等等. 既然已经学习过神经网络,深度神经网络,卷积神经网络,为什么还要学习RNN? 首先我 ...

  7. 「NLP」 深度学习NLP开篇-循环神经网络(RNN)

    https://www.toutiao.com/a6714260714988503564/ 从这篇文章开始,有三AI-NLP专栏就要进入深度学习了.本文会介绍自然语言处理早期标志性的特征提取工具-循环 ...

  8. 深度学习~循环神经网络RNN, LSTM

    目录 1. 循环神经网络RNN 1.1 RNN出现背景 1.2 RNN概念 2. LSTM 2.1 LSTM出现背景 2.2 LSTM结构 参考 1. 循环神经网络RNN 1.1 RNN出现背景 pr ...

  9. 【NLP】 深度学习NLP开篇-循环神经网络(RNN)

    从这篇文章开始,有三AI-NLP专栏就要进入深度学习了.本文会介绍自然语言处理早期标志性的特征提取工具-循环神经网络(RNN).首先,会介绍RNN提出的由来:然后,详细介绍RNN的模型结构,前向传播和 ...

  10. 花书+吴恩达深度学习(十五)序列模型之循环神经网络 RNN

    目录 0. 前言 1. RNN 计算图 2. RNN 前向传播 3. RNN 反向传播 4. 导师驱动过程(teacher forcing) 5. 不同序列长度的 RNN 如果这篇文章对你有一点小小的 ...

最新文章

  1. Oracle Database Appliance ODA开箱视频
  2. 科技在进步,一文带你看看 MATLAB R2020a 为工程师和科学家带来哪些 AI 功能?
  3. 机器学习进阶-优化的近邻算法
  4. 隐藏apache版本号的方法
  5. linux下makefile中cp,make与makefile 的理解
  6. P4899 [IOI2018] werewolf 狼人(kruskal 重构树 + 主席树)
  7. 大学计算机课程设计日历,课程设计题三:日历和数字钟
  8. mysql怎么查主键是否重复数据库_数据库插入前判断主键重复与否的方法
  9. 多线程例题练手(c入门)
  10. 【语音识别】基于matlab带动量项的BP神经网络语音识别【含Matlab源码 430期】
  11. 如何使用 身份证归属地查询API
  12. 晶振波形不是正弦波_求助各位!有源晶振出来的波形是方波还是正弦波?
  13. python 对象的销毁_python对象销毁(垃圾回收)
  14. Error starting userland proxy: listen tcp4 0.0.0.0:8005: bind: address alrea
  15. UE4 材质 溶解材质
  16. 如何增加架设传奇服务器,做为一个新手如何架设传奇
  17. asp.net core webAPI学习笔记(三)资源请求
  18. 软件架构师需要什么能力?
  19. 1. 计算机网络和因特网
  20. 工艺角(process corner)

热门文章

  1. 标准C++中的string类的用法总结(转)
  2. [BZOJ 5072][Lydsy1710月赛]小A的树
  3. 现在的人工智能逆天到什么地步了?
  4. Linux 编译安装内核
  5. 关于团队发展的若干想法(欢迎讨论)
  6. 计算机系统具有运行可靠性,计算机系统运行可靠性技术.doc
  7. java创建日程到期提醒_Mac用户必备日程时间管理器,有计划有效率的人生才算完美!...
  8. JavaSE(十四)——网络编程(IP地址、端口号、TCP、UDP)
  9. python教程怎么读_python怎么读本地文件
  10. reverse()反转字符串的正确使用方式