循环神经网络

基础神经网络&双向神经网络

Posted by YangLong on June 4, 2017

Introduction Recurrent Neural Network

IMAGE

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

IMAGE
双向循环神经网络,隐藏层要计算两个值,一个是$s_t$正方向的值,一个是${s}_t’$反方向的值 计算如下:

Deep Recurrent Neural Network

IMAGE
有多个隐藏层的深度循环网络

Train Recurrent Neural Network

BPTT(Back Propagation Through Time)算法

  • 前向计算每个神经元的输出值
  • 反向计算每个神经元的误差项值$\delta_j$(误差函数E对神经元j的加权输入$net_j$的偏导数)
  • 计算每个权重的梯度
  • 随机梯度下降更新权重

IMAGE IMAGE IMAGE

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创建一个对角矩阵
使用第一项&第二项计算误差项$\frac{\partial{\mathrm{net}t}}{\partial{\mathrm{net}{t-1}}}$

02 Resoning $\mathbf{ { \nabla_WE}}$

03 Resoning $\mathbf{ { \nabla_UE}}$