课程视频地址:https://study.163.com/courses-search?keyword=CS231

课程主页:http://cs231n.stanford.edu/2017/

这一讲介绍了循环神经网络(RNN)。

RNN基本概念

RNN用于处理序列数据,根据输入输出的数量,RNN有如下几种形式

一般的RNN架构如下

每一步中,我们使用$t$时刻的输入$x_t$和$t-1$时刻的状态$h_{t-1}$计算$t$时刻的状态$h_t$,然后利用$h_t$计算输出$y_t$,所以$h_t​$的公式如下

常见的形式如下

实际中,一般将第二张图片中的架构展开,这样更便于理解。

多对多

多对一

一对多

例子

来看个生成字母的例子,假设字母为[h,e,l,o],可以利用如下网络生成字母

还有一个例子是Image Captioning,即给图像打标签,处理方法是现将图像喂给CNN,然后将全连接层的输出结果喂给RNN,具体形式如下

LSTM

首先对一般的RNN形式作改写

反向传播的梯度流如下

所以如果$W$的最大奇异值大于$1$,那么会有梯度爆炸的问题;如果最大奇异值小于$1$,就会有梯度消失的问题。解决这个问题的方法是使用LSTM,两者对比如下

更详细的解释如下

由公式不难看出,$c_{t}$到$c_{t-1}$的反向传播不需要乘以矩阵$W$,所以不会有梯度消失或者梯度爆炸的问题,反向传播的梯度流如下