您的位置:首页 > 理论基础 > 计算机网络

机器学习方法篇(6)------朴素RNN公式推导

2017-07-18 10:03 302 查看

● 每周一言

道理是表,知识是里。

导语

最近工作中用到了循环神经网络(Recurrent Neural Networks),感觉网上的各种资料包括相关论文及技术博客等等,似乎都不能足够细致清晰的给出推导步骤。因此于周日闲暇时光试推公式,却陷于时间维度的反向传播推导之中,直到昨晚才恍然大悟。在这里与大家分享我的推导,也便于日后温习与查阅。

循环神经网络

上周概述了神经网络,了解到神经网络是由一层一层的神经元首尾相连构成,通常情况下网络分为输入层、隐层和输出层三种。而这里要讲的循环神经网络,是下面这样一种结构:



如上图所示RNN结构,其隐层除了传递信息给输出层,还会传给自己,换句话说,就是传给下一时刻的隐层。这样做的目的在于,让神经网络在时间维度上产生“记忆”。至于RNN的应用场景,可自行查资料了解。话不多说,接下来我们直接开始公式推导过程。

为了便于直观理解推导,我们先按时间维度展开RNN的网络结构,并对各个部分给出相应的符号标注,如下图所示:



其中x代表输入,W代表权重;a表示汇集计算的结果,b表示经过激活函数的结果;i是输入向量下标,h是隐层神经元编号,k是输出层神经元编号;t表示时间步。可知朴素RNN有三个权重矩阵:输入层到隐层的矩阵Wih,隐层到自身的矩阵Wh’h,以及隐层到输出层的矩阵Whk

首先,我们写出RNN的前向传播公式。前向传播指的是从前往后传递信息,传递的是输入x。前向传播公式如下:



上面分别描述了t时刻的隐层汇集计算(来自输入层与t-1时刻的隐层)、隐层激活输出、输出层汇集计算、输出层激活输出。

模型训练过程大致是这样:样本信息通过输入层传递到输出层,得到实际输出值,然后与真实值通过损失函数(均方差或者交叉熵公式等)计算出误差L,再反向传播分别修正三个W权重矩阵,直到误差收敛至某一阈值。反向传播指的是从后往前传递信息,传递的是误差信号L,求导之后称之为残差δ。

和普通DNN一样,根据前向传播公式,采用链式法则,我们可以很容易的给出WhkWih这两个权重矩阵的梯度计算过程以及权重更新方式,如下图所示:





其中η是学习步长,请注意,本文给出的公式均省略了关于时间t的求和运算Σ。

RNN中比较难理解的是对Wh’h的梯度计算,因为Wh’h残差不仅来自于当前t时刻的输出层,也来自于下一个t+1时刻隐层。其中来自当前输出层的残差比较容易给出,如下图所示:



而t+1时刻隐层传回的残差无法从刚才的前向传播式子中反推出来。上周日正是因为式中的隐层残差是传给t-1时刻而不是当前t时刻,才没有推出t+1时刻的残差。所以,我们需要写一个“新”的前向传播公式,其前向传播的方向如下图红色箭头所示:



针对t时刻的隐层而言,蓝色箭头的反方向代表输出层的残差传递,红色箭头的反方向则代表隐层残差传递。为了推出另一部分从t+1时刻的隐层传递回来得残差,我们不妨写出红色箭头所代表的前向传播公式:



跟之前的前向传播公式相比,其实就是输出层换成了下一时刻隐层。有了这个时间维度的前向传播公式,我们就能写出另一半来自t+1时刻隐层的残差公式:



最后,隐层权重向量Wh’h的梯度计算过程以及权重更新方式如下图所示:



至此,朴素RNN的三个权重向量W的公式就全部推导完成了。这里想特别讲一下RNN的梯度消失问题,回到上面图中的那个红色箭头,这里只推导了t+1时刻隐层传回的残差。试想一下,如果是t+n时刻呢?可想而知,时间相隔越远,梯度的贡献越小。这便是朴素RNN的缺点,模型表现为容易“忘事”。但经过改进的RNN模型可以克服这个缺点,便是我们上节提到的LSTM模型。敬请期待下节。

对本文推导有任何问题或疑问,欢迎留言交流。

结语

感谢各位的耐心阅读,后续文章于每周日奉上,敬请期待。欢迎大家关注小斗公众号 对半独白

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息