文本识别论文之基础构件LSTM学习

文本识别论文之基础构件解读

  • 1. lstm
    • 1.1 lstm cell
    • 1.2 multi-layer long short-term memory
    • 1.3 (bidirection) multi-layer long short-term memory
    • 1.4 总结

  文本识别论文中经常会涉及到lstm、rnn、attention等名词,本篇文章是对这些基础构件的总结和介绍。

1. lstm

  lstm构件主要从3部分进行介绍:

  • 最小单元:lstm cell
  • 实际使用样式一:多层多时序lstm
  • 实际使用样式二:(双向)多层多时序lstm

1.1 lstm cell

  pytorch官网关于lstm的注释,将lstm cell的过程描述为如下6个公式:

文本识别论文之基础构件LSTM学习_第1张图片

Fig1 LSTM cell 公式

  参考网上的资源,可以绘制出对应该公式的lstm cell简图。

文本识别论文之基础构件LSTM学习_第2张图片

Fig2 LSTM cell 简图

  这里稍做阐述:每一个lstm cell的输入有3个: x t x_t xt c t − 1 c_{t-1} ct1 h t − 1 h_{t-1} ht1,输出有两个 c t c_{t} ct h t h_{t} ht
   x t x_t xt表示的是时刻 t t t时的数据embedding输入, c t − 1 c_{t-1} ct1表示上一个时刻 t − 1 t-1 t1lstm cell的state, h t − 1 h_{t-1} ht1表示上一个时刻 t − 1 t-1 t1 lstm cell的hidden。显然,对于 t = 0 t=0 t=0时刻, 需要"凭空"存在一个 h − 1 h_{-1} h1 c − 1 c_{-1} c1,这两个值是通过赋予一个可学习的variable来做到。

1.2 multi-layer long short-term memory

文本识别论文之基础构件LSTM学习_第3张图片

Fig3 MultiLayer LSTM简图(2层5时序)

>>> rnn = nn.LSTM(10, 20, 2)
>>> input = torch.randn(5, 3, 10)
>>> h0 = torch.randn(2, 3, 20)
>>> c0 = torch.randn(2, 3, 20)
>>> output, (hn, cn) = rnn(input, (h0, c0))

  上述代码是pytorch官网提供的。这里阐明以下几点:

  • 在构建lstm的时候,初始参数为输入维度10, 输出维度20和lstm层数2,而时序数并没有在lstm构建的时候传递进去。
  • h 0 h0 h0 c 0 c0 c0如上所述是随机构造的一个可学习的state和hidden初始值。
  • 当前层的 h t 0 h_t^0 ht0作为下一层 h t 1 h_t^1 ht1的输入的时候,并非直接透传,而是通过乘以了一个Bernoulli random variable的 δ t 0 \delta_t^0 δt0

1.3 (bidirection) multi-layer long short-term memory

  在实际使用中大家会使用bidirection的lstm比较多一点。例如CRNN和Aster这两篇识别网络中,均使用的BLSTM。
文本识别论文之基础构件LSTM学习_第4张图片

Fig4 采用bidirectional LSTM的CRNN算法

文本识别论文之基础构件LSTM学习_第5张图片

Fig5 采用bidirectional LSTM的Aster算法

  在构造lstm模块的时候,有一个bidirectional参数,如果设置为True则变成了blstm,默认为False。如果是blstm,则output为正向和反向hidden states的concatenation。

1.4 总结

   lstm作为文本识别算法中经常用到的一个基础构件,对于更好的理解和学习文本识别论文,具有重要的意义。本位参考了网上的资源和pytorch官网对lstm进行了一定的总结和学习,包括了lstm cell、MultiLayer Lstm和 Bidirectioanl MultiLayer Lstm。

你可能感兴趣的:(从调参侠到算法工程师,lstm,深度学习,blstm,文本识别,encoder)