7

简述Bi-LSTM+CRF - JieJiSS' Blog

 3 years ago
source link: https://blog.jiejiss.com/%E7%AE%80%E8%BF%B0Bi-LSTM-CRF/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

主要也是最近刚在学校的某 “人工智能研讨会” 上展示了一个基于这玩意的项目,趁着还记得原理赶紧写下来。

Bi-LSTM#

这玩意全称是双向长短时记忆网络(Bi-directional Long-Short Term Memory)。其架构为一个双向 RNN,其每一个 Cell 的激活函数都被置换为一个 LSTM Cell。

RNN#

全称为 Recurrent Neural Network ,与传统神经网络的不同之处是自己可以传递权重给自己。大概像是这样:

我们把它在时间上展开(横轴为时间),可以得到:

上图就是所谓的 “上一秒的信息传递给下一秒的自己”。

在传统 RNN 里,每个 A 都是个激活函数,组网之后用 BPTT 算法暴力训练。

BPTT 算法使得梯度可以在时间通道上传递,但是由于局部梯度受过往梯度的累计影响是指数级的(设此时刻到下一时刻的权重为 st,则 Sigmoid 对应的梯度递推公式为 ∂Losst∂s∗t−1=(sk−1∗(1−sk−1))∗(WT×∂Losst∂s∗t),显然 Sigmoid 的梯度 sk−1∗(1−sk−1) 会累乘起来,以指数的方式影响结果),所以容易引发梯度爆炸或者梯度消失的问题。解决梯度消失可以换用 ReLU,只不过更容易发生梯度爆炸。梯度爆炸则可以通过设置阈值来避免。另外一种解决的思路就是更改 Cell 的结构,如 LSTM 网络和 GRU 网络。补充知识:LSTM 训练比 GRU 慢,模型更大,但结果更好。GRU 是在对 LSTM 进行简化的基础上产生的,所以一般大家如果要用到 RNN,都会选择直接上 LSTM。

双向 RNN#

双向 RNN 其实就是两个反向的 RNN 共用一个输入层和输出层,像这样:

其在 RNN 基础上增加的优点仅仅是可以同时考虑上下文。(RNN 只能考虑之前的状态,BRNN 之前和之后的都能考虑)

LSTM#

全称为 Long-Short Term Memory,是 RNN 的变种。在 LSTM 中,每一个 Cell A 都是这个样子的:

一个 LSTM Cell 内部有三个门(Gate),分别是遗忘门、输入门和输出门。LSTM 中信息的传递则是有设计专门的通道:

在这条通道上全部是线性运算,信息可以持续的传递下去,不会轻易改变或丢失。

遗忘门#

σ 是 Sigmoid 函数。于是很容易发现,上一时刻的 hidden state ht−1 与此时刻的输入 xt 级联之后,经过 Sigmoid 函数变换为一个 (0,1) 之间的值并与 Ct−1 相乘(element wise)。如果 σ 函数的输出 ft 接近 0,相当于 Ct−1 这个信息被忘掉了。

选择 Sigmoid 函数是因为其在定义域上大部分取值接近 0 或 1,可以近似对应上遗忘 / 不遗忘。然而这里不能采用阶跃函数,因为阶跃函数的梯度为 0,无法梯度下降,对其求导也会导致梯度消失。在后面的门中选择 Sigmoid 的理由类似。

其中,ft=σ(Wf⋅[ht−1,xt]+bf)。

输入门#

同样,ht−1 与 xt 级联之后经过 σ 的变换,与 tanh 的输出相乘,并与之前的细胞状态 Ct−1∗ft 相加,得到最终的细胞状态 Ct。tanh 存在的意义主要是为了将输入变换到 (−1,1) 之间,这样 ˜Ct∗it 各个元素仍然位于 (−1,1) 中,方能作为合法的细胞状态继续参与运算。如果 it 接近 0,那么意味着此输入没有加入到细胞信息中的必要,由于乘法的性质这个输入会被丢弃掉。

其中,it=σ(Wi⋅[ht−1,xt]+bi),˜Ct=σ(WC⋅[ht−1,xt]+bC)。

输出门#

仍然是 ht−1 与 xt 级联之后经过 σ 的变换,与 tanh(Ct) 相乘(仍然是 element wise),得到新的 hidden state ht。这个门控制是否要输出细胞信息到 hidden state 中,如果 ot 接近 0,则相乘完了仍然接近 0,相当于不会输出到 hidden state 里。tanh 的作用依旧是为了将 Ct 中的元素映射到 (−1,1) 内。

其中,ot=σ(Wo⋅[ht−1,xt]+bo),ht=ot∗tanh(Ct)

总结#

所以,Bi-LSTM 就是每个 Cell 都是 LSTM Cell 的双向 RNN。其拥有同时从上文和下文中提取信息的能力,并且相较于双向 RNN 正确率更高。

CRF#

全称为 Conditional Random Field,条件随机场。本文中主要说的是线性链条件随机场(Linear Chain CRF)。

随机场(RF)的定义:随机场是由若干个位置组成的整体,当给每一个位置中按照某种分布随机赋予一个值之后,其全体就叫做随机场。

马尔科夫随机场(MRF)的定义:某个随机场,其中某一个位置的赋值仅仅与和它相邻的位置的赋值有关,和与其不相邻的位置的赋值无关,则该随机场是马尔科夫随机场(具有马尔科夫性)。

条件随机场(CRF)的定义:某个马尔科夫随机场,其中只存在两个变量 X 和 Y,且 X 为自变量,Y 为因变量。则该马尔科夫随机场为条件随机场。

线性链条件随机场(Linear-CRF)的定义:某个条件随机场,其中的 X 和 Y 具有相同的维度,则该条件随机场为线性链条件随机场。

Linear-CRF 的数学定义:

设 X=(X1,X2,⋯,Xn),Y=(Y1,Y2,⋯,Yn) 均为线性链表示的随机变量序列,在给定随机变量序列 X 的情况下,随机变量 Y 的条件概率分布 P(Y|X) 构成条件随机场,也即满足马尔科夫性:

P(Yi|X,Y1,Y2,⋯,Yn)=P(Yi|X,Yi−1,Yi+1)

则称 P(Y|X) 为线性链条件随机场。 

CRF 层以 Bi-LSTM 层的输出为输入,其可以通过学习数据集中不同 label 间的转移概率从而修正 Bi-LSTM 层的输出。例如,对于 BIO 模型,不存在 I 开头的词,也不存在连续两个 B。如果 Bi-LSTM 给出了上述输出,则 CRF 层可以基于转移概率矩阵对其进行修改。

当然,CRF 除了验证以外,还可用于预测和判断。不过这两个功能我的项目中没有涉及,所以本文中无法给出详细的解释,免得说错了贻笑大方。

来源:https://blog.jiejiss.com/


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK