LSTM的原理和实现

本文深入解析LSTM(长短期记忆)网络结构,一种为解决序列数据长期依赖问题设计的循环神经网络。文章详细介绍了LSTM的细胞状态、三种门控机制(遗忘门、输入门、输出门)及工作原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LSTM网络结构

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

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

LSTM核心

  每个LSTM的重复结构称之为一个细胞(cell),在LSTM中最关键的就是细胞的状态,下图中贯穿的那条横线所表示的就是细胞状态。这条线的意思就是Ct−1C_{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
遗忘门

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

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

输入门

  第二步: 决定从新的信息中存储哪些信息到细胞状态中去。即产生要更新的信息。
在这里插入图片描述
  包含两个小的神经网络层,一个是熟悉的sigmoid部分:it=σ(Wi⋅[ht−1,xt]+bi)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⁡(WC⋅[ht−1,xt]+bC)\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)  其中的WCW_CWCbCb_CbC都是要通过训练得到的。
  sigmoid 层接收xtx_txtht−1h_{t-1}ht1产生决定我们要更新哪些信息。接下来一个tanh层产生候选状态值 C~t\tilde{C}_tC~t 。再联合待更新的数值与候选状态值,对旧的状态Ct-1 进行更新。

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

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

输出门

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值