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

第1.3讲、什么是 Attention?——从点菜说起 [特殊字符]️

假设你在一家餐厅点餐,菜单上有好多菜(句子中的每个单词),你现在要点菜(做决策),但不可能每道菜都吃一样多。

你会怎么做?你会:

  1. 看下菜单(获取所有信息)
  2. 根据自己的口味打分(我喜欢辣、不要太咸)
  3. 按照喜好分配注意力(辣子鸡80%,炒青菜20%)
  4. 最后把你"注意到的内容"组合起来形成最终决策

👉 这就是 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 的过程就是:

  1. 比较每个答案和问题的匹配程度(Q 和 K 做内积)
  2. 匹配得分归一化(Softmax)
  3. 用这些得分去"加权平均"所有内容(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 pdst.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` 变量,观察不同输入下的注意力分布。
""")

在这里插入图片描述

相关文章:

  • LeetCode 1781. 所有子字符串美丽值之和 题解
  • ultralytics框架进行RT-DETR目标检测训练
  • EASM外部攻击面管理平台
  • Relay算子注册
  • 7.9/Q1,Charls最新文章解读
  • Dagger中编译import报找不到ProvideClientFactory,initialize中ProvideClientFactory爆红
  • 猿人学刷题系列(第一届比赛)——第一题
  • 技术对暴力的削弱
  • 【C/C++】构造函数与析构函数
  • 强化学习+多模态 从理论到实战
  • Python Cookbook-7.4 对类和实例使用 cPickle 模块
  • 论软件的可靠性设计
  • 排序算法——堆排序
  • 【PPT制作利器】DeepSeek + Kimi生成一个初始的PPT文件
  • 椭球面长度计算的两种公式及投影选择
  • MySQL 窗口函数入门到精通
  • Coding Practice,48天强训(30)
  • 泰迪杯特等奖案例学习资料:基于卷积神经网络与集成学习的网络问政平台留言文本挖掘与分析
  • 网页截图指南
  • 存储系列知识
  • 42岁退役军人高武生命最后时刻:在水中托举近20分钟救出落水孩童
  • 云南一男子酒后经常殴打七旬母亲,被警方拘14日罚600元
  • 金融监管总局:支持银行有序设立科技金融专门机构,推动研发机器人、低空飞行器等新兴领域的保险产品
  • 同为“东部重要中心城市”后交出首份季报:宁杭苏表现如何?
  • 中国驻俄大使张汉晖人民日报撰文:共襄和平伟业,续谱友谊新篇
  • 新华社:赵心童世锦赛夺冠,中国书写斯诺克运动新历史