循环神经元

到目前为止,我们主要关注的是前馈神经网络,其中激活仅从输入层到输出层的一个方向流动(附录 E 中的几个网络除外)。 循环神经网络看起来非常像一个前馈神经网络,除了它也有连接指向后方。 让我们看一下最简单的 RNN,它由一个神经元接收输入,产生一个输出,并将输出发送回自己,如图 14-1(左)所示。 在每个时间步t(也称为一个帧),这个循环神经元接收输入 x^{(t)} 以及它自己的前一时间步长 y^{(t-1)} 的输出。 我们可以用时间轴来表示这个微小的网络,如图 14-1(右)所示。 这被称为随着时间的推移展开网络。

循环神经元 - 图3

你可以轻松创建一个循环神经元层。 在每个时间步t,每个神经元都接收输入向量 x^{(t)} 和前一个时间步 y^{(t-1)} 的输出向量,如图 14-2 所示。 请注意,输入和输出都是向量(当只有一个神经元时,输出是一个标量)。

循环神经元 - 图6

每个循环神经元有两组权重:一组用于输入 x^{(t)},另一组用于前一时间步长 y^{(t-1)} 的输出。 我们称这些权重向量为 w_xw_y。如公式 14-1 所示(b是偏差项,φ(·)是激活函数,例如 ReLU),可以计算单个循环神经元的输出。

循环神经元 - 图11

就像前馈神经网络一样,我们可以使用上一个公式的向量化形式,对整个小批量计算整个层的输出(见公式 14-2)。

循环神经元 - 图12

  • Y^{(t)}m \times n_{neurons} 矩阵,包含在最小批次中每个实例在时间步t处的层输出(m是小批次中的实例数,n_{neurons} 是神经元数)。
  • X^{(t)}m \times n_{inputs} 矩阵,包含所有实例的输入的 (n_{inputs} 是输入特征的数量)。
  • W_xn_{inputs} \times n_{neurons} 矩阵,包含当前时间步的输入的连接权重的。
  • W_yn_{neurons} \times n_{neurons} 矩阵,包含上一个时间步的输出的连接权重。
  • 权重矩阵 W_xW_y 通常连接成单个权重矩阵W,形状为 (n_{inputs}+n_{neurons}) \times n_{neurons}(见公式 14-2 的第二行)
  • b是大小为 n_{neurons} 的向量,包含每个神经元的偏置项。

注意,Y^{(t)}X^{(t)}Y^{(t-1)} 的函数,它是 X^{(t-1)}Y^{(t-2)} 的函数,它是 X^{(t-2)}Y^{(t-3)} 的函数,等等。 这使得 Y^{(t)} 是从时间t = 0开始的所有输入(即 X^{(0)}X^{(1)},…,X^{(t)})的函数。 在第一个时间步,t = 0,没有以前的输出,所以它们通常被假定为全零。