LSTM的原理和实现

LSTM网络结构

  long short term memory,即我们所称呼的LSTM,是为了解决长期以来问题而专门设计出来的,所有的RNN都具有一种重复神经网络模块的链式形式。在标准RNN中,这个重复的结构模块只有一个非常简单的结构,例如一个tanh层。
在这里插入图片描述
  LSTM也有与RNN相似的循环结构,但是循环模块中不再是简单的网络,而是比较复杂的网络单元。LSTM的循环模块主要有4个单元,以比较复杂的方式进行连接。
在这里插入图片描述
  先熟悉以下标记:

在这里插入图片描述
  在上图中,每条线都承载着整个矢量,从一个节点的输出到另一个节点的输入。 粉色圆圈表示按点操作,如矢量加法,而黄色框表示学习的神经网络层。 合并的行表示串联,而分叉的行表示要复制的内容,并且副本到达不同的位置。

LSTM核心

  每个LSTM的重复结构称之为一个细胞(cell),在LSTM中最关键的就是细胞的状态,下图中贯穿的那条横线所表示的就是细胞状态。这条线的意思就是 C t − 1 C_{t-1} Ct1先乘以一个系数,再线性叠加后从右侧输出。
在这里插入图片描述  门可以实现选择性地让信息通过,主要是通过一个 sigmoid 的神经层 和一个逐点相乘的操作来实现的。
在这里插入图片描述
  sigmoid层输出的是0-1之间的数字,表示着每个成分能够通过门的比例,对应位数字为0表示不通过,数字1表示全通过。比如一个信息表示为向量[1, 2, 3, 4],sigmoid层的输出为[0.3, 0.5, 0.2, 0.4],那么信息通过此门后执行点乘操作,结果为[1, 2, 3, 4] .* [0.3, 0.5, 0.2, 0.4] = [0.3, 1.0, 0.6, 1.6]。

  LSTM共有3种门,通过这3种门控制与保护细胞状态。

逐步详解LSTM
遗忘门

  第一步: 通过遗忘门过滤掉不想要的信息;

在这里插入图片描述
  遗忘门决定遗忘哪些信息,它的作用就是遗忘掉老的不用的旧的信息,遗忘门接收上一时刻输出信息 h t − 1 h_{t-1} ht1和当前时刻的输入 x t x_t xt,然后输出遗忘矩阵 f t f_t ft决定上一时刻细胞状态 C t − 1 C_{t-1} Ct1的通过状态。
  让我们回到语言模型的示例,该模型试图根据所有先前的单词来预测下一个单词。 在这样的问题中,细胞状态可能包括当前受试者的性别,从而可以使用正确的代词。 看到新主语时,我们想忘记旧主语的性别。。
  左侧的 h t − 1 h_{t-1} ht1和下面输入的 x t x_t xt经过了连接操作,再通过一个线性单元,经过一个σ也就是sigmoid函数生成一个0到1之间的数字作为系数输出,表达式如上, W f W_f Wf b f b_f bf作为待定系数是要进行训练学习的。

输入门

  第二步: 决定从新的信息中存储哪些信息到细胞状态中去。即产生要更新的信息。
在这里插入图片描述
  包含两个小的神经网络层,一个是熟悉的sigmoid部分: i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) i_{t}=\sigma\left(W_{i} \cdot\left[h_{t-1}, x_{t}\right]+b_{i}\right) it=σ(Wi[ht1,xt]+bi)  另一个tanh标识(映射到-1到1)也是一个神经网络层,表达式为: C ~ t = tanh ⁡ ( W C ⋅ [ h t − 1 , x t ] + b C ) \tilde{C}_{t}=\tanh \left(W_{C} \cdot\left[h_{t-1}, x_{t}\right]+b_{C}\right) C~t=tanh(WC[ht1,xt]+bC)  其中的 W C W_C WC b C b_C bC都是要通过训练得到的。
  sigmoid 层接收 x t x_t xt h t − 1 h_{t-1} ht1产生决定我们要更新哪些信息。接下来一个tanh层产生候选状态值 C ~ t \tilde{C}_t C~t 。再联合待更新的数值与候选状态值,对旧的状态Ct-1 进行更新。

  第三步: 更新细胞状态
在这里插入图片描述
  新细胞状态 = 旧细胞状态 × 忘记门结果 + 要更新的新信息
  ( C t = f t ∗ C t − 1 + i t ∗ C ~ t C_{t}=f_{t} * C_{t-1}+i_{t} * \tilde{C}_{t} Ct=ftCt1+itC~t)

   f t f_t ft 是遗忘矩阵, C t − 1 C_{t-1} Ct1是上一时刻的状态(旧状态), i t i_t it 是决定要更新哪些数字, C ~ t \tilde{C}_{t} C~t是候选状态。

输出门

  第四步: 基于细胞状态,确定输出信息
在这里插入图片描述
  首先利用输出门(sigmoid层)产生一个输出矩阵 O t O_t Ot,决定输出当前状态 C t C_t Ct的哪些部分。接着状态 C t C_t Ct通过tanh层之后与 O t O_t Ot相乘,成为输出的内容 h t h_t ht
  一个输出到同层下一个单元,一个输出到下一层的单元上,首先,我们运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。 o t = σ ( W o [ h t − 1 , x t ] + b o ) o_{t}=\sigma\left(W_{o}\left[h_{t-1}, x_{t}\right]+b_{o}\right) ot=σ(Wo[ht1,xt]+bo)
接着,我们把细胞状态通过 tanh 进行处理(得到一个在 -1 到 1 之间的值)并将它和 sigmoid 门的输出相乘,最终我们仅仅会输出我们确定输出的那部分。 h t = o t ∗ tanh ⁡ ( C t ) h_{t}=o_{t} * \tanh \left(C_{t}\right) ht=ottanh(Ct)  在语言模型中,这种影响是可以影响前后词之间词形的相关性的,例如前面输入的是一个代词或名词,后面跟随的动词会学到是否使用“三单形式”或根据前面输入的名词数量来决定输出的是单数形式还是复数形式。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值