循环神经网络(RNN)之LSTM(Long Short Term Memory networks)

本文详细介绍了LSTM如何通过独特的网络结构解决RNN的长期依赖问题,包括遗忘门、输入门、输出门以及细胞状态的概念,帮助理解LSTM如何在序列数据处理中存储和遗忘信息。此外,还探讨了LSTM的变种,如GRU,并总结了LSTM在实际应用中的效果。
摘要由CSDN通过智能技术生成

目录

  1. RNN为何能记忆以及它面临的问题
  2. LSTM的网络结构
  3. LSTM的思想
  4. LSTM的详细网络结构
    步骤1:存什么,丢什么(forget gate layer:忘记门)
    步骤2:更新什么信息(输入门)
    步骤3:开始更新信息
    步骤4:当前时刻的输出
  5. 你可能会问关于LSTM的问题
  6. LSTM的变种(GRU)
  7. 总结

1.RNN为何能记忆以及它面临的问题

当你在看一部电影的时候,你使用传统的神经网络无法预测在下一时刻,这部电影的内容将是什么?循环神经网络解决了这个问题:因为循环神经网络能够记忆。
这里写图片描述
在上面这个例子中,像A这个的cell有一堆,然后他们连起来,当有一个输入信息 Xt 的时候,会输出 ht ,这个可能是一个人说了”我爱”,然后预测词库里出现每个词的概率,当然出现“你“的概率应该是比较大的。因为有了这个循环的操作,使得循环神经网络有了存储信息,记忆的能力。

上一篇文章中(没有看过的点我)我们用RNN解决了序列型信息的之间的依赖问题,如图:
这里写图片描述我们可以用之前出现的句子,比如根据“我是中国“这几个词预测下一个词是什么。

但有一个非常大的问题是:信息之间存在长期依赖问题。
这里写图片描述比如有这么一段话:我出生在中国,但从小就去美国了,从小就接受美国式的教育,在美国有很多非常好的大学,·········,尽管我上的是美国最好的大学,但我不太会说普通话。你会发现这段信息很长,但真正重要的是第一句。
随着时间间隔的增大,RNN会丧失连接到很远的信息的能力,也就是当你上大四的要考研的时候,你发现你大一学的内容很多都不记得了,那该怎么办呢?

2.LSTM的网络结构

很高兴LSTM解决了这个问题。
LSTM和RNN的网络结构相差无几,区别是LSTM的cell被改造过了。它是被设计来解决长期依赖问题的,它有一种能力:把该记的东西记下来,不该记的东西忘掉。就像你准备考研,或者准备高考的时候一样,重点学那些老师说重点复习,可能会考的内容,而那些大家觉得不怎么重要的内容就直接不复习了。

在标准的RNN结构中,它有很多重复的cell,而且通过一个简单的tanh来激活,如图:
这里写图片描述

与标准RNN不同的是,LSTM的cell是被改造过的,可以发现RNN只有一层网络,但LSTM有四层:
这里写图片描述

我们来一层一层看一下他们具体干了啥事,在此之前,先来定义一下我们的符号,其中Pointwise Operation表示逐点运算。
这里写图片描述

3.LSTM的思想

LSTM的本质是多了一条传送带之类的东西,我比较喜欢称呼它传送带,所以下文都以传送带称呼;还有细胞状态(cell state)指的是一个cell的变化。传送带会跟每个网络交互,可以存储信息,也可以删除信息,在传送带上记录着所有有用的信息,删除没用的信息,
这里写图片描述

它会通过门来选择是否让信息通过,在神经网络中,什么过滤信息的效果最好呀?当然是激活函数呀,这里选用了sigmoid函数。
这里写图片描述
为什么选用sigmoid函数呢?因为sigmoid函数的函数值是0-1的,这就是一个概率嘛,它能衡量到底让信息过去多少。如果是0,就什么也不让它过去,如果是1,就把全部信息放过去。

让我们现在一步一步来了解它每一层都做了什么吧。

4.LSTM的详细网络结构
步骤1:存什么,丢什么(forget gate layer:忘记门)

首先应该考虑的是什么信息该存起来,什么信息不该存起来。起这个决策作用的是forget gate layer,它是一个sigmoid层,如果是1,意味着存下所有的信息,如果是0,意味着丢弃所有的信息。其中 ht1 是截止到上一时刻的记忆, xt 是当前时刻的输入。

比如上一时刻是“我是中国人“,但当前时刻是“我是中国共青团员“,我们就希望把‘人‘忘记,填上‘共青团员‘。也就是在传送带上用新的信息代替旧的信息。
这里写图片描述

步骤2:更新什么信息(输入门)

下一步就是看一下什么样的新信息应该存到传送带。这一步分为两部分,第一部分就是sigmoid层(input gate layer,不知道怎么翻译的好),它决定我们哪部分的信息应该更新。第二部分就是tanh层,它为每个能放到传送带上值(候选值)创建一个向量

### 回答1: 长短期记忆网络(Long Short Term Memory NetworksLSTM)是一种用于处理序列数据的深度学习模型,用于解决传统循环神经网络RNN的梯度消失问题。 Python是一种通用的编程语言,可以使用Python编写LSTM模型。在Python,可以使用多个深度学习框架(如TensorFlow、Keras、PyTorch等)的库来实现LSTM网络。 要实现LSTM模型,首先需要导入相应的深度学习库。然后,通过定义模型的参数、数据预处理、定义LSTM层、编译模型、训练模型和评估模型等步骤来构建LSTM网络。在编写代码时,可以使用Python的强大的科学计算库来处理数据和进行数学计算。 在使用Python实现LSTM时,可以根据具体的需求进行调整和优化模型的结构和参数。可以通过调整LSTM层的单元数、增加隐藏层、引入正则化和优化算法来提高模型性能。此外,还可以使用交叉验证和调参技术来选择最佳的超参数。 Python作为一种简洁易用的编程语言,提供了丰富的工具和库来支持LSTM模型的实现和应用。通过使用Python,我们可以轻松地构建和使用LSTM网络,从而应用于各种序列数据相关的任务,如语音识别、自然语言处理、时间序列预测等。 ### 回答2: 长短期记忆网络(Long Short Term Memory Networks,简称LSTM)是一种特殊的循环神经网络(Recurrent Neural Networks,简称RNN),用于处理和预测序列数据。 在Python,我们可以使用一些开源的深度学习框架,如TensorFlow或PyTorch,来构建和训练LSTM网络。这些框架提供了一系列函数和类,可以轻松地构建、训练和测试LSTM模型。 首先,我们需要导入相应的库和模块。例如,在TensorFlow,我们可以使用`import tensorflow as tf`来导入TensorFlow库。 接下来,我们可以定义LSTM模型的结构。LSTM网络由多个LSTM单元组成,每个单元有一个隐藏状态和一个记忆单元。我们可以使用框架提供的API来定义一个LSTM层,并设置相应的参数,如隐藏单元的数量和输入序列的长度。 然后,我们可以定义模型的其余部分,如输入层、输出层和损失函数。根据具体任务的要求,我们可以选择不同的网络结构和损失函数来满足需求。 接下来,我们可以进行模型的训练。我们需要提供训练数据和标签,并选择适当的优化算法来更新模型的参数。通过迭代训练过程,我们可以逐渐改善模型的性能。 最后,我们可以使用训练好的模型对新的数据进行预测。我们可以加载保存的模型,并使用它来预测新的序列数据。 总之,使用Python可以方便地构建和训练LSTM网络。通过选择适当的开源深度学习框架和实现合适的网络结构,我们可以有效地在序列数据任务应用LSTM网络。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值