lstm的理解
lstm的模型图如下
其中xt为当前时刻的输入,ct-1为上一个时刻的记忆,ht-1为上一个时刻的输出
分为输入门,遗忘门,输出门,三个门来实现
1.遗忘门:
遗忘门是用来计算上一时刻的记忆保存多少,计算方式为ft=sigmoid(Wf*[ht-1,xt]+bf),这个计算出是一个0,1之间的数字
2.输入门:
输入门是用来计算当前状态的记忆,计算方式为
it = sigmoid(Wi*[ht-1,xt]+bi)
~Ct = tanh(Wc*[ht-1,xt]+bc)
Cnow = ~Ct*it
就我自己的理解,感觉it应该被理解为当前记忆被加入记忆的比率
更新记忆
Ct = Ct-1*ft+Cnow
3.输出门
输出门控制此时刻的输出,计算方式为:
ot = sigmoid(Wo*[ht-1,xt]+bo)
ht = ot*tanh(Ct)
ps:使用sigmoid和tanh**函数的原因:
1.因为是以门的方式进行实现,所以要保证值在【0,1】之间,所以选取sigmoid和tanh
2.门实现应该最需要的是0,1的阶梯函数,因为不可导,所以使用sigmoid来进行近似
3.都是饱和函数,也就是说在输入达到一定值的情况下,输出就不会发生明显变化了
4.使用tanh函数,是因为其输出在-1-1之间,这与大多数场景下特征分布是0中心的吻合。此外,tanh函数在输入为0近相比 Sigmoid函数有更大的梯度,通常使模型收敛更快。