掌握序贯数据分析:对RNN和LSTM网络的深入探索

351 阅读10分钟

image.png

RNN是指循环神经网络。它是一种包含记忆的神经网络,最适合用于连续数据。苹果的Siri和谷歌的语音搜索都使用了RNN。让我们讨论一下RNN的一些基本概念。

在深入讨论之前,让我们先了解前向传播后向传播

前向传播和后向传播

前向传播和后向传播是神经网络训练的两个基本概念。

前向传播是通过神经网络获取输入并产生输出的过程。在这个过程中,输入与权重相乘,加入偏置,并在每一层应用激活函数以产生输出。然后将输出与期望的输出进行比较,并使用损失函数计算它们之间的差异。

后向传播,也被称为反向传播,是根据前向传播期间计算的输出和期望输出之间的差异来调整神经网络的权重和偏置的过程。这是通过计算损失函数相对于网络每一层的权重和偏置的梯度来实现的。然后,这些梯度被用来使用优化算法(如随机梯度下降)来更新权重和偏置。

后向传播是神经网络训练的一个关键步骤,因为它允许网络随着时间的推移学习和改进。前向和后向传播的过程要重复多次,每次都要更新权重和偏置,直到网络产生的输出足够接近所需输出。

什么是深度学习?

深度学习是机器学习的一个子集,涉及使用具有多层的人工神经网络来建模和解决复杂问题。这些网络旨在从大量的数据中学习,并能识别数据中的模式和关系,使其有可能做出准确的预测或分类。

深度学习算法已经在图像和语音识别、自然语言处理和自动驾驶汽车等广泛的应用中获得了成功。

什么是RNN?

RNN是Recurrent Neural Network的缩写,它是一种旨在处理连续数据的神经网络。与传统的前馈神经网络不同,RNN能够记住以前的输入,并使用这些信息来通知当前的输出。

RNNs通常用于语言建模、语音识别、机器翻译和时间序列预测等任务。在RNN中,一个序列中的每个输入都被依次处理,每一步的输出都被反馈到网络中作为下一步的输入。

RNN的关键特征是它们有一个 "隐藏状态",在每一步都根据当前的输入和之前的隐藏状态进行更新。这使得网络能够捕捉到关于整个序列的信息,而不仅仅是孤立地处理每个输入。

image.png

有几种RNN的变体,包括长短期记忆(LSTM)和门控递归单元(GRU)网络,其目的是解决传统RNN中可能出现的梯度消失的问题。

一个RNN的例子

Gmail中RNN的一个例子是智能投稿功能。Smart Compose使用RNN来建议和自动完成句子,因为用户正在撰写电子邮件。RNN在大量的文本数据上进行训练,以学习模式和单词之间的关系,这使得它能够根据电子邮件的上下文来建议适当的完成。RNN将用户之前输入的单词和字符作为输入,并生成新的单词和字符作为输出。

例如,如果用户开始键入 "我写信给",RNN可能会建议诸如 "要求更多的信息 "或 "跟进我们的会议 "等完成方式。RNN能够通过分析电子邮件的上下文,如主题行、以前的句子和收件人信息,来建议这些补语。

总的来说,像Smart Compose中使用的RNN是自然语言处理任务的强大工具,允许计算机生成类似人类的文本并对用户的输入作出适当的反应。

RNN架构的类型

以下是不同类型的RNN架构:

image.png

  1. 一对一RNN(Tx=Ty=1):这种架构将一个输入映射到一个输出。它本质上是一个标准的前馈神经网络。
  2. 一对多RNN(Tx=1, Ty>1):这种架构将一个输入映射到一连串的输出。这在诸如音乐生成或图像说明的任务中很有用。
  3. 多对一RNN(Tx>1, Ty=1):这种结构将一连串的输入映射到一个输出。这在情感分析或语音识别等任务中很有用。
  4. 多对多RNN(Tx>1, Ty>1):这种架构将一连串的输入映射到一连串的输出。这在机器翻译或视频分析等任务中可能很有用。

image.png

除了这四种主要类型,还有一些变化,如编码器-解码器架构,它结合了多对一和一对多的架构,将输入序列转化为输出序列。

训练RNN时的问题

以下是训练RNN时可能出现的一些常见问题:

→ 梯度消失:RNNs 可能存在梯度消失的问题,即梯度在向后传播时变得极小。这可能会导致学习缓慢甚至没有学习。

这可以用以下方法来解决:

  • 权重初始化
  • 选择正确的激活函数
  • LSTM(长短时记忆) 解决梯度消失问题的最佳方法是使用LSTM(长短时记忆)。

→ 爆炸性梯度:相反,RNNs也会受到爆炸梯度问题的影响,即梯度在向后传播时变得非常大。这可能导致不稳定的训练和网络的分歧。

这可以用以下方法来解决:

  • 身份初始化
  • 截断的反向传播
  • 梯度剪裁

解决常见问题的方法

下面是一些解决训练循环神经网络(RNN)时可能出现的常见问题的方法:

  1. 权重初始化:适当的权重初始化可以帮助缓解梯度消失和爆炸的问题。一种常见的初始化方法是Xavier初始化,它根据输入和输出的数量来调整权重。
  2. 选择正确的激活函数:选择正确的激活函数也有助于缓解梯度消失问题。ReLU激活函数是RNN的一个好选择,因为它有助于防止饱和和梯度消失。
  3. LSTM(长短时记忆):解决梯度消失问题的最好方法是使用专门的RNN架构,如LSTM。LSTM使用一个记忆单元和几个门控机制,随着时间的推移有选择地遗忘或存储信息,这有助于缓解梯度消失的问题。
  4. 身份初始化:另一种解决梯度消失问题的方法是使用身份初始化,即把递归连接的权重设置为身份矩阵。这种方法有助于确保梯度不会过大或过小。
  5. 截断的反向传播法:截断反向传播是一种技术,反向传播算法在一定数量的时间步骤后停止,而不是通过整个序列传播梯度。这有助于降低计算复杂性,提高训练性能。
  6. 梯度剪裁:梯度剪切是一种技术,梯度被剪切到一个最大值,这有助于防止梯度爆炸的问题。这种技术在用深度架构或长序列进行训练时特别有用。

总的来说,选择适当的初始化方法、激活函数和RNN架构来解决训练RNN时可能出现的常见问题是很重要的。

长短时记忆(LSTM)

长短期记忆(LSTM)是一种专门的循环神经网络(RNN)架构,旨在克服梯度消失问题,更好地捕捉连续数据中的长期依赖关系。LSTM使用一个记忆单元和几个门控机制来选择性地遗忘或存储信息,这有助于缓解梯度消失问题并提高训练性能。

下面是对LSTM工作原理的一步步解释:

  1. 输入门:LSTM的第一步是决定从新的输入中保留哪些信息。输入门层使用一个sigmoid激活函数来决定哪些值需要更新,接近0的值表示忘记该信息,接近1的值表示保留该信息。
  2. 候选状态:第二步是创建一个将被添加到存储单元的候选状态。这是通过对新的输入应用tanh激活函数来完成的,该函数将数值压缩到-1和1之间。
  3. 遗忘门:第三步是决定从记忆单元中丢弃哪些信息。遗忘门层使用一个sigmoid激活函数来决定哪些值需要遗忘,接近0的值表示保留信息,接近1的值表示遗忘该信息。
  4. 更新记忆单元:第四步是更新记忆单元,删除步骤3中决定遗忘的信息,加入步骤2中的新的候选状态,该状态由步骤1的输入门加权。
  5. 输出门:最后一步是决定从记忆单元输出哪些信息。输出门层使用一个sigmoid激活函数来决定输出哪些值,接近0的值表示保留信息,接近1的值表示输出信息。

LSTM如何用于文本预测的例子

下面是一个LSTM如何用于文本预测的例子,使用给定的单词序列 "The cat sat on the":

1.首先,我们需要为LSTM模型准备输入数据。我们可以使用单次编码来表示该序列中的每个词,将每个词转换成一个零的向量,在与该词在词汇表中的位置相对应的索引处有一个一。假设我们的词汇表由 "The"、"cat"、"sat"、"on "和 "unk"(代表未知词)组成,那么输入序列 "The cat sat on the "的单次编码将是:

The: 10000cat: 01000sat: 00100on:  00010unk: 00001

2.接下来,我们可以将单热编码的输入序列送入LSTM模型。LSTM将处理输入序列,并在每个时间步骤中产生一个输出,它代表了在序列中的前一个词的概率分布。

3.为了预测下一个词,我们可以从最后一个时间步骤的输出分布中取样(即在处理完输入序列 "The cat sat on the")。例如,假设最后一个时间步骤的输出分布是:

The: 0.05cat: 0.1sat: 0.3on:  0.05unk: 0.5

LSTM预测下一个词的最高概率是 "unk",因为它没有足够的信息来预测下一个词的高置信度。

4.为了提高预测的准确性,我们可以重复步骤1-3,将输入序列 "the cat sat on the unk"(即原序列的最后三个词加上 "unk")输入LSTM模型。LSTM将处理输入序列并产生下一个词的输出分布,这可能与步骤3中的输出分布不同。

5.我们可以重复步骤1-4,将更长的输入序列输入LSTM模型,以捕捉更多的上下文,提高预测的准确性。

这就是一个关于LSTM如何用于文本预测的基本例子。在实践中,有许多技术和策略可以提高LSTM模型的性能,如调整超参数、预处理输入数据、使用正则化技术等等。