首先先复习一下LSTM的内部构造,上面这张图和我之前文章里不太一样,但其实本质上都是一样的,不必纠结
假设传入到cell的input叫做$z$,操控input gate的信号记为$z_i$,控制forget gate的信号记为$z_f$,控制output gate的信号记为$z_o$,综合这些东西得到的output记为$a$,假设memory里面已经存了一个值$c$
LSTM运算举例
接下来做一个实际的运算,先看下图具体的cell,每条线上面的值就是$weight$,绿色框和线构成$bias$,input gate和forget gate的activation function都是sigmoid,为了方便,$z_i,z_o,z_f$直接利用输入的vector,$g$和$h$假设都是Linear(这样计算比较方便),假设存到memory里面的初值是0
在实际运算前,我们先根据它的input以及其它参数,分析下可能会得到的结果。底下这个从外界传入的cell,$x_1$乘以1,其它$x$乘以0,相当于直接把$x_1$当做输入。在input gate中,$x_2$乘以100,$bias$是-10。在forget gate中,也是$x_2$乘以100,但$bias$变为了10。output gate中,$x_3$乘以100,$bias$是-10
接下来,我们带入一个实际的input([3, 1, 0])看看。input这里3*1=3。input gate这边是1*100-10=90,但是由于要经过一个sigmoid,所以$\approx 1$,那么$g(z)*f(z_i)=3$。forget gate这边是1*100+10=110,也要经过一个sigmoid,所以$\approx 1$,那么此时memory的值$c$就更新为$c'=g(z)*f(z_i)+c*f(z_f)=3+0*1=3$。output gate这边是0*100-10=-10,经过sigmoid以后$\approx 0$。于是最终输出$a=h(c')*f(z_o)=0$
后面的一些例子就不做带入了,读者自己手动算一算就行了,输出$y$已经放在右上角了
非常清晰