松鼠乐园 松鼠乐园
  • 注册
  • 登录
  • 首页
  • 快捷入口
    • Vue
    • Tensorflow
    • Springboot
    • 语言类
      • CSS
      • ES5
      • ES6
      • Go
      • Java
      • Javascript
    • 工具类
      • Git
      • 工具推荐
    • 服务器&运维
      • Centos
      • Docker
      • Linux
      • Mac
      • MySQL
      • Nginx
      • Redis
      • Windows
    • 资源类
      • 论文
      • 书籍推荐
      • 后端资源
      • 前端资源
      • html网页模板
      • 代码
    • 性能优化
    • 测试
  • 重大新闻
  • 人工智能
  • 开源项目
  • Vue2.0从零开始
  • 广场
首页 › 人工智能 › 动图理解递归神经网络RNN

动图理解递归神经网络RNN

迦娜王
1年前人工智能
475 0 0
本文作者迈克尔,是AI语音助理领域的机器学习工程师。如果你刚刚开始使用ML并希望学习循环神经网络背后获得一些思想,那么这篇文章就适合你。
动图理解递归神经网络RNN

序列数据

RNN是神经网络,擅长建模序列数据。要理解这意味着什么,让我们做一个实验。假设你拍摄一张球随着时间移动的静态快照。

动图理解递归神经网络RNN

现在你想预测球的移动方向。那么只有上图看到的信息,您将如何预测呢?或许你可以继续猜测,但你提出的任何答案都是随机的猜测。如果不知道球的位置,就没有足够的数据来预测球的位置。

如果你连续记录球的位置的许多快照,你将有足够的信息来做出更好的预测。

动图理解递归神经网络RNN

所以这是一个序列,一个特定的顺序,其中一个事物跟随另一个事物。有了这些信息,您现在可以看到球向右移动。序列数据有多种形式。音频是一种自然的序列。您可以将音频频谱图分成块并将其送入RNN。

文本是另一种形式的序列。您可以将文本分成一系列字符或一系列单词。

顺序记忆

RNN擅长处理预测的序列数据。那么RNN是怎么做到的呢?

嗯,他们通过我喜欢称为顺序记忆的概念来做到这一点。为了获得顺序记忆的意义……我想邀请你说出你脑海中的字母。

ABCDEFGHIJKLMNOPQRSTUVWXYZ

这很简单吧。如果你被教导了这个特定的序列,你应该很容易就可以说出来。现在尝试向后说字母。

ZYXWVUTSRQPONMLKJIHGFEDCBA

我敢打赌这要困难得多,除非你之前练过这个特定的序列,否则你可能会遇到困难。若从字母F开始。

首先,你会在前几个字母上挣扎一下,但是在你的大脑掌握了这个模式,剩下的就会自然而然。因此,有一个非常合乎逻辑的原因说明这是困难的。您将字母表作为序列学习。顺序记忆是一种使大脑更容易识别序列模式的机制。

递归神经网络

所以RNN有顺序记忆的这个抽象概念,但是RNN如何复制这个概念呢?那么,让我们来看一个传统的神经网络,也称为前馈神经网络。它有输入层,隐藏层和输出层。

动图理解递归神经网络RNN

前馈神经网络

我们如何让一个前馈神经网络能够使用以前的信息来影响以后的信息呢?如果我们在神经网络中添加一个可以传递先前信息的循环怎么样?

动图理解递归神经网络RNN

递归神经网络

这基本上就是一个递归的神经网络。RNN具有循环机制,其充当高速公路以允许信息从一个步骤流到下一个步骤。

动图理解递归神经网络RNN

将隐藏状态传递给下一个步骤

此信息是隐藏状态,它是先前输入的表示。让我们通过一个RNN用例来更好地理解它是如何工作的。假设我们想要构建一个现在非常受欢迎的聊天机器人,聊天机器人可以根据用户输入的文本对意图进行分类。

动图理解递归神经网络RNN

解决这个问题。首先,我们将使用RNN对文本序列进行编码。然后,我们将RNN的输出馈送到前馈神经网络,该网络将对意图进行分类。

现在用户输入… What time is it?。首先,我们将句子分解为单个单词。RNN按顺序工作,所以我们一次只能输入一个字。

动图理解递归神经网络RNN

将一个句子分成单词序列

第一步是将“What”输入RNN。RNN编码“what”并产生输出。

动图理解递归神经网络RNN

对于下一步,我们提供单词“time”和上一步中的隐藏状态。RNN现在有关于“what”和“time”这两个词的信息。

动图理解递归神经网络RNN

我们重复这个过程,直到最后一步。您可以通过最后一步看到RNN编码了前面步骤中所有单词的信息。

动图理解递归神经网络RNN

由于最终输出是从序列的其余部分创建的,因此我们应该能够获取最终输出并将其传递给前馈层以对意图进行分类。

动图理解递归神经网络RNN

对于那些喜欢在这里查看代码的人来说,这里用python展示了控制流程。

动图理解递归神经网络RNN

RNN控制流的伪代码

首先,初始化网络层和初始隐藏状态。隐藏状态的形状和维度将取决于您的递归神经网络的形状和维度。然后循环输入,将单词和隐藏状态传递给RNN。RNN返回输出和修改的隐藏状态。你继续循环,直到用完所有的单词。最后,将输出传递给前馈层,然后返回预测。就是这样!进行递归神经网络的正向传递的控制流程是for循环。

梯度消失

你可能已经注意到隐藏状态中奇怪的颜色分布。这是为了说明RNN中被称为短期记忆的问题。

动图理解递归神经网络RNN

RNN的最终隐藏状态

短期记忆是由臭名昭着的消失梯度问题引起的,这在其他神经网络架构中也很普遍。由于RNN处理更多步骤,因此难以保留先前步骤中的信息。正如您所看到的,在最后的时间步骤中,“What”和“time”这两个词的信息几乎不存在。短期记忆和消失梯度是由于反向传播的性质造成的; 反向传播是用于训练和优化神经网络的算法。为了便于理解,让我们来看看反向传播对深度前馈神经网络的影响。

训练神经网络有三个主要步骤。首先,它进行前向传递并进行预测。其次,它使用损失函数将预测与实际值进行比较。损失函数输出一个误差值,该误差值是对网络执行得有多糟糕的估计。最后,它使用该误差值进行反向传播,计算网络中每个节点的梯度。

动图理解递归神经网络RNN

梯度是用于调整网络内部权重的值,使得网络可以进行学习。梯度越大,调整越大,反之亦然。这就是问题所在。在进行反向传播时,层中的每个节点都会根据梯度效果计算它在其前面的层中的梯度。因此,如果在它之前对层的调整很小,那么对当前层的调整将更小。

这会导致梯度在向后传播时呈指数级收缩。由于梯度极小,内部权重几乎没有调整,因此较早的层无法进行任何学习。这就是梯度消失问题。

动图理解递归神经网络RNN

梯度向后传播时变小

让我们看看这如何适用于递归神经网络。您可以将循环神经网络中的每个时间步骤视为一个层。为了训练一个递归神经网络,你使用了一种称为基于时间的反向传播算法的反向传播方法。梯度值在每个时间步长传播时将呈指数级缩小。

动图理解递归神经网络RNN

随着时间的推移,梯度会收缩

同样,梯度用于在神经网络权重中进行调整,从而允许其学习。小梯度意味着小的调整。这导致前面的层无法学习。

由于梯度消失,RNN不会跨时间步骤学习远程依赖性。这意味着在尝试预测用户的意图时,有可能不考虑“what”和“time”这两个词。然后网络不能不只用“is it?”做出最好的猜测。这很模糊,即使是人类也很难。因此,无法在较早的时间步骤上学习会导致网络具有短期记忆。

LSTM和GRU

那么RNN会受到短期记忆的影响,那么我们如何应对呢?为了减轻短期记忆问题,创建了两个专门的递归神经网络。一种叫做长短期记忆或简称LSTM。另一个是门控循环单位或GRU。LSTM和GRU本质上就像RNN一样,但它们能够使用称为“门”的机制来学习长期依赖性。这些门是不同的张量操作,可以学习添加或删除隐藏状态的信息。由于这种能力,短期记忆对他们来说不是一个问题。如果您想了解有关LSTM和GRU的更多信息,您可以在其上查看youtube视频。

结论

总而言之,RNN适用于处理序列数据以进行预测,但却受到短期记忆的影响。原始的RNN有短期记忆问题并不意味着不能用它们,并使用其它更进化的版本,如LSTM或GRU。RNN具有训练更快和使用更少计算资源的好处。这是因为要计算的张量操作较少。当您期望对具有长期依赖性的较长序列建模时,您应该使用LSTM或GRU。

rnn
0
1×1卷积核的两个作用
上一篇
PReLU激活函数
下一篇
评论 (0)

请登录以参与评论。

现在登录
聚合文章
在Gitee收获近 5k Star,更新后的Vue版RuoYi有哪些新变化?
2月前
vue3.x reactive、effect、computed、watch依赖关系及实现原理
2月前
Vue 3 新特性:在 Composition API 中使用 CSS Modules
2月前
新手必看的前端项目去中心化和模块化思想
2月前
标签
AI AI项目 css docker Drone Elaticsearch es5 es6 Geometry Go gru java Javascript jenkins lstm mysql mysql优化 mysql地理位置索引 mysql索引 mysql规范 mysql设计 mysql配置文件 mysql面试题 mysql高可用 nginx Redis redis性能 rnn SpringBoot Tensorflow tensorflow2.0 UI设计 vue vue3.0 vue原理 whistle ZooKeeper 开源项目 抓包工具 日志输出 机器学习 深度学习 神经网络 论文 面试题
相关文章
我收集了12款自动生成器,无聊人士自娱自乐专用
输入一张图,就能让二次元老婆动起来,宛如3D:这全是为了科学啊
使用ONNX+TensorRT部署人脸检测和关键点250fps
基于 Keras 的烟火检测
松鼠乐园

资源整合,创造价值

小伙伴
墨魇博客 无同创意
目录
重大新闻 Centos CSS Docker ES5 ES6 Go Java Javascript Linux Mac MySQL Nginx Redis Springboot Tensorflow Vue Vue2.x从零开始 Windows 书籍推荐 人工智能 前端资源 后端资源 壁纸 开源项目 测试 论文
Copyright © 2018-2021 松鼠乐园. Designed by nicetheme. 浙ICP备15039601号-4
  • 重大新闻
  • Centos
  • CSS
  • Docker
  • ES5
  • ES6
  • Go
  • Java
  • Javascript
  • Linux
  • Mac
  • MySQL
  • Nginx
  • Redis
  • Springboot
  • Tensorflow
  • Vue
  • Vue2.x从零开始
  • Windows
  • 书籍推荐
  • 人工智能
  • 前端资源
  • 后端资源
  • 壁纸
  • 开源项目
  • 测试
  • 论文
热门搜索
  • jetson nano
  • vue
  • java
  • mysql
  • 人工智能
  • 人脸识别
迦娜王
坚持才有希望
1224 文章
33 评论
231 喜欢
  • 0
  • 0
  • Top