循环神经网络(RNN)简易教程


循环神经网络(RNN)简易教程文章插图
我们从以下问题开始

  • 循环神经网络能解决人工神经网络和卷积神经网络存在的问题 。
  • 在哪里可以使用RNN?
  • RNN是什么以及它是如何工作的?
  • 挑战RNN的消梯度失和梯度爆炸
  • LSTM和GRU如何解决这些挑战
假设我们正在写一条信息“Let’s meet for___” , 我们需要预测下一个单词是什么 。 下一个词可以是午餐、晚餐、早餐或咖啡 。 我们更容易根据上下文作出推论 。 假设我们知道我们是在下午开会 , 并且这些信息一直存在于我们的记忆中 , 那么我们就可以很容易地预测我们可能会在午餐时见面 。
当我们需要处理需要在多个时间步上的序列数据时 , 我们使用循环神经网络(RNN)
传统的神经网络和CNN需要一个固定的输入向量 , 在固定的层集上应用激活函数产生固定大小的输出 。
例如 , 我们使用128×128大小的向量的输入图像来预测狗、猫或汽车的图像 。 我们不能用可变大小的图像来做预测
现在 , 如果我们需要对依赖于先前输入状态(如消息)的序列数据进行操作 , 或者序列数据可以在输入或输出中 , 或者同时在输入和输出中 , 而这正是我们使用RNNs的地方 , 该怎么办 。
在RNN中 , 我们共享权重并将输出反馈给循环输入 , 这种循环公式有助于处理序列数据 。
RNN利用连续的数据来推断谁在说话 , 说什么 , 下一个单词可能是什么等等 。
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)简易教程文章插图
将RNN展开为四层神经网络 , 每一步共享权值矩阵W 。
隐藏状态连接来自前一个状态的信息 , 因此充当RNN的记忆 。 任何时间步的输出都取决于当前输入以及以前的状态 。
与其他对每个隐藏层使用不同参数的深层神经网络不同 , RNN在每个步骤共享相同的权重参数 。
我们随机初始化权重矩阵 , 在训练过程中 , 我们需要找到矩阵的值 , 使我们有理想的行为 , 所以我们计算损失函数L 。 损失函数L是通过测量实际输出和预测输出之间的差异来计算的 。 用交叉熵函数计算L 。
循环神经网络(RNN)简易教程文章插图
RNN , 其中损失函数L是各层所有损失的总和
为了减少损失 , 我们使用反向传播 , 但与传统的神经网络不同 , RNN在多个层次上共享权重 , 换句话说 , 它在所有时间步骤上共享权重 。 这样 , 每一步的误差梯度也取决于前一步的损失 。
在上面的例子中 , 为了计算第4步的梯度 , 我们需要将前3步的损失和第4步的损失相加 。 这称为通过Time-BPPT的反向传播 。
我们计算误差相对于权重的梯度 , 来为我们学习正确的权重 , 为我们获得理想的输出 。
因为W在每一步中都被用到 , 直到最后的输出 , 我们从t=4反向传播到t=0 。 在传统的神经网络中 , 我们不共享权重 , 因此不需要对梯度进行求和 , 而在RNN中 , 我们共享权重 , 并且我们需要在每个时间步上对W的梯度进行求和 。
在时间步t=0计算h的梯度涉及W的许多因素 , 因为我们需要通过每个RNN单元反向传播 。 即使我们不要权重矩阵 , 并且一次又一次地乘以相同的标量值 , 但是时间步如果特别大 , 比如说100个时间步 , 这将是一个挑战 。
如果最大奇异值大于1 , 则梯度将爆炸 , 称为爆炸梯度 。