当前位置: 首页 > news >正文

4. 注意力机制介绍_2

1. 注意力机制规则

它需要三个指定的输入Q(query), K(key), V(value),然后通过计算公式得到注意力的结果,这个结果代表 query在 key和 value作用下的注意力表示;当输入的 Q=K=V时,称作自注意力计算规则;当 Q、K、V不相等时称为一般注意力计算规则


1.1 常见的注意力计算规则

(常见的注意力计算规则(计算公式):有三种,最常用的第三种,第一种用得少,第二种基本不用;)
1️⃣ 将Q,K进行纵轴拼接,做一次线性变化,再使用 softmax处理获得结果最后与 V做张量乘法;(即假设Q、k的纵轴都是4维则拼接后的纵轴是8维;然后经过Linear目的是进行形状变换;再经过Softmax得到一个注意力权重在乘以V得到注意力;)

2️⃣ 将Q,K进行纵轴拼接,做一次线性变化后再使用tanh函数激活,然后再进行内部求和,最后使用softmax处理获得结果再与V做张量乘法;(现将QK拼接,在经过linear线性变化,然后使用tanh激活函数,在进行sum内部求和,然后进行softmax,最后乘以V。此种方式基本不用

3️⃣ 将Q与K的转置做点积运算,然后除以一个缩放系数,再使用softmax处理获得结果最后与V做张量乘法;(Q与K的转置即K相乘,除以缩放系数(根号dk),dk即为词嵌入维度(词嵌入几维则dk几维),(括号内)原因是:① 使其结果符合标准正太分布,均值为0方差为1;② 除以根号dk目的是防止梯度消失;在经过softmax得到注意力权重,最后乘以V得到Attention;最常用)

1.2 Seq2Seq架构加入Attention

在上述机器翻译架构中加入Attention的方式有两种:

1.2.1 第一种tensorflow版本(传统方式):


上图翻译应用中的Q、K、V解释:
查询张量Q:解码器上一时间步的隐藏层输出结果
键张量K:编码部分每个时间步的结果组合而成;
值张量V:编码部分每个时间步的结果组合而成。
(有三部分:Query、Key、Value,若想在Seq2Seq架构(或者说Encoder-Decoder架构)中加入Attention,要分别找到QKV,图中由下往上:最下部分是编码器、中间叫注意力也叫中间语义张量C(每一个时间步的C都不一样)、最上面是解码器。
详细步骤:“欢迎”“来”“北京”三个单词都要送入GRU模型,然后得到三个隐藏层张量(假设都为图中的1行3列 3黑点),此时编码器任务结束;假如目的是拿三个中文单词预测 ‘to’这个单词, Q是Decoder部分的红线箭头指向部分,预测”to”时拿到上一时间步的隐藏层张量‘welcome’(右向箭头),中间绿色部分表示将红色部分的Q复制3次,当第一个时间步“欢迎”的词向量(黑色三点)过来后,认为是Key;复制的Q和Key作用得到3个分数,再分别进行Softmax归一化,得到对应的权重,权重分别再和对应的 V相乘,再求和得到一个中间语义张量C(中间上面的三黑点);
Q是来自解码器的上一层的隐藏层输出结果,拿到Q‘welcome’的词向量 与 中间语义张量C进行拼接,经过linear层,再和上一时间步隐藏层的输出结果融合,共同预测“to”;在预测“北京”时要拿着前一个Q“to”和K运算得到中间语义张量C;预测“welcome”拿的Q是“GO”(一个初始化的张量h0);每次预测时,中间语义张量C都改变了。只要是做文本生成式任务,分别给他一个开始、结束的说明;)


1.2.2 第二种Pytorch版本(改进版):


上图翻译应用中的Q、K、V解释
查询张量Q:解码器每一步的输出(预测结果)或者是当前输入的x;
键张量K:解码器上一步的隐藏层输出;
值张量V:编码部分每个时间步输出结果组合而成;
(由下往上,“欢迎”“来”“北京”3个词经过编码器得到3个隐藏层张量输出结果(下部分三黑点);但是一开始送到解码器中的GRU翻译’welcome‘时会有一个上一时间步隐藏层输出结果:对于第一种传统方式在预测第一个值“welcome”时传入的是一个初始化的值GO(h0),但这里第二种方式把编码器最后一个单词“北京”这个词的隐藏层张量的输出结果(它包含了整个编码器的语义)直接送给解码器中的第一个时间步翻译出第一个单词“welcome”,同时有一个当前时间步的隐藏层输出结果就是 k-Key(图中红点)、q-Query即为翻译出来的‘welcome’的词向量,都是1行3列拼接得到 —》1行6列,经过linear可以改变形状再次变成 1行3列(中间score)得到权重值再将权重值与原来的V(每个时间步的隐藏层输出结果组合而成,中间的 3*3部分)相乘,得到中间语义张量C 即为注意力
再将得到的中间语义张量C与 ‘welcome’拼接(向上箭头),经过linear,再与上一时间步隐藏层输出结果q,共同作用,预测出单词‘to’;q是上一时间步预测出的真实的结果 ‘Welcome’(向上output的)、k是上一时间步的隐藏层输出结果,两者进行向量的拼接通过linear,再经过softmax得到权重分数(中间);权重分数再分别乘以对应的V(每个编码器中每个单词的隐藏层输出结果)得到中间语义张量C,再和‘welcome’拼接,linear后得到当前时间步的真实输入,加上上一时间步的隐藏层输出结果共同作用,预测出单词‘to’;
这是第二种计算注意力的方式;)
(为什么k、q两者作用的这种方式有效?:因为上一时间步的隐藏层输出结果k包含了编码器中所有单词的信息;
预测第一个单词‘welcome’时如何得知那个单词的权重最大呢?:此时 q指的是GO(第一个灰色块),k是编码器过来的k,两者作用;)

第一种传统方式是点乘运算,第二种是拼接运算;


2. 什么是深度神经网络注意力机制


3. 注意力机制的作用


4. 注意力机制实现步骤


4.1 步骤


4.2 代码实现


5. 小结

http://www.jsqmd.com/news/938407/

相关文章:

  • 电子入门实践:从欧姆定律到并联电路,手把手搭建LED烽火台
  • Doherty功放设计进阶:从对称到非对称,再到多峰值的ADS仿真全攻略
  • Agent Harness Engineering综述:一篇读懂 AI Agent 真正的工程瓶颈
  • 保姆级避坑指南:在Win11上搞定OMNeT++ 5.4.1、SUMO 0.30.0和Veins 4.7.1车联网仿真环境
  • 告别‘搜索不到’:用Cheat Engine教程1-6关,彻底搞懂‘未知初始值’、‘浮点数’和‘指针’的扫描技巧
  • 别再死记硬背公式了!用5分钟搞懂电感‘伏秒平衡’,开关电源设计不再懵
  • 金橙子二次开发避坑指南:MarkEzd.dll调用时常见的5个错误及解决方法(EzCad2/LMC1)
  • 2026年重庆除甲醛,选对价格实惠的靠谱公司 - GrowthUME
  • 双非硕士75天逆袭!拿下字节大模型Agent暑期实习,我的转行全公开!
  • PL-2303驱动终极修复指南:3步解决Windows 10代码10错误
  • 终极抖音下载指南:3分钟搞定无水印视频批量下载
  • # 20251901 2024-2025-2 《网络攻防实践》实验十
  • DIY MIDI转CV接口:基于Arduino与MCP4728的模块合成器核心
  • 别再复制粘贴了!手把手教你用Nacos 2.x和Sentinel搭建RuoYi-Cloud微服务后台(含常见启动报错解决)
  • ncmppGui:3步解锁网易云音乐,让加密NCM文件重获自由
  • 打破平台壁垒:Linux原生微信小程序开发环境实战指南
  • 2026重庆除甲醛公司真实排名,选对不踩坑 - GrowthUME
  • SQL学习日志_Day2_深入SQL语法与数据库层级结构
  • BilibiliDown:三招解决B站视频管理难题,你的专属离线视频库
  • 图像转换新思路:BBDM如何用‘布朗桥’在潜在空间里‘搭桥’,比DDPM更直接?
  • 智能家居 Zigbee 与 WiFi 协议对比:穿墙性能深度测评
  • 从语音识别到机器人控制:PicoTalk模块在远程呈现机器人中的应用
  • 思科GRE隧道通了但业务不通?从抓包分析到故障排查的完整指南
  • 别再只问哪个 AI 模型更强了,2026 年真正拉开差距的是向量引擎
  • 创业合伙人选择框架:从自我剖析到股权设计的系统方法论
  • 告别Xcode!用Homebrew在macOS上安装最新版GCC的保姆级教程(含环境变量配置)
  • Keras设计哲学:从用户心智模型到深度学习框架的抽象艺术
  • 保姆级图解:MAP-E、DS-Lite、IPIP三种IPv4 over IPv6隧道到底有啥区别?
  • 告别QuickPlot!用Matlab+Surfer给Delft3D FM模型网格图“美颜”的完整流程
  • 别再为国产雷达发愁了!手把手教你将禾赛/速腾点云适配到LIO-SAM和FAST-LIO2(附完整代码)