| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 从RNN到Attention到Transformer-LSTM介绍 -> 正文阅读 |
|
[人工智能]从RNN到Attention到Transformer-LSTM介绍 |
专栏链接: 本章介绍LSTM及其手动计算过程。 从RNN到Attention到Transformer系列文章RNN系列-RNN介绍、手动计算验证_Mr.小梅的博客-CSDN博客 目录 3.2.4?LSTM变形-加入peepholes?(窥视孔) 3.2 LSTM3.2.1 LSTM介绍????????长短期记忆网络 - 通常简称为“LSTM” - 是一种特殊的RNN,能够学习长期依赖关系。它们由Hochreiter&Schmidhuber(1997)引入,并在随后的工作中被许多人改进和推广。它们在各种各样的问题上都非常出色,现在被广泛使用。 ????????LSTM 是显式设计的,以避免长期依赖关系问题。长时间记住信息实际上是他们的默认行为,而不是他们努力学习的东西! ????????所有递归神经网络都具有神经网络重复模块链的形式。在标准RNN中,这个重复模块将具有非常简单的结构,例如单个tanh层。 ????????LSTM也具有这种链状结构,但重复模块具有不同的结构。不是一个神经网络层,而是有四个,以一种非常特殊的方式进行交互。 ????????在上图中,每条线都携带一个完整的向量,从一个节点的输出到其他节点的输入。粉红色圆圈表示逐点操作,如矢量加法,而黄色框是学习的神经网络层。行合并表示串联,而行分叉表示其内容被复制,副本转到不同的位置。 ????????LSTM 背后的核心思想: ????????LSTM 的关键是单元状态,即贯穿图顶部的水平线。 ????????单元状态有点像传送带。它直接沿着整个链条运行,只有一些小的线性相互作用。信息很容易沿着它原封不动地流动。 ????????LSTM确实能够去除或向细胞状态添加信息,由称为门的结构仔细调节。门是一种选择性地让信息通过的方法。它们由sigmoid神经网络层和逐点乘法运算组成。 ????????Sigmoid层输出0到1之间的数字,描述每个组件应允许通过多少。值为0表示“不让任何内容通过”,而值为 1 表示“让一切通过!” ????????LSTM具有三个这样的门,以保护和控制细胞状态。 3.2.2 分步 LSTM 演练忘记门: ????????LSTM的第一步是决定要从细胞状态中丢弃哪些信息。这个决定是由一个叫做“忘记门”的sigmoid层做出的。把它看成是ht?1和xt断续器,并输出一个介于0和1对于cell状态,1表示“完全保留此”,而0代表“完全摆脱这个”。 ? ? ? ? 拿语言模型示例,该示例试图根据所有以前的单词预测下一个单词。在这样的问题中,单元格状态可能包括当前主语的性别,以便可以使用正确的代词。当我们看到一个新主题时,我们想要忘记旧主题的性别。 输入门: ????????下一步是确定要在cell状态中存储哪些新信息。这分为两部分。首先,称为“输入门”的 sigmoid 层决定了我们将更新哪些值。接下来,tanh 图层创建新候选值的向量~Ct,将其添加到状态中。在下一步中,我们将这两者结合起来,以创建对状态的更新。? ? ? ? ? 例如在语言模型示例中,我们希望将新主题的性别添加到cell状态中,以替换我们忘记的旧主题。 ?更新状态: ????????现在是时候更新旧的cell状态了Ct?1,进入新的cell状态Ct断续器.前面的步骤已经决定了要做什么,我们只需要实际去做。 ????????我们将旧状态乘以ft断续器,忘记了我们之前决定忘记的事情。然后我们添加我it?Ct.这是新的候选值,按我们决定更新每个状态值的程度进行缩放。 ????????在语言模型的情况下,这是我们实际上删除有关旧主题性别的信息并添加新信息的地方,正如我们在前面的步骤中决定的那样。 输出门: ?????????最后,我们需要决定要输出的内容。此输出将基于我们的cell状态,是经过筛选的版本。首先,我们运行一个sigmoid层,它决定了我们要输出的细胞状态的哪些部分。然后,我们将cell状态通过tanh(将值推送到介于?1和1),并将其乘以 sigmoid 栅极的输出,以便我们只输出我们决定输出的部分。 ????????对于语言模型示例,由于它只看到了一个主题,因此它可能希望输出与动词相关的信息,以防万一这是接下来要执行的内容。例如,它可能会输出主语是单数还是复数,如果这是接下来的内容,以便我们知道动词应该以什么形式共轭。 ?汇总: 3.2.3?PyTorch中LSTM的计算CLASS?torch.nn.LSTM(*args,?**kwargs) ?初始化LSTM所需参数: Parameters:
使用LSTM时的输入参数: Inputs: input, h_0
LSTM的输出: Outputs: output, h_n
以上各个字母的解释:
RNN中可训练的参数
所有可训练参数初始化范围(-sqrt(k),sqrt(k)),k=1/(hidden_size)? 3.2.4?LSTM变形-加入peepholes?(窥视孔)????????由Gers& Schmidhuber(2000)引入的一个流行的LSTM变体正在添加“窥视孔连接”。这意味着我们让栅极层查看单元状态。 ????????上图为所有门添加了窥视孔,但许多论文会给出一些窥视孔,而不是其他窥视孔。 ????????另一种变体是使用耦合的忘记和输入门。我们不是单独决定忘记什么以及应该添加新信息,而是一起做出这些决定。我们只会忘记何时要在它的位置上输入一些东西。只有当我们忘记了旧的东西时,我们才会向状态输入新的值。 3.2.5?LSTM变形-忘记门和输入门使用耦合的LSTM????????另一种变体是使用耦合的忘记和输入门。我们不是单独决定忘记什么以及应该添加新信息,而是一起做出这些决定。我们只会忘记何时要在它的位置上输入一些东西。只有当我们忘记了旧的东西时,我们才会向状态输入新的值。 3.2.6?LSTM变形-GRU? ? ? ? LSTM的一个稍微戏剧性的变化是由Cho等人(2014)引入的Gated Recurrent Unit或GRU。它将忘记和输入门组合成一个“更新门”。它还合并单元格状态和隐藏状态,并进行一些其他更改。由此产生的模型比标准LSTM模型更简单,并且越来越受欢迎。 ????????LSTM 是我们使用 RNN 所能实现的一大步。人们很自然地想知道:还有一大步吗?研究人员的普遍看法是:“是的!还有下一步,那就是Attention!这个想法是让RNN的每个步骤从一些更大的信息集合中选择要查看的信息。例如,如果使用 RNN 创建描述图像的标题,则它可能会为输出的每个单词选取图像的一部分进行查看 ????????在介绍Attention之前,先了解下Decode-Encode原来。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 4:50:45- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |