循环神经元
到目前为止,我们主要关注的是前馈神经网络,其中激活仅从输入层到输出层的一个方向流动(附录 E 中的几个网络除外)。 循环神经网络看起来非常像一个前馈神经网络,除了它也有连接指向后方。 让我们看一下最简单的 RNN,它由一个神经元接收输入,产生一个输出,并将输出发送回自己,如图 14-1(左)所示。 在每个时间步t
(也称为一个帧),这个循环神经元接收输入 以及它自己的前一时间步长
的输出。 我们可以用时间轴来表示这个微小的网络,如图 14-1(右)所示。 这被称为随着时间的推移展开网络。
你可以轻松创建一个循环神经元层。 在每个时间步t,每个神经元都接收输入向量 和前一个时间步
的输出向量,如图 14-2 所示。 请注意,输入和输出都是向量(当只有一个神经元时,输出是一个标量)。
每个循环神经元有两组权重:一组用于输入 ,另一组用于前一时间步长
的输出。 我们称这些权重向量为
和
。如公式 14-1 所示(
b
是偏差项,φ(·)
是激活函数,例如 ReLU),可以计算单个循环神经元的输出。
就像前馈神经网络一样,我们可以使用上一个公式的向量化形式,对整个小批量计算整个层的输出(见公式 14-2)。
是
矩阵,包含在最小批次中每个实例在时间步
t
处的层输出(m
是小批次中的实例数,是神经元数)。
是
矩阵,包含所有实例的输入的 (
是输入特征的数量)。
是
矩阵,包含当前时间步的输入的连接权重的。
是
矩阵,包含上一个时间步的输出的连接权重。
- 权重矩阵
和
通常连接成单个权重矩阵
W
,形状为(见公式 14-2 的第二行)
b
是大小为的向量,包含每个神经元的偏置项。
注意, 是
和
的函数,它是
和
的函数,它是
和
的函数,等等。 这使得
是从时间
t = 0
开始的所有输入(即 ,
,…,
)的函数。 在第一个时间步,
t = 0
,没有以前的输出,所以它们通常被假定为全零。