RNN循环神经网络
RNN循环神经网络,又称为时间循环神经网络。同样缩写是RNN的还有一种叫做递归神经网络(结构循环时间网络)。
1.基本循环神经网络
其中U、V、W 均为权重值,图片左边的基本循环图等价于右边分解后的循环图。从右图中我们可以看出隐藏值St 取决于St-1 和 xt 。
所以可以写出以下公式:其中 g()与 f() 为激活函数.
2.双向循环神经网络
一个参与正向计算的 A与一个参与反向计算的 A' 。所以这里就相当于又多了一个关系,即St 也与St+1有关。因此可以写出以下公式:
3.深层循环神经网络(多层隐藏层)
循环神经网络的训练
1.BPTT算法
流程:
- 前向计算每个神经元的输出值;
- 反向计算每个神经元的误差项值δ,它是误差函数E对神经元j的加权输入的偏导数;
- 计算每个权重的梯度。
- 使用梯度下降算法更新权重
前向计算:若写成矩阵就是下面这样的。
误差计算
计算权重的梯度:
LSTM长短期记忆
因为在梯度的计算过程中是累乘的,所以当数值大于或小于1就会出现累乘为无穷(爆炸)或0(消失),LSTM解决RNN训练中的梯度消失或者爆炸的方法。
LSTM的思路是这样的,在原先的隐藏层中加入一个单元状态C
正是使用这个状态单元C,才能起到控制作用,其运作图如下图所示
三个重要的门:遗忘门 .输入门 、输出门
遗忘门:决定了上一时刻的单元状态Ct-1 有多少保留到当前时刻Ct ;
输入门:决定了当前时刻网络的输入Xt 有多少保存到单元状态 Ct
输出门:单元状态Ct 有多少输出到LSTM的当前输出值 ht
上图所示的LSTM的内部结构,内部结构中的与
表示分别乘和加。
遗忘门:,遗忘门用一个sigmoid函数区分哪些该遗忘,那些该记住。所以经过这个sigmoid函数的参数是前一个状态S与当前的输入X组成的向量与一个权重W进行乘积。由此确定那部分为0那部分为1,0表示忘记,1表示记住,于是与上一个C相乘的时候就可以做到把该忘记的忘记了。其中b表示置偏项。
输入门:
it 挑选出当前状态下需要记住的东西,然后计算当前的单元状态 。最后整合前后的状态C 进行跟新。
输出门:
首先确定一下多少内容是需要输出出去,所以先建立一个Ot ,然后利用这个Ot 从新得出的单元状态C中计算得到 h
总结下就是下面这个图:
参考原文:
https://zybuluo.com/hanbingtao/note/581764