Introduction Recurrent Neural Network
Basic Recutrent Neral Network
循环神经网络也分为两层,Recurrent Layer & Full-Connection Layer
- 网络在t时刻接收到输入$x_t$之后,隐藏层的值是$s_t$,输出值是$o_t$
- 关键一点是,网络在t时刻接收到输入的值不仅仅取决于$x_t$,还取决于$s_{t-1}$ 计算方法为
输出值的循环计算为:
Two-Way Recurrent Neural Network
双向循环神经网络,隐藏层要计算两个值,一个是$s_t$正方向的值,一个是${s}_t’$反方向的值
计算如下:
Deep Recurrent Neural Network
有多个隐藏层的深度循环网络
Train Recurrent Neural Network
BPTT(Back Propagation Through Time)算法
- 前向计算每个神经元的输出值
- 反向计算每个神经元的误差项值$\delta_j$(误差函数E对神经元j的加权输入$net_j$的偏导数)
- 计算每个权重的梯度
- 随机梯度下降更新权重
Forward Calculate
计算公式如下:
- $\mathrm{s}t$,$\mathrm{x}_t$,$\mathrm{s}{t-1}$都是向量
- U、V是矩阵 可用矩阵标示
Calculate $\mathbf{ \Large { \frac{\partial{E}}{\partial{w_{ji}}}} }$
- $\delta_j^t=\frac{\partial{E}}{\partial{net_j^t}}$ (refrence Calculate $\mathbf{ \delta_k^T }$)
- $s_i^{t-1} =\frac{\partial{net_j^t}}{\partial{w_{ji}}}$
Calculate $\mathbf{ \Large { \delta_k^T} }$
- $net_t$表示神经元在t时刻的加权输入:
Calcaulte $\mathbf{ { \nabla_WE}}$
Calcaulte $\mathbf{ { \nabla_UE}}$
Grendient Dscent
single vaule calculate
matrix calculate
Reasoning Process
[01] Reasoning $\mathbf{\delta_k^T}$
计算误差项$\frac{\partial{\mathrm{net}t}}{\partial{\mathrm{net}{t-1}}}$
先计算第一项$\frac{\partial{\mathrm{net}t}}{\partial{\mathrm{s}{t-1}}}$
第一项是向量函数对向量求导,其结果为Jacobian矩阵:
再计算第二项$\frac{\partial{\mathrm{s}{t-1}}}{\partial{\mathrm{net}{t-1}}}$
第二项也是一个Jacobian矩阵:
- daig[a] 表示向量a创建一个对角矩阵