整理并翻译自吴恩达深度学习系列视频:序列模型第一周,有所详略。
Recurrent Neural Network
一个标准的循环神经网络如图所示,在网络的每一个时间步t,它接受前一层的**函数值a<t−1>和输入x<t>, 使用权值矩阵使用Waa和Wax计算a<t>,使用结果a<t>和权值矩阵Wya计算y^<t>,计算方法如第二小节。
Forward Propagation
可总结为以下:
a<t>=g1(Waaa<t−1>+Waxx<t>+ba)
y^<t>=g2(Wyaa<t>+by)
上图右边是向量化版本的实现,它将两个参数矩阵横向堆砌成[Waa∣Wax]构成Wa,将两个输入纵向堆砌成[x<t>a<t−1>](横线表示分隔符不是除法)。
Backward Propagation
循环神经网络的反向传播同其他网络一致,按反方向计算导数,编程时框架会自动帮我们处理反向传播,但了解其基本原理也是有助益的。
如上图所示,需注意,每一个横向上的参数矩阵是共享的,Wy、by用于每次计算y<t>^,Wa、ba也用于每次计算x<t>。
其损失函数使用的是交叉熵(cross entropy loss)。
L<t>(y^<t>,y<t>)=−y<t>logy^<t>−(1−y<t>)log(1−y^<t>))
L(y^<t>,y)=t=1∑TL<t>(y^<t>,y<t>)
其他种类的RNN
根据输入和输出的对应关系,RNN有图示几种结构,即一对一、一对多、多对一、多堆多。