循环神经网络(Recurrent Neural Network, RNN)

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

1. 前向传播

在这里插入图片描述
a t = g ( a ) ( W a a a < t 1 > + W a x x < t > + b a ) a^{t}=g^{(a)}(W_{aa}a^{<t-1>}+W_{ax}x^{<t>}+b_a)
y ^ < t > = g ( y ) ( W y a a < t > + b y ) \hat y^{<t>}=g^{(y)}(W_{ya}a^{<t>}+b_y)
or, 简化版
a t = g ( a ) ( W a [ a < t 1 > , x < t > ] + b a ) a^{t}=g^{(a)}(W_a[a^{<t-1>}, x^{<t>}]+b_a)
y ^ < t > = g ( y ) ( W y a < t > + b y ) \hat y^{<t>}=g^{(y)}(W_ya^{<t>}+b_y)

Note

  1. 一般而言,初始激活向量为: a < 0 > = 0 a^{<0>}=\vec0
  2. 通常, g ( a ) g^{(a)} 选择 t a n h tanh 函数( t a n h tanh 函数梯度消失的问题会用其他方式解决),有时也会选用 r e l u relu 函数。
  3. y ^ < t > = g ( y ) ( W y a a < t > + b y ) \hat y^{<t>}=g^{(y)}(W_{ya}a^{<t>}+b_y) 如果是二分类问题,使用 s i g m o i d sigmoid 函数,如果是多分类问题,可以使用 s o f t m a x softmax 函数。

2. 损失函数

为了进行反向传播计算,使用梯度下降等方法来更新RNN的参数,我们需要定义一个损失函数,如下:
L ( y ^ , y ) = t = 1 T y L < t > ( y ^ < t > , y < t > ) = t = 1 T y ( y < t > l o g ( y ^ < t > ) + ( 1 y < t > ) l o g ( 1 y ^ < 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的反向传播将在后续部分有专门的介绍。

猜你喜欢

转载自blog.csdn.net/alwaysyxl/article/details/83217349