本人前段时间学习和研究神经网络的理论和编程,特别关注了在语音识别、语言模型、机器翻译等方面有广泛应用的RNN模型和LSTM模型。发现绝大多数有关RNN模型的文章,对于RNN模型的基本结构和前向传播公式基本是相同的,但是在误差反向传播方面,存在不同版本的理论公式,虽然大致相同,但还是有很多不同的地方,而且对公式的解释也会各有不同。在研究了多个版本后,发现没有一个跟我的理解是完全一致的,虽然有些在计算上是结果一致,但在公式的推导和理解方面会有不同。所以打算把自己所理解的对RNN模型的计算公式做一个完整的介绍总结,欢迎大家讨论指正。
一、RNN模型的文字说明
RNN前向传播公式基本是相同的,下面是一张简单的示意图:
循环示意图
如图循环神经网络就是将网络的状态保存在一个记忆单元中,这个记忆单元和下一个时刻的输入一起进入神经网络中,得到下一个时刻记忆单元的值(状态)。具体如后面一节中的公式(1)所示。
展开示意图
在展开图中h为状态值,t时刻输出是h的值先通过神经元得到一个值, 再乘上权重系数矩阵W得到特定维数的值,这个值再通过一个输出神经元,得到最终输出。具体如后面一节中的公式(2)(3)(4)所示。
二、RNN模型的数学公式
正向传播的基本公式:
(1)
(2)
(3)
(4)
标准误差:
(5)
为真实值,
为输出值,
当一个神经网络只有在能够修正误差的情况下才有实际意义,所以误差反馈机制就特别重要,为此构建一个值,表示在t时刻的Loss。
(6-1) t时刻需要考虑的Loss为t时刻的标准误差加上后一时刻的Loss。
由于递推关系,考虑只有m个输出对应有……,
,那么就有下面的公式:
注:
……
上述公式合并表达为:
(6-2)
容易得到:
(6-3)
(6-1)式与(6-2)式的值相同。(6-1)式方便用于计算,(6-2)的物理意义更清楚。
下面介绍一下误差反向传播的基本公式:
(7) 由(4)(5)得到
(8) 由(1)(2)(3)(6-1)得到
(9) 由公式(3)(6-1)和(6-3)得到
(10) 由公式(1)得到
(11) 由公式(1)得到
三、RNN模型数学公式的文字说明
- 在神经网络模型构建好以后,一般最关心的就是训练模型中参数的更新,通过上述的公式,各种参数的更新还是比较简单的。更新的过程一般从最后一个输出时刻t开始做计算,向后一直到对第一个输入时刻做计算。
的更新按照公式(9)中
所要求的,
和
都是直接可以取值,而
的计算涉及到公式(7)。公式(7)中的各个值很容易得到,对于特定的σ',都会有现成的公式可以套用。
的更新按照公式(10)中
所要求的,
和
都是直接可以取值, ,而
的计算涉及到公式(8)。公式(8)中的
、
值可以参考第2条中的方法计算,
、
可以直接得到,而
则不必计算,直接等于上一个时刻已经计算好的结果值
。
的更新按照公式(11)中
所要求的,
和
都是直接可以取值,而的
的计算涉及到公式(8)。公式(8)的计算同上面第3条所描述的一样,只要计算一次
,就可以同时用于
的更新。
- 循环神经网络要求每一个时刻都要有一个输入,但是不一定要求输出。在没有输出的情况下,不难发现公式(8)的
仍然是有值的,根据公式(10)(11)这意味着和
都可以在没有输出的情况下做更新。
- 对于softmax类型的输出,在做误差反馈的时候,只要把(7)中的
值用softmax的误差反馈值代替即可。