第1.3讲、什么是 Attention?——从点菜说起 🍽️
假设你在一家餐厅点餐,菜单上有好多菜(句子中的每个单词),你现在要点菜(做决策),但不可能每道菜都吃一样多。
你会怎么做?你会:
- 看下菜单(获取所有信息)
- 根据自己的口味打分(我喜欢辣、不要太咸)
- 按照喜好分配注意力(辣子鸡80%,炒青菜20%)
- 最后把你"注意到的内容"组合起来形成最终决策
这就是 Attention 在做的事。
Attention 就是"我应该关注哪里?"
在一句话里,比如:
"The animal didn't cross the street because it was too tired."
"it" 到底指的是"animal"还是"street"?注意力机制帮你计算哪个词更重要,最后得出结论:"it" 是"animal"。
用简单公式解释 Attention(别怕,没那么难)
你可以把 Attention 看成:
"一个问问题的人(Query)"
"一堆备选答案(Keys)"
"每个答案背后的内容(Values)"
Attention 的过程就是:
- 比较每个答案和问题的匹配程度(Q 和 K 做内积)
- 匹配得分归一化(Softmax)
- 用这些得分去"加权平均"所有内容(Values)
最后你就得到"我在这个问题下,应该关注的信息是什么"。
Multi-Head Attention 是什么?
你可以把 Multi-Head Attention 想象成一个团队讨论:
不同的人(多个头)从不同角度观察问题,有人看语法,有人看情感,有人看实体含义。
他们各自用自己的视角做 Attention,然后:
- 把他们的结果拼接起来
- 汇总成一个更全面的输出
这样模型就更强了,因为它不是单一角度看问题,而是"群策群力"。
一句话总结完整 Attention 流程(适合背)
输入经过 Q、K、V 三个变换 → 点积打分 + Softmax → 加权 V → 多个头并行 → 拼接 → 再线性变换 → 完成!
小结(像讲段子一样记住 Attention):
比喻 | Attention 中的对应物 |
---|---|
点菜单 | Query |
菜名列表 | Keys |
菜的味道 | Values |
我的喜好打分 | Q 和 K 做点积 |
最终想吃啥 | 输出结果 |
多个人一起点菜 | Multi-Head Attention |
Attention 的意义与应用场景
Attention 机制最初用于机器翻译,现在已成为 NLP、CV 等领域的核心技术。它能让模型"聚焦"于输入中最相关的信息,提升理解和生成能力。
典型应用:
- 机器翻译(如 Transformer)
- 文本摘要、问答系统
- 图像描述生成、目标检测
- 推荐系统等
标准 Attention 公式与伪代码
Scaled Dot-Product Attention 公式:
[
\text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V
]
- ( Q ):Query
- ( K ):Keys
- ( V ):Values
- ( d_k ):Key 的维度
伪代码:
# Q, K, V: [batch, seq_len, d_model]
scores = Q @ K.transpose(-2, -1) / sqrt(d_k)
weights = softmax(scores, dim=-1)
output = weights @ V
常见 Attention 变体
- Self-Attention:Q、K、V 都来自同一序列(如 Transformer 编码器)。
- Cross-Attention:Q 来自一个序列,K、V 来自另一个序列(如 Transformer 解码器)。
- Multi-Head Attention:多个头并行计算,拼接后再线性变换。
可视化与直观理解
- 可用 BertViz 等工具可视化 Attention 分布,直观展示模型关注点。
- 许多论文和博客有丰富的示意图,推荐查阅。
Streamlit 可视化 Attention 权重示例
import streamlit as st
import numpy as np
import pandas as pd
st.title("Attention 权重可视化 Demo")
# 示例输入
tokens = ["[CLS]", "The", "animal", "did", "n't", "cross", "the", "street", "because", "it", "was", "tired", ".", "[SEP]"]
n = len(tokens)
# 随机生成一个注意力矩阵(实际应用中应替换为模型输出)
np.random.seed(42)
attention = np.random.rand(n, n)
attention = attention / attention.sum(axis=1, keepdims=True)
df = pd.DataFrame(attention, columns=tokens, index=tokens)
st.write("#### 输入 Token 序列")
st.write(tokens)
st.write("#### Attention 权重热力图")
st.dataframe(df.style.background_gradient(cmap='Blues'))
st.write("""
> 你可以将自己的注意力矩阵替换到 `attention` 变量,观察不同输入下的注意力分布。
""")
第1.3讲、什么是 Attention?——从点菜说起 🍽️的更多相关文章
- DL4NLP —— seq2seq+attention机制的应用:文档自动摘要(Automatic Text Summarization)
两周以前读了些文档自动摘要的论文,并针对其中两篇( [2] 和 [3] )做了presentation.下面把相关内容简单整理一下. 文本自动摘要(Automatic Text Summarizati ...
- Multimodal —— 看图说话(Image Caption)任务的论文笔记(二)引入attention机制
在上一篇博客中介绍的论文"Show and tell"所提出的NIC模型采用的是最"简单"的encoder-decoder框架,模型上没有什么新花样,使用CNN ...
- 初识Attention机制(NLP领域)
Attention 机制. 参考:https://blog.csdn.net/xiewenbo/article/details/79382785 要是关注深度学习在自然语言处理方面的研究进展,我相信你 ...
- attention 介绍
前言 这里学习的注意力模型是我在研究image caption过程中的出来的经验总结,其实这个注意力模型理解起来并不难,但是国内的博文写的都很不详细或说很不明确,我在看了 attention-mech ...
- 【NLP】Attention Model(注意力模型)学习总结
最近一直在研究深度语义匹配算法,搭建了个模型,跑起来效果并不是很理想,在分析原因的过程中,发现注意力模型在解决这个问题上还是很有帮助的,所以花了两天研究了一下. 此文大部分参考深度学习中的注意力机制( ...
- 2. Attention Is All You Need(Transformer)算法原理解析
1. 语言模型 2. Attention Is All You Need(Transformer)算法原理解析 3. ELMo算法原理解析 4. OpenAI GPT算法原理解析 5. BERT算法原 ...
- 对Attention is all you need 的理解
https://blog.csdn.net/mijiaoxiaosan/article/details/73251443 本文参考的原始论文地址:https://arxiv.org/abs/1706. ...
- 完全图解RNN、RNN变体、Seq2Seq、Attention机制
完全图解RNN.RNN变体.Seq2Seq.Attention机制 本文主要是利用图片的形式,详细地介绍了经典的RNN.RNN几个重要变体,以及Seq2Seq模型.Attention机制.希望这篇文章 ...
- Attention注意力机制介绍
什么是Attention机制 Attention机制通俗的讲就是把注意力集中放在重要的点上,而忽略其他不重要的因素.其中重要程度的判断取决于应用场景,拿个现实生活中的例子,比如1000个人眼中有100 ...
- Attention Mechanism
首先介绍Attention机制: 转自:http://blog.csdn.net/malefactor/article/details/50550211 上面讲的是Soft Attention Mod ...
随机推荐
- Springboot 在项目启动时将数据缓存到全局变量
有写字典数据不会频繁更新,但是会频繁查询,想要减少数据库链接次数,把内容缓存到项目的全局变量中,提高方法查询速度 import javax.annotation.PostConstruct; impo ...
- [Qt 基础-03] QRadioButton
QRadioButton基础 本文主要根据QT官方帮助文档以及日常使用,简单的介绍一下QRadioButton的功能以及使用 文章目录 QRadioButton基础 简介 autoExclusive ...
- Python面向对象-反射
python面向对象-反射 在python的面向对象中,与用户交互的主要方式就是利用反射来判断用户输入的指令是否存在和可执行 反射的定义 在python中反射主要是应用于类的对象上,在运行时,将对象的 ...
- kubeadm安装kubernetes
kubeadm安装kubernetes kubeadm 是官方社区推出的一个用于快速部署 kubernetes 集群的工具. 这个工具能通过两条指令完成一个 kubernetes 集群的部署: $ k ...
- 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
FRP 是 Github 上开源的一款内网穿透工具,点击前往项目地址,该项目分为 frps 服务端和 frpc 客户端,通过在拥有公网 IP 的服务器上搭建服务端,然后在被穿透的机器上安装客户端,配置 ...
- MySQL REPLACE INTO语句
介绍 在向表中插入数据时,我们经常会:首先判断数据是否存在:如果不存在,则插入:如果存在,则更新. 但在 MySQL 中有更简单的方法,replace into(insert into 的增强版),当 ...
- OpenAI的GPT-4o:普通人的AI秘书来了
1. 惊艳时刻:AI比你想象的更"人性" 早餐时,张三正埋头刷推送,一篇关于OpenAI发布GPT-4o的文章瞬间点燃了他的好奇心.这个AI简直是科技圈的惊雷!竟然可以像真人一样说 ...
- thinkphp6 使用自定义命令,生成数据库视图
在 ThinkPHP 命令行工具中,你可以为选项设置 别名,通过为选项指定一个简短的别名来简化命令输入.例如,如果你希望 --force-recreate 选项有一个简短的别名 -f,你可以通过在 a ...
- BaseMultiTableInnerInterceptor源码解读
本文首发在我的博客:https://blog.liuzijian.com/post/mybatis-plus-source-multi-table-inner-interceptor.html 一.概 ...
- vue3第二次传递数据方法无法获取到最新的值
使用reactive父组件第二次传递给子组件的数据:方法中可以获取到最新数据 <template> <div> <div> <h1>子组件</h1 ...