Recurrent Neural Network(Ⅱ)
上一篇文章介绍了RNN的基本架构,像这么复杂的结构,我们该如何训练呢?
Learning Target
Loss Function
依旧是Slot Filling的例子,我们需要把model的输出 y i y^i yi与映射到slot的reference vector求交叉熵,比如“Taipei”对应到的是“dest”这个slot,则reference vector在“dest”位置上值为1,其余维度值为0
RNN的output和reference vector的cross entropy之和就是损失函数,也是要minimize的对象
需要注意的是,word要依次输入model,比如“arrive”必须要在“Taipei”前输入,不能打乱语序

Training
有了损失函数后,训练其实也是用梯度下降法,为了计算方便,这里采取了反向传播(Backpropagation)的进阶版,Backpropagation through time,简称BPTT算法
BPTT算法与BP算法非常类似,只是多了一些时间维度上的信息,这里不做详细介绍

不幸的是,RNN的训练并没有那么容易
我们希望随着epoch的增加,参数的更新,loss应该要像下图的蓝色曲线一样慢慢下降,但在训练RNN的时候,你可能会遇到类似绿色曲线一样的学习曲线,loss剧烈抖动,并且会在某个时刻跳到无穷大,导致程序运行失败

Error Surface
分析可知,RNN的error surface,即loss由于参数产生的变化,是非常陡峭崎岖的
下图中, z z z轴代表loss, x x x轴和 y y y轴代表两个参数 w 1 w_1 w1和 w 2 w_2 w