lstm和GRU推导

lstm:长短时记忆网络,是一种改进后的循环神经网络,可以解决RNN无法处理的长距离依赖问题。

 原始 RNN 的隐藏层只有一个状态,即h,它对于短期的输入非常敏感。再增加一个状态,即c,让它来保存长期的状态,称为单元状态(cell state)。

按照时间维度展开如下所示:

 在t时刻,lstm的输入有三个:当前时刻的网络的输入值、上时刻lstm的输出值、以及上一时刻的单元状态;lstm的输出有两个:当前时刻lstm的输出值、和当前时刻的单元状态。使用三个控制开关控制长期状态c:

在算法中利用门实现三个状态的功能:

门就是一个全连接层,输入的是一个向量,输出是一个0到1之间的实数向量。

 

 门控制的原理:用门的输出向量按照元素乘以我们需要控制的那个向量,门的输出不是0就是1,0乘以任何向量都是0代表不通过,1乘以任何向量不会发生改变。

遗忘门的计算方式:

 

 遗忘门:决定了上一时刻的单元状态c_t-1有多少保留到了c_t当前状态,Wf 是遗忘门的权重矩阵,[ht-1,xt]表示将两个变量拼接起来,bf是遗忘门的偏置项,是sigmoid函数。

输入门的计算:

 输入门:决定了当前时刻网络的输入x_t有多少保存到单元状态c_t.

根据上一次的输出和本次输入计算当前输入的单元状态:

当前时刻的单元状态c_t的计算由上一次的单元状态c_t-1乘以按元素乘以遗忘门ft,在用当前输入的单元状态c_t乘以输入门i_t,将两个积加和,可以将长期记忆和当前记忆结合起来形成新的单元状态。由于遗忘门的控制可以保存很久很久的信息。由于输入门的控制可以避免无关紧要的内容进入记忆。

目标是要学习8组参数:

权重矩阵是由两个矩阵拼接而成的。误差项是沿时间的反向传播,定义t时刻的误差项:

 

 权重矩阵计算公式如下:

总体流程总结:

原始输入循环体的是当前输入x_t和上前一步的输出h_{t-1},以及上一步的状态C_{t-1},

x_th_{t-1}先遇到遗忘门(forget gate)

f_{t}=sigmoid(W_f[h_{t-1},x_t]+b_f)

经过遗忘门的函数之后产生一个0到1之间的输出f_t,代表遗忘多少之前的状态C_{t-1},当f_t为0时代表全部遗忘,1代表完全保持。

另外一条路线上,x_th_{t-1}又会遇见输入门(input gate),输入门会决定记忆哪些值:

i_t=sigmoid(W_i[h_{t-1},x_t]+b+i)

另外同时经过tanh函数会产生一个新的状态C'_t

C'_t=tanh(W_C[h_{t-1},x_t]+b_C)

这个时候,由C_{t-1},f_t,C'_t,i_t就可以决定循环体的当前状态C_t了:

C_t=f_t*C_{t-1}+i_t*C'_t

有了当前的状态,自然就可以去输出门(output gate)了:

o_t=sigmoid(W_o[h_{t-1},x_t]+b_o)

h_t=o_t*tanh(C_t)

从上面的公式,我们容易发现,每个门的形态是一样的,都是通过sigmoid函数作用于当前的输入x_t和前一时刻的输出h_{t-1}产生一个0到1的数值,以此来决定通过多少信息。

 

 

猜你喜欢

转载自www.cnblogs.com/limingqi/p/12638664.html