LSTM-CRF模型

介绍

LSTM-CRF是一个用于命名实体识别的内嵌CRF的LSTM模型。

好处呢

循环神经网络解决了传统神经网络只依赖于当前输入的问题。
长短时记忆网络模型解决了循环神经网络由于梯度爆炸或消失只能学习到短周期的依赖关系问题。

记忆单元

LSTM模型通过引入一组记忆单元使得神经网络具有学习遗忘历史信息的能力。

在时刻$t$,记忆单元$c_t$记录了当前时刻为止的所有历史信息,并受三个门的控制:

  • 输入门$i_t$
  • 遗忘门$c_t$
  • 输出门$o_t$

有下列一组计算公式,是peeholes convolutional LSTM的式子

$$
\begin{split}
i_t&=\sigma(W_ix_t+U_ih_{t-1}+V_ic_{t-1}), \\
f_t&=\sigma(W_ix_t+U_fh_{t-1}+V_fc_{t-1}), \\
o_t&=\sigma(W_ox_t+U_oh_{t-1}+V_oc_{t}), \\
\widetilde{c}_t&=\tanh(W_cx_t+U_ch_{t-1}+b_c), \\
c_t&=f_t\odot{c}_{t-1}+i_t\odot\widetilde{c}_t, \\
h_t&=o_t\odot\tanh(c_t)
\end{split}
$$

其中,$x_t$是当前时刻的输入,$\sigma$是$\mathrm{logistic}$函数,也就是$\mathrm{sigmoid}$(如下),$V_i$,$V_f$,$V_o$是对角矩阵。

$$
\sigma(x)=\frac{1}{1+e^{-x}}
$$

$c_t$指cell在t时刻的状态,$\widetilde{c}_t$是对输入和上一时刻的状态进行处理后的值。

那么$W$和$U$又是什么呢?

$W$是对于输入值$x$的权重,$U$则是对于从输出返回来的输入$h$的权重。

我们先看一组简单一点的LSTM式子:

$$
\begin{split}
i_t&=\sigma(W_ix_t+U_ih_{t-1}+b_i), \\
f_t&=\sigma(W_ix_t+U_fh_{t-1}+b_f), \\
o_t&=\sigma(W_ox_t+U_oh_{t-1}+b_o), \\
\widetilde{c}_t&=\tanh(W_cx_t+U_ch_{t-1}+b_c), \\
c_t&=f_t\odot{c}_{t-1}+i_t\odot\widetilde{c}_t, \\
h_t&=o_t\odot\tanh(c_t)
\end{split}
$$

我们可以看到输入门,遗忘门和输出门的值,都是由当前输入乘上输入权重,上一轮的输出乘上对应的权重,和一个偏置项的和,套上一层$\mathrm{sigmoid}$组成的。
而计算Cell状态$c$时,引入的$\widetilde{c}_t$也有类似的权重加偏置项,然后使用$\tanh$激活。
$c$的计算是对上一回$c$的状态和遗忘门使用madamard积,也就是将对应的位置乘起来,而我们的遗忘门经过了sigmoid之后是$(0,1)$之间的值,这么一乘就可以以一定的比例“遗忘”上一回的状态。除了遗忘之外,我们还需要将新的输入也加上,这一个项$i_t\odot\widetilde{c}_t$使用输入门和$\widetilde{c}_t$求madamard积获得。
最后是这一层的输出$h$则是用输出门与$c_t$求madamard积。$c_t$可以使用$\tanh$激活,也可以不使用。

初始化时,$h_0$和$c_0$均为0。

我们根据上面的一通分析可以描述一下$\mathrm{LSTM}$的结构:

有一个Cell $c$,初始状态都是0,每一时刻的输入来自输入和自身在前一时刻的状态$c_{t-1}$经过的一些处理。

其中的输入来源有实际输入和上一次的输出。他们分别乘上对应的权重后,与一个偏置项求和,使用$\tanh$激活后再经过一层输入门,就成为了输入。

而自身上一次的状态则需要经过遗忘门。

最终这一个时刻的输出$h_t$则是由Cell状态$c$经过输出门得到的结果,而下一时刻输入门,输出门,遗忘门包括Cell再计算输入时,都会使用到这一个$h_t$。

因此这是一个循环的结构并且(如果训练得当)我们可以看出一次输出可能会受到很久以前的输入的影响,也许我应该看看为什么传统的RNN会产生梯度爆炸/消失而这个不会。

LSTM-CRF模型

啊……哦……这里是空的。

我们看完了LSTM但并不知道如何在其中嵌入一个CRF模型