循环神经网络模型

整理并翻译自吴恩达深度学习系列视频:序列模型第一周,有所详略。

Recurrent Neural Network

循环神经网络模型一个标准的循环神经网络如图所示,在网络的每一个时间步tt,它接受前一层的**函数值a<t1>a^{<t-1>}和输入x<t>x^{<t>}, 使用权值矩阵使用WaaW_{aa}WaxW_{ax}计算a<t>a^{<t>},使用结果a<t>a^{<t>}和权值矩阵WyaW_{ya}计算y^<t>\hat{y}^{<t>},计算方法如第二小节。

Forward Propagation

循环神经网络模型
可总结为以下:
a<t>=g1(Waaa<t1>+Waxx<t>+ba)a^{<t>}=g_1(W_{aa}a^{<t-1>}+W_{ax}x^{<t>}+b_a)
y^<t>=g2(Wyaa<t>+by)\hat{y}^{<t>}=g_2(W_{ya}a^{<t>}+b_y)
循环神经网络模型
上图右边是向量化版本的实现,它将两个参数矩阵横向堆砌成[WaaWax][W_{aa}|W_{ax}]构成WaW_a,将两个输入纵向堆砌成[a<t1>x<t>][\frac{a^{<t-1>}}{x^{<t>}}](横线表示分隔符不是除法)。

Backward Propagation

循环神经网络模型
循环神经网络的反向传播同其他网络一致,按反方向计算导数,编程时框架会自动帮我们处理反向传播,但了解其基本原理也是有助益的。
循环神经网络模型
如上图所示,需注意,每一个横向上的参数矩阵是共享的,WybyW_y、b_y用于每次计算y<t>^\hat{y^{<t>}}WabaW_a、b_a也用于每次计算x<t>x^{<t>}

其损失函数使用的是交叉熵(cross entropy loss)。
L<t>(y^<t>,y<t>)=y<t>logy^<t>(1y<t>)log(1y^<t>))\mathcal{L}^{<t>}(\hat{y}^{<t>},y^{<t>})=-y^{<t>}log\hat{y}^{<t>}-(1-y^{<t>})log(1-\hat{y}^{<t>}))
L(y^<t>,y)=t=1TL<t>(y^<t>,y<t>)\mathcal{L}(\hat{y}^{<t>},y)=\sum_{t=1}^{T}\mathcal{L}^{<t>}(\hat{y}^{<t>},y^{<t>})

其他种类的RNN

循环神经网络模型
根据输入和输出的对应关系,RNN有图示几种结构,即一对一、一对多、多对一、多堆多。