HBU-NNDL 作业10:第六章课后题(LSTM | GRU)

目录

习题6-3 当使用公式(6.50)作为循环神经网络得状态更新公式时,分析其可能存在梯度爆炸的原因并给出解决办法.

习题6-4 推导LSTM网络中参数的梯度,并分析其避免梯度消失的效果

习题6-5 推导GRU网络中参数的梯度,并分析其避免梯度消失的效果

附加题 6-1P 什么时候应该用GRU? 什么时候用LSTM? 

心得体会


 

习题6-3 当使用公式(6.50)作为循环神经网络得状态更新公式时,分析其可能存在梯度爆炸的原因并给出解决办法.

原因

公式:h_t=h_{t-1}+g(x_t,h_{t-1};\theta ),此时可能存在||diag(f'(z_t))U^\top||> 1,则在计算梯度时有:

z_k=Uh_{k-1}+Wx_k+bg(\cdot)在第k时刻的输入,则在\delta_{t,k}=\frac{\partial L_t}{\partial z_k}时,有:

\delta _{t,k}=diag(f'(z_k))U^T \delta_{t,k+1}=\delta_{t,t}\prod_{i=k}^{t}diag(f'(z_k))U^T

因此:t-k\rightarrow +\infty时,\delta_{t,k}\rightarrow +\infty,故梯度此刻可能爆炸了。

解决方法

  1. 使用基于门控的循环神经网络;
  2. 使用更小的U和f(⋅)缓解,尽量让||diag(f'(z_t))U^\top||\approx 1

习题6-4 推导LSTM网络中参数的梯度,并分析其避免梯度消失的效果

第t时刻的输入向量:x_t

权重参数:W_i,W_c,W_f,W_o,U_i,U_c,U_f,U_o

偏置:b_i,b_c,b_f,b_o

\sigma:sigmoid函数

V:\frac{\partial o_t}{\partial h_t}

前向传播

HBU-NNDL 作业10:第六章课后题(LSTM | GRU)_第1张图片

 反向传播

隐藏状态h_tc_t​的梯度为:\delta h_t=\frac{\partial L}{\partial h_t}\delta c_t =\frac{\partial L}{\partial c_t}

损失函数:L(t)=l(t)+L(t+1) = l(t)+\sum\limits^{\tau-t}_{i=t+1}l(i)

最后时刻\tau时:

\delta h_\tau=(\frac{\partial o_\tau}{\partial h_\tau})^\top\frac{\partial L_\tau}{\partial o_\tau}=V^\top(\hat{y_t}-y_t)

\delta c_\tau = (\frac{\partial h_\tau}{\partial c_\tau})^\top\frac{\partial L(\tau)}{\partial h_\tau}=o_\tau \odot (1-tanh^2(c_\tau))\odot\delta h_\tau

从第t+1时刻反向传播到第t时刻:

\delta h_t = \frac{\partial L}{\partial h_t}=\frac{\partial l(t)}{\partial h_t}+(\frac{\partial h_{t+1}}{\partial h_t})^\top\frac{\partial L(t+1)}{\partial h_{t+1}}=V^\top(\hat{y_t}-y_t)+(\frac{\partial h_{t+1}}{h_t})^\top \delta h_{t+1}

又有:\triangle c_t = o_{t+1}\odot [1-tanh^2(c_{t+1})]

\frac{\partial h_{t+1}}{\partial h_t}=diag[o_{t+1}\odot (1-o_{t+1})\odot tanh(c_{t+1})]W_o+diag[\triangle c\odot f_{t+1}\odot (1-f_{t+1})\odot c_t]W_f +diag\{\triangle c\odot i_{t+1}\odot[1-(c_{t+1})^2]\}W_c+diag[\triangle c\odot c_{t+1}\odot i_{t+1}\odot (1-i_{t+1})]W_i

\delta c_t = (\frac{\partial c_{t+1}}{\partial c_t})^\top\frac{\partial L}{\partial c_{t+1}}+(\frac{\partial h_t}{\partial c_t})^\top\frac{\partial L}{\partial h_t}=(\frac{\partial c_{t+1}}{\partial c_t})^\top\delta c_{t+1}+\delta h_t \odot o_t \odot (1-tanh^2(c_t))

因此有:\delta c_t=\delta c_{t+1}\odot f_{t+1}+\delta h_t\odot o_t \odot (1-tanh^2(c_t))

于是:\frac{\partial L}{\partial W_f}=\sum\limits ^\tau_{t=1}[\delta c_t \odot c_{t-1}\odot f_t \odot (1-f_t)]h_{t-1}^\top

LSTM遗忘门值可以选择在[0,1]之间,让LSTM来改善梯度消失的情况。也可以选择接近1,让遗忘门饱和,此时远距离信息梯度不消失。也可以选择接近0,此时模型是故意阻断梯度流,遗忘之前信息。

参考:LSTM如何来避免梯度弥散和梯度爆炸? - 知乎

习题6-5 推导GRU网络中参数的梯度,并分析其避免梯度消失的效果

GRU将三门变两门:更新门z_t,重置门r_t,单元状态c与输出o合并为一个状态h

前向传播 

HBU-NNDL 作业10:第六章课后题(LSTM | GRU)_第2张图片

反向传播

参考:人人都能看懂的LSTM介绍及反向传播算法推导(非常详细) - 知乎

HBU-NNDL 作业10:第六章课后题(LSTM | GRU)_第3张图片

 t时刻其它节点的梯度:

HBU-NNDL 作业10:第六章课后题(LSTM | GRU)_第4张图片

 对参数的梯度:

HBU-NNDL 作业10:第六章课后题(LSTM | GRU)_第5张图片

GRU它引⼊了重置⻔(reset gate)和更新⻔(update gate) 的概念,从而修改了循环神经⽹络中隐藏状态的计算⽅式。

附加题 6-1P 什么时候应该用GRU? 什么时候用LSTM? 

LSTM与GRU二者结构十分相似,不同在于:

新的记忆都是根据之前状态及输入进行计算,但是GRU中有一个重置门控制之前状态的进入量,而在LSTM里没有类似门;
产生新的状态方式不同,LSTM有两个不同的门,分别是遗忘门(forget gate)和输入门(input gate),而GRU只有一种更新门(update gate);
LSTM对新产生的状态可以通过输出门(output gate)进行调节,而GRU对输出无任何调节。

GRU的优点是这是个更加简单的模型,所以更容易创建一个更大的网络,而且它只有两个门,在计算性上也运行得更快,然后它可以扩大模型的规模。

LSTM更加强大和灵活,因为它有三个门而不是两个。
 

心得体会

        因为自己的数学功底比较差,这次作业的推导感觉很迷茫很吃力,同时也借鉴了很多其他人的文章,再结合上次BPTT的作业才勉强完成了这次的作业。但是期末考试在下学期,还有很长时间去复习,不必感到着急。

你可能感兴趣的:(lstm,gru,人工智能,神经网络,深度学习)