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

第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` 变量,观察不同输入下的注意力分布。
""")

在这里插入图片描述

http://www.xdnf.cn/news/4116.html

相关文章:

  • FastJSON 使用 `Feature.OrderedField` 修复 `JSONObject` 序列化字段顺序问题
  • 用 GRPO 魔法点亮Text2SQL 的推理之路:让模型“思考”得更像人类
  • AI服务器的作用都有哪些?
  • 【工具使用-数据可视化工具】Apache Superset
  • Cursor 被封解决方案
  • 2、Kafka Replica机制与ISR、HW、LEO、AR、OSR详解
  • .NET 通过回调函数执行 Shellcode启动进程
  • 广州华锐视点邀您参与2025广交会VRAR展【5月10-12日】
  • 快速体验 .NET9 提供的 HybridCache 混合缓存
  • wrod生成pdf。[特殊字符]改背景
  • 基于Piecewise Jerk Speed Optimizer的速度规划算法(附ROS C++/Python仿真)
  • C++多态详解
  • ORCAD打印pdf
  • Docker手动重构Nginx镜像,融入Lua、Redis功能
  • 【C++】WSL常用语法
  • 先滤波再降采样 还是 先降采样再滤波
  • IL2CPP 技术深度解析
  • std::move()详解
  • n8n 使用 Merge 节点进行数据聚合
  • 系统思考:困惑源于内心假设
  • 【AI入门】Cherry入门1:Cherry Studio的安装及配置
  • suna工具调用可视化界面实现原理分析(一)
  • 使用Mathematica绘制Sierpinski地毯
  • 观察者模式(Observer Pattern)
  • 解锁DeepSeek模型微调:从小白到高手的进阶之路
  • 【AND-OR-~OR锁存器设计】2022-8-31
  • AfuseKt2.4.2 | 支持阿里云盘、Alist等平台视频播放,具备自动海报墙刮削功能的强大播放器
  • GEMM inTriton (Split-K and Stream-K)
  • 经典的 Masked + Self-supervised learning 的模型方法
  • 学习路线(视觉)