Implicitly-Defined Neural Networks for Sequence Labeling

论文链接:P17-2027


这篇论文介绍了一种新奇的、隐式定义神经网络,并且描述了计算它的方法。

1 介绍


传统的双向RNN只能单独计算两个方向的隐含层,现在介绍一种新的机制,将两个方向的信息直接结合起来计算。

2 INN


2.1 传统的RNN

经典的RNN给定一个输入序列$[{xi _1},{xi _2}, ldots ,{xi _n}]$和初始隐含层状态${h_s}$,然后迭代产生后续的隐含层状态:
[begin{array}{l}{h_1} = f({xi _1},{h_s})\{h_2} = f({xi _2},{h_1})\ cdots \{h_n} = f({xi _n},{h_{n - 1}})end{array}]LSTM、GRU和其他的相关变体计算方法也都类似,都是像下图这样线性计算,每一时刻的状态只依赖于当前输入和前一时刻的状态。

2.2 改进结构

这篇论文中这样计算隐含层状态:
[{h_t} = f({xi _t},{h_{t - 1}},{h_{t + 1}})]这样整个隐含层状态序列的等式就是隐式的,记为:
[H = [{h_1},{h_2}, ldots ,{h_n}]]在这个神经网络中,定义如下变量:数据$X$、标签$Y$、参数$theta$,定义如下函数:
输入层变换:
[xi = g(theta ,X)]隐式隐含层:
[H = F(theta ,xi ,H)]损失函数:
[L = ell (theta ,H,Y)]定义${h_s}$和${h_e}$为边界状态,$n$为输入序列长度,$F$函数构造出了一系列非线性等式:
[begin{array}{l}{h_1} = f({h_s},{h_2},{xi _1})\ cdots \{h_i} = f({h_{i - 1}},{h_{i + 1}},{xi _i})\ cdots \{h_n} = f({h_{n - 1}},{h_e},{xi _n})end{array}]INN结构如下图:

2.3 计算前向传播

为了计算等式$H = F(H)$,采用拟牛顿法。
令$G = H - F(H)$,转化为计算等式$ 大专栏  Implicitly-Defined Neural Networks for Sequence LabelingG = 0$。
[begin{array}{l}{H_{n + 1}} = {H_n} - {({nabla _H}G)^{ - 1}}G\{H_{n + 1}} = {H_n} - {(I - {nabla _H}F)^{ - 1}}({H_n} - F({H_n}))end{array}]注意到$(I - {nabla _H}F)$是一个稀疏矩阵,所以采用Krylov子空间方法,具体是稳定双共轭梯度法(BICG-STAB)算法来计算。

2.4 梯度

为了训练模型,采用随机梯度下降,定义损失函数:
[{nabla _theta }L = {nabla _theta }ell + {nabla _H}ell {nabla _theta }H]其中
[{nabla _theta }H = {nabla _theta }F + {nabla _H}F{nabla _theta }H + {nabla _xi }F{nabla _theta }xi ]所以
[{nabla _theta }H = {(I - {nabla _H}F)^{ - 1}}({nabla _theta }F + {nabla _xi }F{nabla _theta }xi )]所以整个梯度就是
[{nabla _theta }L = {nabla _theta }ell + {nabla _H}ell {(I - {nabla _H}F)^{ - 1}}({nabla _theta }F + {nabla _xi }F{nabla _theta }xi )]

2.5 转换函数

回忆在GRU中,有如下转换函数:
[begin{array}{l}{h_t} = (1 - {z_t}){ {hat h}_t} + {z_t}{ {tilde h}_t}\{ {tilde h}_t} = tanh (W{x_t} + U({r_t}{ {hat h}_t}) + tilde b)\{z_t} = sigma ({W_z}{x_t} + {U_z}{ {hat h}_t} + {b_z})\{r_t} = sigma ({W_r}{x_t} + {U_r}{ {hat h}_t} + {b_r})end{array}]其中在GRU中${ {hat h}_t} = {h_{t - 1}}$,在INN中做一个替代:
[begin{array}{l}{ {hat h}_t} = s{h_{t - 1}} + (1 - s){h_{t + 1}}\s = frac{ { {s_p}}}{ { {s_p} + {s_n}}}\{s_p} = sigma ({W_p}{x_t} + {U_p}{h_{t - 1}} + {b_p})\{s_n} = sigma ({W_n}{x_t} + {U_n}{h_{t + 1}} + {b_n})end{array}]

3 实验


序列标注

如下图所示,这个模型的效果甚至比标准的序列标注器还要好!

4 结论


介绍了一种隐式定义神经网络,应用到了序列标注任务上,效果比双向LSTM、双向GRU等还要好。
还有一些工作可以改进,比如可以在双向LSTM上面改造INN,加速计算${(I - {nabla _H}F)^{ - 1}}$等等。

猜你喜欢

转载自www.cnblogs.com/dajunjun/p/11694101.html