AI 原理可视化
把公式变成能拖动的东西。纯前端计算,无后端无 API 调用。
注意力机制:每个词在看谁
自注意力的核心是 softmax(QKᵀ/√d)。矩阵每一行是一个 query token,列是它能看到的 key token,格子里的数字是分配的注意力权重(百分比,每行和为 100%)。颜色越红代表关注度越高。
这个演示说明了什么
- Causal mask 的作用:取消勾选后右上三角会出现数值——那是 BERT 这类 encoder 的双向注意力;勾选时被屏蔽,因为 GPT 生成时不能看到未来的词
- Temperature 的影响:调低(→0.2)注意力会集中到单个 token,调高(→3)会趋于均匀。这就是为什么采样温度影响输出确定性
- 第一行永远是 100%:第一个 token 只能看自己,softmax 单个元素必然为 1
- ⚠️ Q/K 向量由词的哈希生成(保证同词同结果),不是真实训练出来的语义向量,所以「谁关注谁」没有语义含义。这里演示的是机制而非语义
反向传播:梯度怎么从损失回流到参数
一个最小网络:x → 线性层 → ReLU → 线性层 → MSE 损失。上半部分是前向传播的数值,下半部分是链式法则逐层求出的梯度。点「训练一步」看参数如何更新。
这个演示说明了什么
- 把 x 调到负数(比如 -1):z₁ 变负 → ReLU 导数变 0 → 第一层参数梯度归零,永远学不动。这就是死亡 ReLU
- 把学习率调到 0.5 再连续跑:Loss 可能反而震荡上升——步长过大越过了最小值
- 梯度是连乘的:
∂L/∂w₁ = ∂L/∂ŷ · w₂ · ReLU′ · x。层数深了以后,这条链上任何一项接近 0,前面的参数就收不到信号——这是梯度消失的根源
KV Cache:长上下文的显存代价
自回归生成时,每个已生成 token 的 K/V 都要缓存下来供后续复用。这块显存随序列长度线性增长,长上下文的成本主要来自这里。
这个演示说明了什么
- 把序列长度从 8K 拉到 128K:显存涨 16 倍。这就是为什么长上下文贵,也是 PagedAttention / 分页管理存在的原因
- GQA 的价值:Llama 3 8B 的 32 个 attention head 只共享 8 组 KV,显存直接降到 1/4,而效果损失很小
- int8 量化 KV Cache:切换精度看显存变化。这是长上下文场景常用的优化,代价是轻微精度损失
- Batch 是乘性的:并发请求越多,KV Cache 越吃紧。这决定了推理服务的吞吐上限
TIES 模型合并:符号冲突怎么解决
把两个微调模型合并成一个时,同一参数位置上它们可能想要相反的调整。直接平均会互相抵消,TIES 用「修剪 → 符号选举 → 不相交平均」三步保留占优方向。
这个演示说明了什么
- 红色是正向调整,蓝色是负向。位置 0、1 上 A 想要正、B 想要负,这就是符号冲突
- 对比最后两行:TIES 在冲突位置保留了完整幅度,朴素平均把 +0.8 和 -0.7 抵消成 +0.05,两个模型的能力都没保住
- 调低 Trim 比例:会丢掉更多小幅值参数。小幅值大多是噪声,修剪掉反而更干净,但过低会丢真实信息
- 零值格子:被 Trim 掉或符号不一致被丢弃的位置