Recurrent Neural Network是在单个神经元上,除了输入与输出外,添加了一条Recurrent回路。也就是说,节点当前的状态将会影响其未来的状态。下式可以表征此关系:
st= f(st-1, xt, θ)
如下图左侧,将前一时刻神经元的输出状态s,作为下一时刻的一个输入值,加权并入输入U中。这一操作使得,某一时刻神经元的输出状态s,依赖于之前各个时刻的状态st-1,st-2,...,st-n.从而,我们可以说该Recurrent path为神经网络引入了一个新的维度: time dimension.
在上图右侧,我们看到将该neuron在time dimension上展开后的形式,xt是时间序列各个时间点的输入,st是各个时间点上产生的输出状态,而ot则是各个时间点上该神经元的输出。而在该结构中,参数共有3个:U,W,V,分别是input weight, state weight, and output weight。和CNN一样,RNN同样有parameter sharing的思想,即在时间维度上,共享这三个parameters.
输出状态st的计算公式为:
其中f是activation function,可以使sigmoid, tanh, relu等等。而在输出端,如果我们使用Softmax去预测各个输出值的概率,则:
RNN有很多种变体,所有包含循环回路的神经网络都可以归为RNN。概括地说,某一时刻的状态st,是之前所有时刻输入xt,...,x1的一种有损压缩(Lossy Summary)。
下面是三种不同类型的RNN patterns:
Pattern 1: Hidden unit存在recurrent connections,每一个时间t上都有输出,每个时刻都有输出o,期望值y和Loss function
Pattern 2: Hidden Unit存在recurrent connections,读取完整个序列后,最后产生一个输出o,根据期望值y计算Loss function
Pattern 3: Output Unit对Hidden Unit有Recurrent Connection,每个时刻都有输出o,期望值y和Loss function