RNN原理理解

参考博客

https://zybuluo.com/hanbingtao/note/541458

语言模型

语言模型:语言模型是对一种语言的特征进行建模,例如给定一个一句话前面的部分,预测接下来最有可能的一个词是什么。让神经网络输出概率:softmax层作为输出层。

N-Gram:假设一个词出现的概率只与前面N个词相关。模型的大小和N的关系是指数级的。

RNN:理论上可以往前(或者往后)看任意多个词。

循环神经网络

循环神经网络(Recurrent Neural Network,RNN),能够更好的处理序列的信息,在NLP中有很多应用。RNN有很多种类。

基本RNN(只是单向的)

输入层+一个隐藏层(RNN的核心结构)+一个输出层(全连接层)

x是一个向量,它表示输入层的值, s是一个向量,它表示隐藏层的值(这里隐藏层面画了一个节点,你也可以想象这一层其实是多个节点,节点数与向量s的维度相同),o也是一个向量,它表示输出层的值。

U是输入层到隐藏层的权重矩阵,V是隐藏层到输出层的权重矩阵。

循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。权重矩阵W就是隐藏层上一次的值作为这一次的输入的权重。

注意RNN有时刻的概念,与输入有关,在t时刻接收到输入xt之后,隐藏层的值是st,输出值是ot。关键一点是,st的值不仅仅取决于xt,还取决于st-1

公式如下:

 

f和g都是激活函数,f对应着隐藏层(循环层),g对应着输出层(是一个全连接层)

循环层和全连接层的区别就是循环层多了一个权重矩阵 W。

双向RNN

既考虑前面的词,也考虑后面的词。

 

双向卷积神经网络的隐藏层要保存两个值,一个A参与正向计算,另一个值A'参与反向计算。

正向计算时,隐藏层的值有关;反向计算时,隐藏层的值有关;最终的输出取决于正向和反向计算的加和

计算公式如下:

正向和反向计算权值不共享,有不同的权重矩阵。

深度RNN

深度RNN:两个及以上的隐藏层就是深度RNN。

 计算公式如下:

RNN循环层的训练方法:BPTT(Back Propagation through Time)

BPTT算法是针对循环层的训练算法,它的基本原理和BP算法是一样的,也包含同样的三个步骤:

  • 前向计算每个神经元的输出值
  • 反向计算每个神经元的误差项
  • 计算每个权重的梯度

最后再用随机梯度下降法(SGD)更新权重。

循环层如下图所示:

 

 

循环层的公式为:

 

 

用矩阵表示为:

 

 

 误差项的计算:

BTPP算法将第l层t时刻的误差项值沿两个方向传播,一个方向是其传递到输入层,这部分只和权重矩阵U有关;另一个是方向是将其沿时间线传递到上一个时刻,这部分只和权重矩阵W有关。

具体计算和推导见:https://zybuluo.com/hanbingtao/note/541458

 

 

 

 权重梯度的推导见:https://zybuluo.com/hanbingtao/note/541458

 

 

 

 

 

RNN的梯度爆炸和梯度消失问题

产生梯度爆炸和梯度消失问题的原因:

 

 RNN的实现见:https://zybuluo.com/hanbingtao/note/541458

posted @ 2021-07-28 18:00  永远是个小孩子  阅读(886)  评论(0编辑  收藏  举报