循环神经网络 RNN Recurrent Neural Networks 介绍

本文参考相关文章,加入新内容与个人理解,介绍循环神经网络(RNN)。RNN在自然语言处理中应用广泛,文章将从基本介绍、训练算法、LSTM、CW - RNNs及基于Python和Theano实现等方面展开,还说明了其与传统神经网络的区别及处理序列数据的特点。
                                   
      

循环神经网络(RNN, Recurrent Neural Networks)介绍

   这篇文章很多内容是参考:http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/,在这篇文章中,加入了一些新的内容与一些自己的理解。

  循环神经网络(Recurrent Neural Networks,RNNs)已经在众多自然语言处理(Natural Language Processing, NLP)中取得了巨大成功以及广泛应用。但是,目前网上与RNNs有关的学习资料很少,因此该系列便是介绍RNNs的原理以及如何实现。主要分成以下几个部分对RNNs进行介绍:
1. RNNs的基本介绍以及一些常见的RNNs(本文内容);
2. 详细介绍RNNs中一些经常使用的训练算法,如Back  Propagation Through Time(BPTT)、Real-time Recurrent Learning(RTRL)、Extended Kalman Filter(EKF)等学习算法,以及梯度消失问题(vanishing gradient problem)
3. 详细介绍Long Short-Term Memory(LSTM,长短时记忆网络);
4. 详细介绍Clockwork RNNs(CW-RNNs,时钟频率驱动循环神经网络);
5. 基于Python和Theano对RNNs进行实现,包括一些常见的RNNs模型。

  不同于传统的FNNs(Feed-forward Neural Networks,前向反馈神经网络),RNNs引入了定向循环,能够处理那些输入之间前后关联的问题。定向循环结构如下图所示:
RNNs_0

  该tutorial默认读者已经熟悉了基本的神经网络模型。如果不熟悉,可以点击:Implementing A Neural Network From Scratch进行学习。

如果你觉得这篇文章看起来稍微还有些吃力,或者想要系统地学习人工智能,那么推荐你去看床长人工智能教程。非常棒的大神之作,教程不仅通俗易懂,而且很风趣幽默。点击这里可以查看教程。

什么是RNNs

  RNNs的目的使用来处理序列数据。在传统的神经网络模型中,是从输入层到隐含层再到输出层,层与层之间是全连接的,每层之间的节点是无连接的。但是这种普通的神经网络对于很多问题却无能无力。例如,你要预测句子的下一个单词是什么,一般需要用到前面的单词,因为一个句子中前后单词并不是独立的。RNNs之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。理论上,RNNs能够对任何长度的序列数据进行处理。但是在实践中,为了降低复杂性往往假设当前的状态只与前面的几个状态相关,下图便是一个典型的RNNs:
RNN_2

RNN_3
From Nature
  RNNs包含输入单元(Input units),输入集标记为

         
### 循环神经网络及其变体LSTM/GRU的原理和应用 #### 1. **循环神经网络 (Recurrent Neural Network, RNN)** 传统的前馈神经网络无法很好地捕捉序列数据之间的依赖关系,而RNN通过引入隐藏状态 \( h_t \),能够将之前时刻的信息传递到当前时刻。其基本公式如下: \[ h_t = f(Ux_t + Wh_{t-1} + b_1) \] 其中: - \( x_t \) 是第 \( t \) 时刻的输入, - \( h_t \) 是第 \( t \) 时刻的隐藏状态, - \( U \), \( W \) 和 \( b_1 \) 分别是权重矩阵和偏置项[^3]。 然而,标准RNN存在梯度消失或梯度爆炸的问题,在处理长序列时难以保持长期依赖关系。 --- #### 2. **长短时记忆网络 (Long Short-Term Memory, LSTM)** 为解决RNN的不足,Hochreiter等人提出了LSTM模型。LSTM的核心在于引入了细胞状态(cell state)以及三种门控机制:输入门、遗忘门和输出门。这使得LSTM既能保存短期信息也能存储长期信息。 ##### 工作原理 LSTM的关键组件包括: - **遗忘门** (\( f_t \)) 控制丢弃多少旧信息; - **输入门** (\( i_t \)) 决定更新哪些新信息; - **候选值** (\( \tilde{C}_t \)) 计算潜在的新信息; - **输出门** (\( o_t \)) 确定最终输出的内容。 具体公式如下: \[ f_t = \sigma(W_f[x_t, h_{t-1}] + b_f) \] \[ i_t = \sigma(W_i[x_t, h_{t-1}] + b_i) \] \[ \tilde{C}_t = tanh(W_C[x_t, h_{t-1}] + b_C) \] \[ C_t = f_tC_{t-1} + i_t\tilde{C}_t \] \[ o_t = \sigma(W_o[x_t, h_{t-1}] + b_o) \] \[ h_t = o_tanh(C_t) \][^1] 这种设计让LSTM能有效缓解梯度消失问题,并在需要记住较长上下文的任务中表现良好[^2]。 --- #### 3. **门控循环单元 (Gated Recurrent Unit, GRU)** 作为LSTM的一种简化版本,GRU通过减少参数数量提高了计算效率。它仅包含两个门控单元:更新门和重置门。 ##### 更新门与重置门的作用 - **更新门** (\( z_t \)) 控制当前输入和过去状态对当前状态的影响程度; - **重置门** (\( r_t \)) 判断是否忽略过去的隐藏状态。 核心公式如下: \[ z_t = \sigma(W_z[x_t, h_{t-1}] + b_z) \] \[ r_t = \sigma(W_r[x_t, h_{t-1}] + b_r) \] \[ \tilde{h}_t = tanh(W_h[x_t, r_th_{t-1}] + b_h) \] \[ h_t = (1-z_t)h_{t-1} + z_t\tilde{h}_t \][^4] 相较于LSTM,GRU省去了独立的细胞状态,同时减少了参数复杂度,使其更适合资源受限环境下的快速训练需求。 --- #### 4. **应用场景** ##### (1)语音识别 无论是端到端的声学建模还是语言解码阶段,RNN系列模型都发挥了重要作用。例如,CTC损失函数配合双向LSTM可以显著提高自动语音识别系统的性能[^2]。 ##### (2)时间序列预测 对于股票价格走势分析、天气预报等任务而言,基于RNN的时间序列预测框架能够充分利用历史趋势进行未来值推测。特别是当面对具有明显周期性的信号时,LSTM往往展现出更强的学习能力[^4]。 --- ```python import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, LSTM, GRU # 构建一个简单的LSTM模型用于时间序列预测 model_lstm = Sequential([ LSTM(units=50, return_sequences=True, input_shape=(None, 1)), Dense(1) ]) # 或者构建一个类似的GRU模型 model_gru = Sequential([ GRU(units=50, return_sequences=True, input_shape=(None, 1)), Dense(1) ]) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值