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

自注意力机制解析

自注意力机制(Self-Attention Mechanism)是现代深度学习模型,尤其是Transformer架构(如BERT、GPT系列等)的核心组件。它允许模型在处理序列数据(如文本、语音、时间序列)时,动态地关注输入序列中不同位置的信息,从而计算出更有效的表示。

简单来说,自注意力机制让序列中的每一个元素​(例如句子中的一个单词)都能“看到”序列中的所有其他元素,并根据它们之间的相关性重要性,来决定在计算当前元素的表示时,应该赋予其他元素多少权重

自注意力机制的工作原理(简化版)

想象一个句子:“The animal didn't cross the street because it was too tired.”

我们想知道句子中“it”这个词指的是什么?是“animal”还是“street”?人类很容易理解“it”指的是“animal”,因为“tired”更可能描述动物而不是街道。自注意力机制就是让模型学习这种关联。

  1. 1.输入表示:​
    • 首先,输入序列(如句子)中的每个元素(如单词)被转换成向量表示(通常是词嵌入向量)。假设我们有输入向量序列:X = [x1, x2, ..., xn],其中xi代表第i个元素的向量。
  2. 2.生成Query, Key, Value:​
    • 对于序列中的每一个输入向量xi,我们使用三个不同的可学习权重矩阵(W_q, W_k, W_v)将其分别投影(线性变换)成三个新的向量:
      • Query向量(qi):​​ 代表当前元素(“我”)在“寻找”什么信息。
      • Key向量(ki):​​ 代表当前元素(“我”)能提供什么信息,或者“我”是什么。
      • Value向量(vi):​​ 代表当前元素(“我”)所包含的实际信息内容。
    • 所以,对于每个位置iqi = W_q * xi, ki = W_k * xi, vi = W_v * xi
  3. 3.​计算注意力分数:​
    • 为了计算位置i的输出,我们需要知道序列中所有位置​(包括i自己)相对于i的重要性。
    • 通过计算位置i的Query向量qi与序列中所有位置j(从1到n)的Key向量kj的点积(dot product)来实现:score(i, j) = qi · kj
    • 点积越大,表示qikj的相似度越高,意味着位置j的信息对于计算位置i的输出越重要。
    • 在我们的例子中,当计算“it”的表示时,它与“animal”的Key的点积应该很高(因为“it”指代“animal”),而与“street”的Key的点积应该较低。
  4. 4.​缩放与归一化(Softmax):​
    • 点积的结果可能会非常大(尤其在高维向量情况下),导致Softmax函数的梯度非常小。因此,通常会将点积除以一个缩放因子(通常是Key向量维度的平方根√dk):score(i, j) = (qi · kj) / √dk
    • 然后,对位置i的所有score(i, j)(j从1到n)应用Softmax函数,将其转换为一个概率分布(和为1):α(i, j) = softmax(score(i, j))
    • 这个α(i, j)就是位置j对位置i注意力权重。它表示在计算位置i的输出时,应该关注位置j的程度。
  5. 5.​计算加权和输出:​
    • 位置i的输出向量zi,是所有位置j的Value向量vj的加权和,权重就是上一步计算出的注意力权重α(i, j)zi = Σ α(i, j) * vj(对所有j求和)。
    • 这个输出向量zi,就是融合了序列中所有位置相关信息(根据它们与位置i的相关性加权)后,得到的新的、更丰富的表示。
    • 对于“it”,其输出向量z_it将是所有词向量的加权和,其中“animal”和“tired”的权重会非常高,而“street”的权重会很低,从而让模型知道“it”指的是“animal”。

自注意力机制的关键特点

  1. 1.​全局上下文感知:​​ 每个位置的输出都直接依赖于序列中所有其他位置的信息,能够捕捉长距离依赖关系(解决了RNN的长期依赖问题)。
  2. 2.​并行计算:​​ 序列中所有位置的Query、Key、Value向量可以同时计算,所有位置的输出也可以同时计算(矩阵运算),计算效率远高于RNN的顺序处理。
  3. 3.​动态权重:​​ 注意力权重α(i, j)不是固定的,而是根据输入序列动态计算的。模型能够根据当前输入的不同,灵活地关注不同的部分。
  4. 4.​置换不变性(位置编码解决):​​ 自注意力本身不考虑位置信息(词袋模型性质)。为了解决这个问题,Transformer引入了位置编码​(Positional Encoding),将位置信息显式地注入到输入向量中。

多头注意力(Multi-Head Attention)

为了增强模型的能力,Transformer使用了多头注意力机制:

  1. 1.将Query、Key、Value向量拆分h个头(例如,8个头)。
  2. 2.在每个头上独立地执行一次完整的自注意力计算(步骤2-5)。
  3. 3.将h个头计算出的输出向量拼接起来。
  4. 4.通过一个线性变换层将拼接后的向量映射回期望的输出维度。

好处:​

  • 允许模型在不同的表示子空间(由不同的权重矩阵W_q, W_k, W_v定义)中学习不同的关系。
  • 例如,一个头可能关注局部语法依赖(主谓一致),另一个头可能关注长距离指代关系(如“it”指代谁)。
  • 提高了模型的表示能力和学习能力。

总结

自注意力机制是一种强大的序列建模工具,它通过让序列中的每个元素动态地关注序列中所有其他元素,并根据相关性加权聚合它们的信息,从而生成包含丰富上下文信息的表示。它是Transformer架构成功的基石,并在自然语言处理、计算机视觉、语音识别等领域取得了革命性的进展。


文章转载自:

http://vDODEAuP.zxcny.cn
http://BRROoJVY.zxcny.cn
http://dx3fZY5i.zxcny.cn
http://YIsyhKYm.zxcny.cn
http://WGBhFwln.zxcny.cn
http://hC7CeIoS.zxcny.cn
http://RTRunDhm.zxcny.cn
http://R2YSaBCO.zxcny.cn
http://egB8Zxle.zxcny.cn
http://6xSXl5OP.zxcny.cn
http://rGUcDWkd.zxcny.cn
http://Zw1KtAtj.zxcny.cn
http://qArif1Rk.zxcny.cn
http://frfI1dvr.zxcny.cn
http://UBYf69Fi.zxcny.cn
http://CE0yKa3N.zxcny.cn
http://0fYGtOqf.zxcny.cn
http://TAPkXKa4.zxcny.cn
http://V7EZnUay.zxcny.cn
http://M0aqvUlq.zxcny.cn
http://GIPjwXs9.zxcny.cn
http://f3t63KtA.zxcny.cn
http://m6GnDHlz.zxcny.cn
http://VICDAvW5.zxcny.cn
http://jkaBGevX.zxcny.cn
http://pcxOyxm0.zxcny.cn
http://zXugHru1.zxcny.cn
http://VYrjuX3w.zxcny.cn
http://HNmqoWq7.zxcny.cn
http://TNcggM0c.zxcny.cn
http://www.dtcms.com/a/371115.html

相关文章:

  • 数据结构——队列(Java)
  • Dify 从入门到精通(第 79/100 篇):Dify 的多模态模型评估(高级篇)
  • 具身导航“所想即所见”!VISTA:基于生成式视觉想象的视觉语言导航
  • synchronized 锁升级
  • 深入解析 Java 的类加载机制
  • GEE:时间序列合成一个不填补空洞,保留时间序列空像素的新影像
  • Zoom AI 技术架构研究:联合式方法与多模态集成
  • Arch Linux运维自动更新脚本推荐
  • 深度拆解OpenHarmony NFC服务:从开关到卡模拟掌握近场通信技术
  • 第5章递归:分治法
  • 【Python字符串格式化】:全面指南与最佳实践
  • MySQL学习记录-索引
  • C++进阶——继承(2)
  • Oracle体系结构-Redo Log Buffer详解
  • 【医学影像 AI】YoloCurvSeg:仅需标注一个带噪骨架即可实现血管状曲线结构分割
  • Nginx安装及版本迭代热部署详解
  • [光学原理与应用-422]:非线性光学 - 计算机中的线性与非线性运算
  • 图片木马制作的三种方法
  • QT之实现点击按钮启动另一个桌面应用程序
  • 贪心算法在医疗影像分割中的应用详解
  • 责任分配矩阵(RAM)
  • Science Advances副主编:如何提高论文投稿接收率?
  • 【目录-单选】鸿蒙HarmonyOS开发者基础
  • C++语法之--多态
  • Spring Cloud Alibaba快速入门02-Nacos
  • 一阶低通滤波:从原理到实践,平滑数据的艺术
  • 2025最新超详细FreeRTOS入门教程:第一章 FreeRTOS移植到STM32
  • 用Python打造逼真的照片桌面:从拖拽到交互的完整实现
  • 【selenium】网页元素找不到?从$(‘[placeholder=“手机号“]‘)说起
  • 深入解析达梦数据库核心技术:检查点、redo、undo、MVCC与内存缓存刷盘