首页技术文章正文

循环神经网络(RNN)是什么?可以做什么?

更新时间:2020-07-09 来源:黑马程序员 浏览量:

什么是RNN?

RNN的思想是利用序列化的信息。在传统的神经网络中,我们假设所有输入和输出彼此独立。但对于许多任务而言,这个假设有问题。例如你想预测句子中的下一个单词,就需要知道它前面有哪些单词。

RNN被称为循环,因为它对序列列的每个元素执行相同的任务,并且基于先前的计算进行输出。RNN的另一个优点是它具有“记忆”,它可以收集到目前为止已经计算的信息。理论上,RNN可以在任意长的序列中使用信息,但实际使用中仅仅往回记录几步。这是典型的RNN的样子:

1594281105997_神经网络RNN.jpg

1594281115608_神经网络RNN1.jpg

RNN可以做什么?

RNN在许多NLP任务中取得了巨大成功。 在这个领域最常用的RNN类型是LSTM,它在捕获长期依赖方面要比普通的RNN好得多。但不要担心,LSTM和RNN基本相同,它们只是采用不同的方式来计算隐藏状态。以下是RNP在NLP中的一些示例应用。

1594281125607_神经网络RNN1-1.jpg


机器翻译

机器翻译类似于语言模型,因为我们的输入是源语言中的一系列单词(例如德语)。我们希望输出目标语言的一系列单词(例如英语)。关键的区别是只有输入完整之后才会进行输出,因为我们翻译的句子的第一个单词可能需要从完整的输入序列中获取信息。

1594281142409_神经网络RNN2.jpg

 

语音识别
给定来自声波的声学信号作为输入序列,我们可以预测一系列语音片段及其概率。


生成图像描述
RNN作为模型的一部分与卷积神经网络一起生成未标记图像的描述。这个组合模型非常令人惊讶的,结果很不不错。 组合模型甚至可以把生成的单词与图像中找到的特征对应起来。

1594281156270_神经网络RNN3.jpg

 


训练RNN

训练RNN类似于训练传统的神经网络。我们也使用反向传播算法,但有点调整。由于参数由⽹络中的所有步骤共享,因此每个输出的梯度不仅取决于当前时刻的计算结果,还取决于先前的步骤的计算结果。例如,为了计算t=4处的梯度,我们需要反向传播3步并把梯度相加,这种被称为基于时间的反向传播算法(BPTT)。由于存在梯度消失/梯度爆炸的问题,用BPTT训练的普通RNN难以学习期依赖(例如相距很远的步骤之间的依赖性)。但是存在一些处理这些问题的方法,并且某些类型的RNN(如 LSTM)是专门为解决这些问题而设计的。

 

RNN扩展

多年来,研究人员开发了更复杂的RNN来解决普通RNN模型的一些缺点。这里会简要概述,以便您熟悉模型的分类。

双向RNN基于以下思想:时间t处的输出可能不仅取决于序列中的先前元素,还取决于未来元素。 例如,要预测序列中缺少的单词,您需要查看左侧和右侧上下文。双向RNN非常简单。它们只是两个堆叠在一起的RNN。然后基于两个RNN的隐藏状态计算输出。

1594281168618_神经网络RNN4.jpg


深度(双向)RNN类似于双向RNN,只是我们现在每个时间步有多个层。在实践中,这为我们提供了更高的学习能力(但需要大量的训练数据)。

1594281177687_神经网络RNN5.jpg

1594281186309_神经网络RNN6.jpg


猜你喜欢:

Python视频教程:19天入门python编程 

黑马程序员Python基础教程下载 

Python+人工智能培训课程

分享到:
在线咨询 我要报名
和我们在线交谈!