文章目录
一、RNN 简单介绍
-
循环神经网络(Recurrent Neural Network, RNN)是一种用于处理序列数据的神经网络架构。
-
与传统的前馈神经网络(Feedforward Neural Network, FNN)不同,传统的前馈神经网络无法训练出具有顺序的数据,在模型搭建时没有考虑数据上下之间的关系
-
RNN 能够在处理当前输入时考虑到之前的输入信息,可以保留之前输入的信息并继续作为后续输入的一部分进行计算,具有记忆性,因此非常适合处理时间序列数据、文本数据等具有序列特性的数据。
二、RNN 基本结构
- RNN的基本结构包括输入层、隐藏层和输出层。
- 特别地,RNN的隐藏层有一个反馈连接,使其能够保留前一时刻的状态信息。这种结构使得RNN在处理序列数据时,能够将前一时刻的信息传递给当前时刻,从而实现记忆功能。
1.隐藏中的计算
- RNN 的隐藏层中引入了 隐状态 h(hidden state)的概念,隐状态 h 可以对序列形的数据提取特征,接着再转换为输出。
- 下面是处理序列数据长度为4的RNN网络结构图:
- 隐藏层中隐状态 h 的计算过程如下:
- 每个隐状态 h 的计算结果都将会传入下一个计算的过程,从而实现记忆的功能
- 其中:
- x 是每一个输入
- h0 是起始的一个偏执隐状态 h
- U 是隐状态到隐状态的权重矩阵
- W 是输入到隐状态的权重矩阵
- b 是隐藏层的偏置项
- f 是激活函数,如Tanh或ReLU
- 计算隐状态时,每层隐藏层中的参数(如权重矩阵和偏置向量)在相同层内是相同的,即所谓的参数共享
- 这种参数共享机制减少了模型中的参数数量,使得RNN能够更有效地处理序列数据,并且有助于模型学习到序列中的时间依赖性和上下文信息。
2.输出层的计算
- 输出层通常根据隐状态 h 来计算,下面是输出层的计算过程:
- 其中:
- V 是隐状态到输出的权重矩阵
- c 是输出层的偏置项
- 输出层的激活函数通常是Softmax用于分类任务
- 注意:输入和输出序列必须要是等长的
3.循环
- 1.循环的基本概念
- 在RNN中,“循环”指的是网络在处理输入序列时,能够保持并传递之前的状态信息到后续的时间步中。这种机制使得RNN能够捕捉到序列数据中的时间依赖性,即当前时刻的输出不仅与当前时刻的输入有关,还与之前时刻的输入和状态有关。
- 2.循环的实现方式
- RNN通过引入隐状态(hidden state)和循环连接(recurrent connection)来实现信息的循环传递。隐状态是一个向量,它包含了网络在处理当前输入之前所积累的信息。循环连接则是指隐状态在当前时间步被更新后,会作为下一个时间步的输入之一,从而形成一个闭环结构。
- 如下图:
三、RNN 优缺点
1.优点
- 能够处理序列数据:RNN能够利用之前的输入信息,适用于时间序列分析、自然语言处理等任务。
- 结构简单:相比于其他复杂的神经网络架构,RNN的结构相对简单,易于理解和实现。
2.缺点
- 梯度消失/梯度爆炸:RNN在处理长序列时,容易出现梯度消失或梯度爆炸问题,导致难以捕捉长距离依赖关系。
- 记忆能力有限:虽然RNN具有记忆功能,但其记忆能力有限,难以处理非常长的序列。