循环神经网络RNN
循环神经网络是啥
话不多说,先上图:
没错这就是一张简单的神经网络模型图,很抽象的表达方式。
其中x表示输入向量,s是隐藏层的值,o是输出层的值,U、V分别是输入层到隐藏层的权重矩阵,隐藏层到输出层的权重矩阵,而权重矩阵表示隐藏层上一次的值作为这一次输入的权重。
把上图展开,即可以化成:
这样一看,就比较清晰了。即t时刻接收到输入向量
x
t
\mathrm{x}_{t}
xt之后,隐藏层的值是
s
t
\mathrm{s}_{t}
st,输出值是
O
t
\mathrm{O}_{t}
Ot。其中最重要的是,
s
t
\mathrm{s}_{t}
st的值不仅取决于
x
t
\mathrm{x}_{t}
xt,还取决于
S
t
−
1
\mathrm{S}_{t-1}
St−1。
这样从上图可以看出,循环神经网络的输出值
O
t
\mathrm{O}_{t}
Ot,是受前面的输入值
x
t
\mathrm{x}_{t}
xt,
x
t
−
1
\mathbf{x}_{t-1}
xt−1…影响的,这就是循环神经网络可以往前看任意多个输入值的原因。
循环神经网络训练算法
针对循环层的训练算法,他的基本原理和BP(可以找其他博文学习)算法是一样的,包含如下三个步骤:
- 前向计算每个神经元的输出值;
- 反向计算每个神经元的**误差项 δ j \delta_{j} δj值,他是误差函数的E对神经元j的加权输入net j _{j} j**的偏导数
- 计算每个权重的梯度
最后再用随机梯度下降算法更新权重。