首先先复习一下 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$ 已经放在右上角了
非常清晰