一、写在前面
本文将介绍RNN的详细构造和实战,并将其手写实现,再将其应用到歌词创作上。
二、RNN
考虑输入数据存在时间相关性的情况。假设 X t ∈ R n × d \boldsymbol{X}t \in \mathbb{R}^{n \times d} Xt∈Rn×d是序列中时间步 t t t的小批量输入, H t ∈ R n × h \boldsymbol{H}t \in \mathbb{R}^{n \times h} Ht∈Rn×h是该时间步的隐藏变量。我们保存上一时间步的隐藏变量 H t − 1 \boldsymbol{H}{t-1} Ht−1,并引入一个新的权重参数 W h h ∈ R h × h \boldsymbol{W}{hh} \in \mathbb{R}^{h \times h} Whh∈Rh×h,该参数用来描述在当前时间步如何使用上一时间步的隐藏变量。具体来说,时间步 t t t的隐藏变量的计算由当前时间步的输入和上一时间步的隐藏变量共同决定:
H t = ϕ ( X t W x h + H t − 1 W h h + b h ) . \boldsymbol{H}_t = \phi(\boldsymbol{X}_t \boldsymbol{W}_{xh} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hh} + \boldsymbol{b}_h). Ht=ϕ(XtWxh+Ht−1Whh+bh).
与多层感知机相比,我们在这里添加了 H t − 1 W h h \boldsymbol{H}{t-1} \boldsymbol{W}{hh} Ht−1Whh一项。由上式中相邻时间步的隐藏变量 H t \boldsymbol{H}t Ht和 H t − 1 \boldsymbol{H}{t-1} Ht−1之间的关系可知,这里的隐藏变量能够捕捉截至当前时间步的序列的历史信息,就像是神经网络当前时间步的状态或记忆一样。因此,该隐藏变量也称为隐藏状态。由于隐藏状态在当前时间步的定义使用了上一时间步的隐藏状态,上式的计算是循环的。使用循环计算的网络即循环神经网络(recurrent neural network)。
循环神经网络有很多种不同的构造方法。含上式所定义的隐藏状态的循环神经网络是极为常见的一种。若无特别说明,本章中的循环神经网络均基于上式中隐藏状态的循环计算。在时间步 t t t,输出层的输出和多层感知机中的计算类似:
O t