RNN->LSTM->BiLSTM神经网络结构

最近在学习《自然语言处理 基于预训练模型的方法》,打打公式吧。

RNN(Recurrent Neural Network)

h t = t a n h ( W x h x t + b x h + W h h h t − 1 + b h h ) h_t = tanh(W^{xh}x_{t}+b^{xh}+W^{hh}h_{t-1}+b^{hh}) ht=tanh(Wxhxt+bxh+Whhht1+bhh)
y = s o f t m a x ( W h y h n + b h y ) y=softmax(W^{hy}h_{n}+b^{hy}) y=softmax(Whyhn+bhy)
RNN->LSTM->BiLSTM神经网络结构_第1张图片
如果是文本分类问题,可以只在最后进行输出结果,如下图所示:
RNN->LSTM->BiLSTM神经网络结构_第2张图片
  除此之外,还可以在每一时刻进行输出,可以用来处理序列标注问题,比如词性标注,NER,甚至分词。
RNN->LSTM->BiLSTM神经网络结构_第3张图片

LSTM(Long Short-Term Memory )

  由于在普通的RNN结构中,信息是通过隐含层逐层进行传递的,这样每传递一层就会导致信息的损失,由此出现了长短时记忆网络。

  为了不只是相邻两层有消息传递,有:

u t = t a n h ( W x h x t + b x h + W h h h t − 1 + b h h ) u_t = tanh(W^{xh}x_{t}+b^{xh}+W^{hh}h_{t-1}+b^{hh}) ut=tanh(Wxhxt+bxh+Whhht1+bhh)
h t = h t − 1 + u t h_t=h_{t-1}+u_t ht=ht1+ut

即: h t = h t − 1 + u t = h t − 2 + u t − 1 + u t = . . . . = h 1 + u 1 + . . . + u t h_t=h_{t-1}+u_t=h_{t-2}+u_{t-1}+u_{t}=....=h_1+u_1+...+u_t ht=ht1+ut=ht2+ut1+ut=....=h1+u1+...+ut

这样保证了对于 k < t kk<t,将 h k h_k hkand h t h_t ht连接了起来。

考虑到二者不应该知识线性的加权,所以引入了权重:

f t = σ ( W f , x h x t + b f , x h + W f , h h h t − 1 + b f , h h ) f_t = \sigma(W^{f,xh}x_{t}+b^{f,xh}+W^{f,hh}h_{t-1}+b^{f,hh}) ft=σ(Wf,xhxt+bf,xh+Wf,hhht1+bf,hh)
h t = f t ⊗ h t − 1 + ( 1 − f t ) ⊗ u t h_t = f_t\otimes h_{t-1} + (1-f_t) \otimes u_t ht=ftht1+(1ft)ut

  其中, σ \sigma σ是sigmoid函数,通过该函数得到0-1之间的值,可以看作是权重。当值过小时,可以看作是将 h t h_t ht的知识给遗忘了,因此 f t f_t ft也被称作是遗忘门。同时发现,两项的系数成反比,对于有时候是正比的情况下,所以需要改进 u t u_t ut的权重系数。

有:
i t = σ ( W i , x h x t + b i , x h + W i , h h h t − 1 + b i , h h ) i_t = \sigma(W^{i,xh}x_{t}+b^{i,xh}+W^{i,hh}h_{t-1}+b^{i,hh}) it=σ(Wi,xhxt+bi,xh+Wi,hhht1+bi,hh)
h t = f t ⊗ h t − 1 + i t ⊗ u t h_t = f_t\otimes h_{t-1} + i_t \otimes u_t ht=ftht1+itut

  其中 i t i_t it用来控制输入变量 u t u_t ut的贡献,被称作是输入门

有了遗忘门控制过去时刻的贡献,输入门控制现在输入变量的贡献,下面引进输出门控制输出。

o t = σ ( W o , x h x t + b o , x h + W o , h h h t − 1 + b o , h h ) o_t = \sigma(W^{o,xh} x_{t}+b^{o,xh}+W^{o,hh}h_{t-1}+b^{o,hh}) ot=σ(Wo,xhxt+bo,xh+Wo,hhht1+bo,hh)
c t = f t ⊗ c t − 1 + i t ⊗ u t c_t = f_t \otimes c_{t-1} + i_t \otimes u_t ct=ftct1+itut
h t = o t ⊗ t a n h ( c t ) h_t = o_t \otimes tanh(c_t) ht=ottanh(ct)

其中,c-t被称为记忆细胞,即存储了截至到当前时刻的2所有重要信息。

BiLSTM

  我们发现了,无论是传统的RNN还是LSTM,都是从前往后传递信息,这在很多任务中都有局限性,比如词性标注任务,一个词的词性不止和前面的词有关还和后面的词有关。

  为了解决该问题,设计出前向和方向的两条LSTM网络,被称为双向LSTM,也叫BiLSTM。其思想是将同一个输入序列分别接入向前和先后的两个LSTM中,然后将两个网络的隐含层连在一起,共同接入到输出层进行预测。
RNN->LSTM->BiLSTM神经网络结构_第4张图片另外一种对RNN改进的方式是通过将多个网络堆叠起来,形成stacked Rnn.

你可能感兴趣的:(自然语言处理,rnn)