惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

F
Fortinet All Blogs
MyScale Blog
MyScale Blog
Microsoft Security Blog
Microsoft Security Blog
量子位
B
Blog
aimingoo的专栏
aimingoo的专栏
Apple Machine Learning Research
Apple Machine Learning Research
阮一峰的网络日志
阮一峰的网络日志
The GitHub Blog
The GitHub Blog
T
The Exploit Database - CXSecurity.com
N
News | PayPal Newsroom
Cloudbric
Cloudbric
A
About on SuperTechFans
AI
AI
Hacker News: Ask HN
Hacker News: Ask HN
S
Schneier on Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 最新话题
T
The Blog of Author Tim Ferriss
Simon Willison's Weblog
Simon Willison's Weblog
有赞技术团队
有赞技术团队
H
Heimdal Security Blog
J
Java Code Geeks
大猫的无限游戏
大猫的无限游戏
D
Docker
Security Archives - TechRepublic
Security Archives - TechRepublic
N
News and Events Feed by Topic
IT之家
IT之家
Know Your Adversary
Know Your Adversary
N
Netflix TechBlog - Medium
T
Tailwind CSS Blog
B
Blog RSS Feed
C
Cybersecurity and Infrastructure Security Agency CISA
C
Cisco Blogs
博客园 - 叶小钗
美团技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hackread – Cybersecurity News, Data Breaches, AI and More
L
LangChain Blog
The Hacker News
The Hacker News
Y
Y Combinator Blog
I
Intezer
The Register - Security
The Register - Security
F
Full Disclosure
V
V2EX
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Last Week in AI
Last Week in AI
Martin Fowler
Martin Fowler

博客园 - xiaoxi666

深度学习优化器生态演化图谱 神经网络常见的40多种激活函数(应用场景+数学公式+代码实现+函数图象) 程序员究竟要不要写文章 使用Lean4进行形式化建模(以Java线程池为例) 用好 JUnit 5 的高级特性:提升单测效率和质量 好端端的线程池,怎么就卡死了? DeepSeek又在节前放大招! Dubbo实战:四步实现注册中心平滑迁移 LLM中的Top-K/Top-p/温度都是怎么发挥作用的? RLHF各种训练算法科普 近期最值得关注的AI技术报告与Agent综述! 你的Docker部署能更简单吗?GitLab集成与多进程管理又怎么做? 什么是南北向流量和东西向流量? 如何实现LLM的通用function-calling能力? 推荐一枚宝藏Up主,顺便聊聊感想 Embedding 模型部署及效果评测 立即执行函数在前端国际化方案中的应用 推荐一款id生成器: Hashids 推荐一款工具,辅助估算线程池参数
通俗理解自注意力机制和多头注意力机制
xiaoxi666 · 2024-12-09 · via 博客园 - xiaoxi666

前言

提到注意力机制,你一定会想起Transformer的经典架构图:

(图源:https://www.datacamp.com/tutorial/how-transformers-work,这篇文章讲得不错)

初看起来可能一头雾水:向量映射是啥?编码器和解码器是干啥的?前馈机制是啥?为啥要归一化?注意力机制是啥?多头注意力机制又是啥?

针对以上疑问,网上已经有非常多经典的文章,从实现层面进行了阐述,比如:

  1. 自注意力机制:https://blog.csdn.net/qq_38890412/article/details/120601834

  2. 自注意力机制:https://blog.csdn.net/weixin_42110638/article/details/134016569

  3. 向量映射:https://guangzhengli.com/blog/zh/vector-database

本文则采用生活中的例子,尝试阐述“自注意力机制”和“多头注意力机制”的概念,希望能增进理解。

什么是自注意力机制?

想象一下,你正在读一本书,而你的大脑需要理解每一页上的内容。自注意力机制就像是你的大脑在阅读时,不仅关注当前读到的这一行,还会时不时地回顾之前读过的内容,以便更好地理解当前的内容。比如,当你读到一个角色的名字时,你的大脑会自动回想起这个角色之前做过的事情,这样你就能更好地理解这个角色在故事中的作用。现在,如果我们把这本书的每一页比作一个序列中的一个元素,那么自注意力机制就是一种让模型(比如人工智能)能够像人脑一样,在处理当前元素时,还能考虑到序列中其他元素的影响。具体来说,自注意力机制会让模型为序列中的每个元素(比如每个单词)计算一个“权重”,这个权重表示当前元素与其他所有元素(单词)之间的关联程度。这样,模型就可以根据这些权重来决定在生成输出时,应该更多地关注哪些元素。简而言之,自注意力机制就是一种让模型能够“记住”并“理解”序列中每个元素与其他元素之间关系的技巧,就像你在阅读时能够理解和回忆起不同部分之间的联系一样。

是不是有点像自我回顾?

什么是多头注意力机制?

还是以看书为例,想象你正在阅读一本历史书籍,这本书包含了大量的信息,比如人物、时间、地点,以及所发生的事件。你的大脑在阅读时,就像是配备了多个“注意力头”,每个“头”都在关注不同的信息类型。

  1. 人物头:这个“头”专注于书中出现的人物,比如他们的名字、角色和行为。当你读到一个人物的名字时,这个“头”会帮你回忆起这个人物之前做过什么,他们的性格特点,以及他们在历史事件中的作用。

  2. 时间头:这个“头”关注时间线,帮你追踪不同事件和人物的年代顺序。当你读到一个日期时,这个“头”会帮你把这个日期放在整个历史脉络中,理解它在整个时间线上的位置。

  3. 地点头:这个“头”帮助你记住书中提到的地点,比如城市、国家或者战场。当你读到一个地点时,这个“头”会帮你构建起这个地点的地理和文化背景,以及它在历史事件中的重要性。

  4. 事件头:这个“头”关注书中描述的事件,比如战争、政治变革或者社会运动。当你读到一个新的事件时,这个“头”会帮你理解这个事件的起因、过程和结果,以及它对历史进程的影响。

当你阅读时,这些“头”都在同时工作,帮助你从不同的角度理解和记忆书中的信息。这就是多头注意力的工作原理:它允许你的大脑(或者模型)同时关注多个不同的信息维度,以便更全面地理解和处理复杂的信息。例如,当你读到一个章节,描述了一个重要战役的胜利,你的“事件头”会帮你理解这场战役的战略意义,你的“人物头”会帮你回忆起指挥这场战役的将领,你的“地点头”会帮你想象战场的地理环境,而你的“时间头”会帮你把这个战役放在整个历史时间线上,理解它在整个历史进程中的位置。通过这种方式,多头注意力帮助你(或者模型)更全面、更深入地理解和处理复杂的信息,就像你的大脑在阅读时能够同时关注人物、事件、地点和时间等多个维度一样。

在大模型的实现过程中,多头可以并行执行,以提升效率。

扩展:还有哪些注意力机制?

作为深度学习中用于提高模型性能的关键技术,注意力机制种类繁多,每种机制都有其独特的应用场景和计算方式。除了自注意力机制外,还有:

  • Soft Attention:通过计算query与所有key之间的相似度,得到一系列权重,这些权重用于加权求和所有value,从而突出重要部分。Soft Attention输出的是注意力分布的概率值,因此可以嵌入到网络中进行梯度下降训练。
  • Hard Attention:精确选择一个或几个key作为关注点,其余部分则被忽略,实现高分辨率的注意力聚焦。Hard Attention输出的是one-hot向量,通常依赖于强化学习来训练,因此无法嵌入到网络中进行梯度下降。
  • Local Attention:介于Soft和Hard之间,对局部范围内的key进行Soft Attention,从而在全局与局部关注之间取得平衡。Local Attention适用于需要局部关注的场景。
  • Hierarchical Attention:采用分层思想,在所有状态上利用注意力机制,适用于需要多层次关注的复杂任务。
  • Dynamic-Convolution Attention:动态卷积注意力机制通过动态地调整卷积核来捕捉输入特征的不同部分,适用于图像处理等任务。
  • Entity-Aware Attention:实体感知注意力机制专注于识别和关注特定的实体,常用于自然语言处理中的关系抽取和命名实体识别任务。
  • Location-Based Attention:基于位置的注意力机制关注输入数据中的特定位置或区域,适用于图像标注和视频分析等任务。
  • Additive Attention:加性注意力机制通过计算query和key之间的点积来衡量相似度,然后通过加权求和得到最终输出。这种机制在早期的注意力模型中较为常见。
  • Scaled Dot-Product Attention:这是Transformer模型中核心的注意力机制之一,通过计算query和key之间的点积相似度,并通过softmax函数转换为概率分布,然后用这个概率分布加权value向量,从而聚焦在最重要(相似度最高)的信息上。该机制通过缩放点积来避免梯度消失问题,并且能够有效地捕捉查询向量与键向量之间的相似性。

每种注意力机制都有其独特的优势和适用场景,选择合适的注意力机制可以显著提升模型的性能和泛化能力。