总结自吴恩达老师的网易深度学习工程师微专业

1. 前向传播

循环神经网络(Recurrent Neural Network, RNN)
at=g(a)(Waaa<t1>+Waxx<t>+ba)a^{t}=g^{(a)}(W_{aa}a^{<t-1>}+W_{ax}x^{<t>}+b_a)
y^<t>=g(y)(Wyaa<t>+by)hat y^{<t>}=g^{(y)}(W_{ya}a^{<t>}+b_y)
or, 简化版
at=g(a)(Wa[a<t1>,x<t>]+ba)a^{t}=g^{(a)}(W_a[a^{<t-1>}, x^{<t>}]+b_a)
y^<t>=g(y)(Wya<t>+by)hat y^{<t>}=g^{(y)}(W_ya^{<t>}+b_y)

Note

  1. 一般而言,初始**向量为:a<0>=0a^{<0>}=vec0
  2. 通常,g(a)g^{(a)}选择tanhtanh函数(tanhtanh函数梯度消失的问题会用其他方式解决),有时也会选用relurelu函数。
  3. y^<t>=g(y)(Wyaa<t>+by)hat y^{<t>}=g^{(y)}(W_{ya}a^{<t>}+b_y)如果是二分类问题,使用sigmoidsigmoid函数,如果是多分类问题,可以使用softmaxsoftmax函数。

2. 损失函数

为了进行反向传播计算,使用梯度下降等方法来更新RNN的参数,我们需要定义一个损失函数,如下:
L(y^,y)=t=1TyL<t>(y^<t>,y<t>)=t=1Ty(y<t>log(y^<t>)+(1y<t>)log(1y^<t>))L(hat y,y)=sum^{T_y}_{t=1}L^{<t>}(hat y^{<t>},y^{<t>})=sum^{T_y}_{t=1}-(y^{<t>}log(hat y^{<t>})+(1-y^{<t>})log(1-hat y^{<t>}))

3. BPTT

RNN的反向传播将在后续部分有专门的介绍。