Alex_McAvoy

想要成为渔夫的猎手

循环神经网络的结构

References:

【单元结构】

在传统的神经网络中,假设所有输入彼此独立,但对于某些任务来说,需要处理序列信息,即前面的输入和后面的输入是有关系的

RNN 对序列中每个元素执行相同的任务,输出取决于先前的计算,从另一个角度来看,其是具有“记忆”的,可以捕获到目前为止计算的信息

典型的 RNN 网络在 $t$ 时刻展开的结构图如下:

其中,每一个圆圈代表隐藏层的一个存储单元(Memory Cell),所有单元的参数共享,各符号含义为:

  • $x_t$:$t$ 时刻的输入
  • $s_t$:$t$ 时刻隐藏层的输出
  • $o_t$:$t$ 时刻的输出
  • $U$:输入层的连接权重矩阵
  • $V$:输出层的连接权重矩阵
  • $W$:从上一时刻到下一时刻隐藏层的连接权重矩阵

可以看出,RNN 的关键在于 $s_t$ 的值不仅取决于 $x_t$,还取决于 $s_{t-1}$

需要说明的是,参数共享,是指各层的 $U$、$V$、$W$ 参数相同

【前向传播】

假设:

  • $f(\cdot)$:隐藏层的激活函数,通常为 tanh、ReLU
  • $g(\cdot)$:输出层的激活函数,通常为 sigmoid、softmax
  • $\mathbf{b}_h$:隐藏层的偏置向量,参数共享
  • $\mathbf{b}_o$:输出层的偏置向量,参数共享

那么,循环神经网络的前向传播过程为:

通过上述公式的迭代,对任意 $t$ 时刻的输出有:

可以看到,对于当前时刻 $t$ 的输出,受到前面历次输入值 $x_t,x_{t-1},x_{t-2},\cdots$ 的影响

对于隐藏状态 $s_t,s_{t-1},s_{t-2},\cdots$ 来说,可以将其视为网络的记忆,其捕获有关所有先前时间步骤中发生的事件的信息,但在实践中很复杂,因为通常无法从太多时间步骤中捕获信息

此外,RNN 在所有层共享参数,即所有步骤中的 $U$、$V$、$W$、$\mathbf{b}_h$、$\mathbf{b}_o$ 相同,也就是说在每个步骤执行相同的任务,只是使用不同的输入,这极大的减少了需要学习的参数总数

【网络结构】

根据 RNN 的基本单元结构,在每个时间步都有输入和输出,但根据实际任务来说,这可能不是必需的,因此,RNN 结构可以是以下不同的组合

  • 一对一:固定的输入到输出,如图像分类
  • 一对多:固定的输入到序列输出,如图像的文字描述
  • 多对一:序列输入到输出,如情感分析,分类正面负面情绪
  • 多对多:序列输入到序列的输出,如机器翻译,称之为编解码网络
  • 同步多对多:同步序列输入到同步输出,如文本生成,视频每一帧的分类,也称之为序列生成

如下图,给出了一个具有 $m$ 个输入,$n$ 个隐藏层单元,$2$ 个输出的 RNN

【简单循环网络】

Jordan Network 和 Elman Network 通常被并称为简单循环网络(Simple Recurrent Networks,SRN),它们都是基于最浅的三层网络结构定义的,是 RNN 的奠基性工作,现在常用的 LSTM、GRU 等都是基于 Elman Network

Jordan Network 是直接将整个网络的输出经过时延后反馈回网络的输入层

Elman Network 是将隐藏层的输出经过时延后反馈回该层,并作为输入的一部分

简单来说,两个网络的主要区别在于循环部分,Jordan Network 的循环来自于输出层,Elman Network 的循环来自于隐藏层

对比而言,Elman Network 的结构更易于扩展,其每一个循环层都是相互独立的,对网络结构的设计更加灵活,而 Jordan Network 的输出层与循环层的维度不一致时还需额外调整

因此,当前主流的循环神经网络都是基于 Elman Network 结构的,通常所说的循环神经网络(RNN),默认指的是具有 Elman Network 结构的循环神经网络

感谢您对我的支持,让我继续努力分享有用的技术与知识点!