首页 > 其他分享 >注意力机制

注意力机制

时间:2024-06-16 20:28:23浏览次数:13  
标签:编码 编码器 解码器 向量 相似 机制 注意力 输入

遇到看不明白的地方,欢迎在评论中留言呐,一起讨论,一起进步!
在这里插入图片描述
需掌握的前提知识: Seq2seq、编码器&解码器神经网络
本文参考:【官方双语】一个视频理解神经网络注意力机制,详细阐释!

在基本的编码器-解码器中,展开的 LSTM 会将整个输入句子压缩成单个上下文向量,这对于短句子是可行的,但是对于有数千个词的大量输入,前面的输入信息会被稀释。

比如当输入一个长句子 Don't take the cookies I just bought from the table,一开始的单词 Don't 可能被遗忘,这样一来句子就变成了 take the cookies I just bought from the table,这和原来的句子意思完全相反!

因此,有时候记住前面的信息是非常重要的。那么怎么来解决这个问题呢?


让我们先来回想一下基本的循环神经网络,这个模型在处理长期记忆时会有问题,即前面的信息很难被记住,因此它们时通过单一路径来运行长期记忆和短期记忆的。而 LSTM 通过提供分离的路径来解决长期记忆的问题。

但即使有了分离的路径,如果我们有大量的数据,两条路径必须携带大量的信息,这意味着句子开头的单词也可能丢失。而注意力机制的主要思想是添加一堆新路径
在这里插入图片描述
注意力机制通过在编码器每个输入模块上引出一条路径到解码器,从而使解码器的每一步都可以直接访问到每个输入模块上的输入值。


假设我们要将 Let's go 翻译为法语。
现在我们初始化编码器中 LSTM 的长期记忆和短期记忆(即单元状态和隐藏状态)为 0。

在这里插入图片描述
此时,所有输入都被压缩进了这组上下文向量中。我们再用这组上下文向量来初始化解码器中的一组单独的 LSTM 单元。

在这里插入图片描述
我们将 EOS 输入到嵌入层。接着我们加入注意力机制。


第一步:计算相似分数,计算解码器 LSTMs 的输出向量(短期记忆或隐藏状态)与编码器 LSTMs 中每一步的输出向量的相似分数
在这里插入图片描述
其中一个计算相似分数的方法是余弦相似性(Cosine Similarity)

在这里插入图片描述
即两向量内积后再除以两向量的模长,函数值处于 [ − 1 , 1 ] [-1,1] [−1,1] 之间。

相似度越大,意味着两者更为相似。大的负值意味着两者的相反意义强。

如下图所示,令 A A A 表示编码器某一步的输出向量, B B B 表示解码器某一步的输出向量
在这里插入图片描述
则 A A A 和 B B B 的余弦相似度为:
在这里插入图片描述
不过注意力机制中计算相似性更常见的做法是只计算余弦相似度的分子部分,即只进行点积运算,这样可以节省一些额外的计算量。

将所有相似度计算出来后,我们得到:
在这里插入图片描述


第二步:使用相似度分配成分,从上图我们可以看到,go<EOS>的相似度为 0.01 0.01 0.01,比 let's<EOS>的相似度 − 0.41 -0.41 −0.41 高,因此我们希望 go 的编码对解码器输出的第一个单词有更大影响。

为此,我们将这些分数通过 SoftMax 函数进行运算,运算结果表示单词被编码后使用的百分比。在下图这种情况下,我们使用 40 % 40\% 40% let's 被编码后的信息和 60 % 60\% 60% go 被编码后的信息来确定第一个翻译出的词。
在这里插入图片描述
因此,我们将 let's 被编码后的向量乘 0.4 0.4 0.4,将 go 被编码后的向量乘 0.6 0.6 0.6,再将这两者相加,得到 <EOS> 的注意力值。
在这里插入图片描述


第三步:预测,使用注意力输出和解码器的隐藏状态进行拼接,再通过 SoftMax 函数进行运算来进行选择
在这里插入图片描述


现在由于输出是 vamos,而不是 <EOS>,我们需要将 vamos 输入到解码器下一步的嵌入层中,然后重复上面的计算过程,之后解码器的第二个输出是 <EOS>,到此我们完成了解码过程。


总结一下,当我们将注意力机制添加到基本的编码器-解码器模型时,编码器工作基本保持不变,但在解码器的每一步都可以访问每个输入单词的单独编码,我们利用相似度分数和 SoftMax 函数来确定每个编码后的输入单词应该以多大百分比用于预测下一个输出单词。

在这里插入图片描述

标签:编码,编码器,解码器,向量,相似,机制,注意力,输入
From: https://blog.csdn.net/si_ying/article/details/139712336

相关文章

  • 【iOS】自定义cell及其复用机制
    文章目录cell的复用注册非注册两者的区别自定义cellcell的复用当用户滚动UITableView或UICollectionView时,只有少量可见的cell会被实际创建和显示。对于那些暂时不可见的cell,系统会将它们缓存起来以备将来复用。这就是所谓的cell复用机制。为什么需要......
  • MyBatis 的缓存机制
    1.MyBatis的缓存机制@目录1.MyBatis的缓存机制2.准备工作3.MyBatis的一级缓存3.1一级缓存失效情况/条件4.MyBatis的二级缓存5.MyBatis集成EhCache第三方缓存6.总结:7.最后:缓存(Cache)缓存的作用:通过减少IO的方式,来提高程序的执行效率。MyBatis的缓存:将Sele......
  • springboot事务管理的机制是什么
    SpringBoot的事务管理机制实质上是基于Spring框架的事务处理机制。其主要目的是确保一系列数据库操作要么全部成功,要么全部失败(回滚),从而维护数据的完整性和一致性。SpringBoot事务管理遵循ACID四大特性:1、原子性(Atomicity)事务是一个原子操作单元,其对数据的修改要么全都执......
  • gbase8s数据库阻塞检查点和非阻塞检查点的执行机制
    1.检查点的描述为了便于数据库系统的复原和逻辑恢复,数据库服务器生成的一致性标志点,称为检查点,其是建立在数据库系统的已知和一致状态时日志中的某个时间点检查点的目的在于定期将逻辑日志中的重新启动点向前移动如果存在检查点,数据库只需要完成检查点之后的逻辑日志的恢复......
  • JIPB | 中国农科院&华南农大王海洋等综述玉米响应密植的遗传调控分子机制
    现代玉米育种中,提高品种耐密性和种植密度是提高玉米单产的关键措施。玉米密植后群体通风、透光性降低,会引起避荫反应,造成株高和穗位高增加、抗生物和非生物胁迫能力降低、植株抗倒性降低,并最终导致产量损失。因此,培育耐密理想株型玉米是提高玉米耐密性的重要途径。2023年12月22日......
  • JavaScript 的原型链机制
    JavaScript的原型链机制是其继承模型的核心概念,它允许对象通过原型链访问和继承其他对象的属性和方法。原型链机制是实现JavaScript面向对象编程的基础。1.原型和原型链的基本概念原型对象(prototype):每个JavaScript对象(除了null)都有一个与之关联的对象,这个对象就......
  • 基于事件触发机制的孤岛微电网二次电压与频率协同控制仿真模型(Simulink仿真实现)
    ......
  • fegin的retry机制
    服务间调用如果因为网络原因访问失败了,也可以考虑使用fegin的重发功能来重新访问服务。配置了ribbon或者loadBalance后,重发会根据负载均衡规则寻找新服务。举例:feignServer客户端访问userModel服务(两个节点userModel1,userModel2)如果使用轮询策略(负载均衡)且就爱社userModel1网......
  • 【SPARK-CORE】shuffle机制
    本文主要介绍spark的shuffle机制 shuffle的产生Spark作业被分解为多个Stage,每个Stage包含多个任务(Task)。在需要重新分区的数据操作时因为需要进行数据的交换因此会产生Shuffle边界,即两个Stage之间需要进行Shuffle操作。 shuffle的各个阶段1、shufflemap阶段......
  • SCI一区 | Matlab实现NGO-TCN-BiGRU-Attention北方苍鹰算法优化时间卷积双向门控循环
    要在Matlab中实现NGO-TCN-BiGRU-Attention北方苍鹰算法进行多变量时间序列预测,需要按照以下步骤进行:准备数据:首先,准备多变量时间序列数据。确保数据已经进行了预处理,例如归一化或标准化,以便神经网络能够更好地进行学习和预测。构建NGO-TCN-BiGRU-Attention模型:根据算法的......