每日基础课

← 返回日报
基础知识 第一则

LayerNorm 与 Pre-Norm:今天真正弄懂

先记住

先记住:一句话定义 + 一句记忆口诀

通俗讲解

一句话定义:

LayerNorm,就是对“每一个样本自己的特征维度”做归一化,让这一层的输入数值更稳定。

Pre-Norm,就是在 Transformer 子层之前先做 LayerNorm,再做 Attention 或 FFN。

一句记忆口诀:

LayerNorm 管“每个人自己稳不稳”,Pre-Norm 是“先进门洗手,再干活”。

---

一、先用生活类比理解

想象一个说话人日志系统。

输入是一段音频,被切成很多帧。

每一帧都有一串特征,比如:

  • 音高相关特征
  • 能量相关特征
  • 说话人 embedding
  • 频谱特征
  • 上下文编码特征

这些特征的数值范围可能很乱。

有的维度很大。 有的维度很小。 有的维度波动很剧烈。

LayerNorm 做的事像什么?

像给“每一帧自己的特征表”做一次内部校准。

不是拿这一帧和别的帧比。 也不是拿这个说话人和别的说话人比。

而是问:

“这一帧内部的这些特征,整体均值是多少?整体波动有多大?”

然后把它们拉到一个比较稳定的尺度。

---

二、必要公式

假设某一层的输入是:

\[ x = [x_1, x_2, ..., x_H] \]

这里:

  • \(x\):一个样本在某一位置上的特征向量
  • \(H\):特征维度数量,也叫 hidden size
  • \(x_i\):第 \(i\) 个特征值

LayerNorm 先算这个向量自己的均值:

\[ \mu = \frac{1}{H}\sum_{i=1}^{H}x_i \]

符号解释:

  • \(\mu\):均值
  • \(\sum\):求和
  • \(H\):特征总数

再算方差:

\[ \sigma^2 = \frac{1}{H}\sum_{i=1}^{H}(x_i-\mu)^2 \]

符号解释:

  • \(\sigma^2\):方差,表示这些特征值波动有多大
  • \(x_i-\mu\):第 \(i\) 个特征离均值多远

然后标准化:

\[ \hat{x}_i = \frac{x_i-\mu}{\sqrt{\sigma^2+\epsilon}} \]

符号解释:

  • \(\hat{x}_i\):归一化后的第 \(i\) 个特征
  • \(\epsilon\):一个很小的数,防止除以 0
  • \(\sqrt{\sigma^2+\epsilon}\):标准差,加上 \(\epsilon\) 更安全

最后,LayerNorm 还会学习两个参数:

\[ y_i = \gamma_i \hat{x}_i + \beta_i \]

符号解释:

  • \(y_i\):最终输出
  • \(\gamma_i\):可学习缩放参数
  • \(\beta_i\):可学习平移参数

为什么还要 \(\gamma\) 和 \(\beta\)?

因为模型可能发现:

“虽然归一化很有用,但某些维度确实应该更大一点,某些维度应该偏移一点。”

所以 LayerNorm 不是死板地把东西全压成固定样子。

它是:

先稳定,再让模型自己学该怎么调。

---

三、它解决什么问题

核心问题:

深层网络训练时,每一层输入分布容易乱。

尤其是 Transformer 堆很多层时:

  • 前面层稍微变一点
  • 后面层输入分布就跟着变
  • 梯度传播不稳定
  • 训练容易慢
  • 深层模型容易崩
  • loss 可能震荡
  • 需要更小学习率才能勉强训练

LayerNorm 的作用是:

让每一层看到的输入尺度更稳定。

在音视频理解里,这很重要。

因为音频和视频输入本来就复杂:

音频里:

  • 静音段
  • 说话段
  • 重叠说话
  • 背景噪声
  • 音量变化

视频里:

  • 光照变化
  • 人脸角度变化
  • 帧间运动变化

如果中间特征尺度再乱,模型会更难学。

没有 LayerNorm 会怎样?

不一定完全不能训练。

但常见后果是:

  • 深层 Transformer 更难收敛
  • 对学习率更敏感
  • loss 曲线更抖
  • 需要更多调参
  • 模型层数加深后收益变差
  • 训练初期可能不稳定

---

四、Pre-Norm 是什么

Transformer 里常有一个结构:

\[ x + Sublayer(x) \]

这里:

  • \(x\):原始输入
  • \(Sublayer\):子层,比如 Self-Attention 或 Feed Forward Network
  • \(+\):残差连接

Post-Norm 写法大致是:

\[ y = LayerNorm(x + Sublayer(x)) \]

意思是:

先干活。 再把结果和原输入相加。 最后做 LayerNorm。

Pre-Norm 写法大致是:

\[ y = x + Sublayer(LayerNorm(x)) \]

意思是:

先对输入做 LayerNorm。 再送进子层干活。 最后和原输入相加。

简单说:

Post-Norm:干完活再洗手。 Pre-Norm:先洗手再干活。

现在很多深层 Transformer 更偏向 Pre-Norm。

原因很直观:

残差路径里的 \(x\) 更像一条“干净的高速路”。

梯度可以更顺地从后面传回前面。

这对深层网络很有帮助。

---

五、在主流模型、音视频和说话人日志中的实际位置

在 Transformer block 里,LayerNorm 通常出现在两个地方。

以 Pre-Norm Transformer 为例:

第一处,在 Attention 前:

\[ x = x + Attention(LayerNorm(x)) \]

第二处,在 FFN 前:

\[ x = x + FFN(LayerNorm(x)) \]

其中:

  • Attention:负责看上下文
  • FFN:负责逐位置加工特征
  • Residual:保留原信息,帮助梯度传播
  • LayerNorm:让送进子层的特征稳定

在音频模型中:

例如语音识别、说话人识别、说话人日志、音频事件检测。

输入可能形状是:

\[ [B, T, D] \]

含义:

  • \(B\):batch size,一批里有多少条样本
  • \(T\):时间帧数
  • \(D\):每一帧的特征维度

LayerNorm 通常对最后一维 \(D\) 做。

也就是:

每个样本、每个时间帧,单独归一化自己的特征向量。

在视频模型中:

可能形状是:

\[ [B, T, N, D] \]

含义:

  • \(B\):batch size
  • \(T\):视频时间帧
  • \(N\):每帧的 patch/token 数
  • \(D\):每个 token 的特征维度

LayerNorm 通常也是对最后一维 \(D\) 做。

在说话人日志中:

模型要判断:

  • 谁在说话
  • 什么时候开始说
  • 什么时候结束
  • 是否多人重叠说话

常见模块包括:

  • 声学特征编码器
  • Transformer/Conformer 编码器
  • 说话人 embedding 处理
  • 帧级分类头
  • 聚类或序列解码模块

LayerNorm 常出现在编码器内部。

尤其是 Transformer/Conformer block 中。

它不是最终判断“谁说话”的模块。

它更像底层稳定器。

让中间特征更适合被 Attention、FFN、分类头使用。

---

六、与相近概念的区别

  • LayerNorm vs BatchNorm

BatchNorm 常按 batch 维度统计。

它会看一批样本的均值和方差。

LayerNorm 通常不依赖 batch。

它看的是单个样本内部的特征维度。

所以 LayerNorm 更适合:

  • 变长序列
  • 小 batch
  • Transformer
  • NLP
  • 音频序列
  • 视频 token 序列

BatchNorm 更常见于:

  • CNN
  • 图像卷积网络
  • batch 足够大的场景

一句话:

BatchNorm 问:“这一批人整体怎么样?” LayerNorm 问:“这个人自己内部稳不稳?”

---

  • LayerNorm vs InstanceNorm

InstanceNorm 常用于图像风格迁移等任务。

它通常对每个样本、每个通道的空间维度做归一化。

LayerNorm 更常对每个 token 的特征维度做归一化。

一句话:

InstanceNorm 更关心图像空间风格。 LayerNorm 更关心 token 特征尺度。

---

  • LayerNorm vs RMSNorm

RMSNorm 可以看作 LayerNorm 的一个简化亲戚。

它通常不减均值,只用均方根做缩放。

LayerNorm 做:

\[ x - mean \]

再除以标准差。

RMSNorm 更像只做尺度校准。

事实:

一些大语言模型使用 RMSNorm,因为它计算更简单。

但今天只要记住:

LayerNorm 同时处理“中心”和“尺度”。 RMSNorm 主要处理“尺度”。

---

  • Pre-Norm vs Post-Norm

Post-Norm:

\[ LayerNorm(x + Sublayer(x)) \]

Pre-Norm:

\[ x + Sublayer(LayerNorm(x)) \]

区别在 LayerNorm 放在哪里。

Post-Norm 是子层后。

Pre-Norm 是子层前。

Pre-Norm 通常更利于深层模型训练稳定。

Post-Norm 在早期 Transformer 中很经典。

---

七、怎么学外部资料

PyTorch LayerNorm 文档适合用来学:

  • `nn.LayerNorm` 的标准接口
  • `normalized_shape` 怎么写
  • 输入张量最后几维怎么被归一化
  • \(\gamma\)、\(\beta\) 对应代码里的什么参数

The Annotated Transformer 适合用来学:

  • LayerNorm 如何和残差连接放在一起
  • Transformer block 的完整代码结构
  • Attention、FFN、残差、归一化之间的顺序关系

建议顺序:

先看 PyTorch 文档搞清接口。 再看 The Annotated Transformer 理解它在完整模型里的位置。

先想再展开答案
LayerNorm 的一句话定义是什么?
对每个样本自己的特征维度做归一化,让输入尺度更稳定。
Pre-Norm 的核心公式是什么?
x + Sublayer(LayerNorm(x))。
LayerNorm 和 BatchNorm 最大区别是什么?
BatchNorm 依赖 batch 统计,LayerNorm 通常看单个样本内部特征。
发展脉络 · 现状 · 未来

一、发展流程:之前怎么做

早期深度网络里,常见做法是 BatchNorm。

在 CNN 里,BatchNorm 很好用。

因为图像分类常有较大 batch。 卷积特征也适合按 batch 和空间维度统计。

但 Transformer 处理的是序列。

序列有几个麻烦点:

  • 长度可能变化
  • batch 可能很小
  • 不同样本差异很大
  • 时间维度有顺序
  • 训练和推理时 batch 统计不一定一致

在音频任务里尤其明显。

比如说话人日志:

一条音频可能 5 秒。 另一条可能 30 秒。 有的安静。 有的嘈杂。 有的有重叠说话。

如果强依赖 batch 统计,可能不稳定。

---

二、为什么 LayerNorm 出现

LayerNorm 的思路是:

不要依赖一批样本。 只看每个样本自己的特征。

这样有几个好处:

  • batch 大小变化时更稳
  • 适合序列模型
  • 适合 Transformer
  • 训练和推理行为更一致
  • 小 batch 场景也能用

这就是它在 Transformer 里流行的重要原因。

---

三、从 Post-Norm 到 Pre-Norm

早期 Transformer 里常见 Post-Norm:

\[ LayerNorm(x + Sublayer(x)) \]

这很自然。

因为人们习惯于:

先得到子层输出。 加上残差。 再归一化。

但模型越来越深后,训练稳定性成了问题。

Pre-Norm 把 LayerNorm 放到子层前:

\[ x + Sublayer(LayerNorm(x)) \]

这样残差路径更直接。

梯度可以沿着残差连接更顺地传。

事实:

Pre-Norm 已经是很多现代 Transformer 系列模型中的常见设计。

尤其是层数较深时。

---

四、现在怎么用

现在使用 LayerNorm 时,最常见写法是:

python
nn.LayerNorm(hidden_dim)

输入通常是:

python
[B, T, D]

LayerNorm 会对最后一维 `D` 做归一化。

如果是视频 token:

python
[B, T, N, D]

也常对最后一维 `D` 做。

在 Pre-Norm Transformer block 里,结构常是:

python
x = x + attention(norm1(x))
x = x + ffn(norm2(x))

注意:

通常 Attention 前一个 LayerNorm。 FFN 前另一个 LayerNorm。

不是共用一个。

---

五、当前局限:事实部分

事实 1:

LayerNorm 不能替代好的特征设计和数据清洗。

如果音频本身标注错了,LayerNorm 不会修正标签。

事实 2:

LayerNorm 不能自动解决长序列建模问题。

它让数值稳定,但不会让模型天然理解超长上下文。

事实 3:

LayerNorm 会增加一点计算和参数。

参数不多,主要是 \(\gamma\) 和 \(\beta\)。

但在超大模型或超长序列中,归一化也会带来实际计算开销。

事实 4:

归一化方式会影响模型表现。

Pre-Norm、Post-Norm、RMSNorm 等选择,都会影响训练稳定性和最终效果。

没有一个选择永远最好。

---

六、未来可能作用:推测部分

推测 1:

在音视频多模态模型中,归一化会继续很重要。

因为音频特征、视频特征、文本特征的尺度天然不同。

归一化能帮助不同模态更稳定地融合。

推测 2:

未来模型可能更常使用任务自适应的归一化方式。

比如对噪声环境、重叠说话、不同麦克风条件做更灵活的尺度控制。

推测 3:

在说话人日志中,归一化可能会和说话人 embedding、场景条件、麦克风条件结合得更紧。

但这属于方向判断,不是基础事实。

---

七、最关键区别总结

LayerNorm 是一个操作。

它回答:

“这个 token 的特征要不要先稳定一下?”

Pre-Norm 是一个结构位置选择。

它回答:

“LayerNorm 放在子层前,还是子层后?”

所以:

LayerNorm 是零件。 Pre-Norm 是装法。

自测
  • LayerNorm 是按 batch 归一化,还是按单个样本的特征维度归一化?
  • Pre-Norm 和 Post-Norm 的公式分别是什么?
  • 在说话人日志的 Transformer 编码器里,LayerNorm 通常放在什么位置,为什么有用?
类比
LayerNorm 像给每一帧音频特征做“内部音量校准”:不和别人比,只把自己这一帧的各项特征调到稳定范围。
动手练习 第二则

LayerNorm 与 Pre-Norm:动手实现

练习目标

10-20分钟小练习目标、输入输出和验收标准

参考实现

练习目标:

用 PyTorch 做三件事:

  • 手写一个简化版 LayerNorm。
  • 和 `torch.nn.LayerNorm` 对比输出。
  • 搭一个最小 Pre-Norm block,看清张量形状。

输入:

一个模拟音频序列张量:

python
x.shape = [B, T, D]

其中:

  • `B=2`:两条音频
  • `T=4`:每条音频 4 个时间帧
  • `D=6`:每帧 6 维特征

输出:

  • 手写 LayerNorm 的输出形状
  • PyTorch LayerNorm 的输出形状
  • 两者最大误差
  • Pre-Norm block 输出形状
  • LayerNorm 后每个 token 的均值和方差

验收标准:

  • 代码能直接运行
  • 手写 LayerNorm 和 PyTorch LayerNorm 最大误差很小
  • 输出形状仍是 `[2, 4, 6]`
  • LayerNorm 后,每个 token 的均值接近 0,方差接近 1

思路:

LayerNorm 对最后一维 `D` 做归一化。

所以对 `x` 来说:

python
x.shape = [B, T, D]

要沿着 `dim=-1` 计算均值和方差。

每个 `[D]` 向量单独归一化。

Pre-Norm block 的核心结构是:

python
y = x + sublayer(norm(x))

这里我们用一个简单的线性层模拟 `sublayer`。

完整可运行代码:

python
import torch
import torch.nn as nn


# 为了结果可复现
torch.manual_seed(42)


class ManualLayerNorm(nn.Module):
    """
    手写简化版 LayerNorm。
    默认对最后一维做归一化。
    """
    def __init__(self, hidden_dim, eps=1e-5):
        super().__init__()
        self.hidden_dim = hidden_dim
        self.eps = eps

        # gamma:可学习缩放参数
        self.gamma = nn.Parameter(torch.ones(hidden_dim))

        # beta:可学习平移参数
        self.beta = nn.Parameter(torch.zeros(hidden_dim))

    def forward(self, x):
        """
        x: [B, T, D]
        对最后一维 D 做归一化。
        """
        mean = x.mean(dim=-1, keepdim=True)
        var = x.var(dim=-1, unbiased=False, keepdim=True)

        x_hat = (x - mean) / torch.sqrt(var + self.eps)

        y = self.gamma * x_hat + self.beta
        return y


class TinyPreNormBlock(nn.Module):
    """
    一个最小 Pre-Norm block。
    用 Linear 模拟 Transformer 里的子层。
    真实模型中这里可以是 Self-Attention 或 FFN。
    """
    def __init__(self, hidden_dim):
        super().__init__()
        self.norm = nn.LayerNorm(hidden_dim)
        self.sublayer = nn.Linear(hidden_dim, hidden_dim)

    def forward(self, x):
        """
        Pre-Norm:
        y = x + sublayer(norm(x))
        """
        return x + self.sublayer(self.norm(x))


def main():
    B = 2
    T = 4
    D = 6

    # 模拟一批音频帧特征:[batch, time, feature]
    x = torch.randn(B, T, D) * 5 + 10

    print("输入 x.shape:", x.shape)
    print()

    # 1. 手写 LayerNorm
    manual_ln = ManualLayerNorm(D)
    y_manual = manual_ln(x)

    print("手写 LayerNorm 输出 shape:", y_manual.shape)

    # 2. PyTorch 官方 LayerNorm
    torch_ln = nn.LayerNorm(D)

    # 为了公平比较,把官方 LayerNorm 的参数复制成手写版一样
    with torch.no_grad():
        torch_ln.weight.copy_(manual_ln.gamma)
        torch_ln.bias.copy_(manual_ln.beta)

    y_torch = torch_ln(x)

    print("PyTorch LayerNorm 输出 shape:", y_torch.shape)

    max_diff = (y_manual - y_torch).abs().max().item()
    print("手写版与 PyTorch 版最大误差:", max_diff)
    print()

    # 3. 检查归一化后的均值和方差
    # 注意:这里检查的是 y_manual 的最后一维
    mean_after = y_manual.mean(dim=-1)
    var_after = y_manual.var(dim=-1, unbiased=False)

    print("LayerNorm 后,每个 token 的均值:")
    print(mean_after)
    print()

    print("LayerNorm 后,每个 token 的方差:")
    print(var_after)
    print()

    # 4. 最小 Pre-Norm block
    block = TinyPreNormBlock(D)
    y_block = block(x)

    print("Pre-Norm block 输出 shape:", y_block.shape)
    print()

    # 5. 展示 Pre-Norm 的中间形状
    norm_x = block.norm(x)
    sublayer_out = block.sublayer(norm_x)
    residual_out = x + sublayer_out

    print("norm(x).shape:", norm_x.shape)
    print("sublayer(norm(x)).shape:", sublayer_out.shape)
    print("x + sublayer(norm(x)).shape:", residual_out.shape)

    # 6. 对比:Pre-Norm 不是改变形状,而是改变送入子层前的数值尺度
    print()
    print("原始 x 的整体均值:", x.mean().item())
    print("norm(x) 的整体均值:", norm_x.mean().item())
    print("原始 x 的整体标准差:", x.std(unbiased=False).item())
    print("norm(x) 的整体标准差:", norm_x.std(unbiased=False).item())


if __name__ == "__main__":
    main()
代码拆解与真实用法

逐段解释代码:

  • 输入张量
python
x = torch.randn(B, T, D) * 5 + 10

这里故意让输入均值大约在 10,标准差大约在 5。

这样更容易看到 LayerNorm 的效果。

形状是:

python
[2, 4, 6]

意思是:

  • 2 条音频
  • 每条 4 帧
  • 每帧 6 维特征

---

  • 手写 LayerNorm

核心代码是:

python
mean = x.mean(dim=-1, keepdim=True)
var = x.var(dim=-1, unbiased=False, keepdim=True)
x_hat = (x - mean) / torch.sqrt(var + self.eps)

`dim=-1` 表示最后一维。

也就是 `D` 维。

对每个 token 的 6 个特征算均值和方差。

`keepdim=True` 很重要。

如果不用它,形状会从:

python
[B, T, D]

变成:

python
[B, T]

后面和原始 `x` 相减时容易广播混乱。

使用 `keepdim=True` 后,均值形状是:

python
[B, T, 1]

可以自然广播到:

python
[B, T, D]

---

  • gamma 和 beta

代码里:

python
self.gamma = nn.Parameter(torch.ones(hidden_dim))
self.beta = nn.Parameter(torch.zeros(hidden_dim))

对应公式:

\[ y_i = \gamma_i \hat{x}_i + \beta_i \]

它们是可学习参数。

初始时:

  • `gamma = 1`
  • `beta = 0`

所以刚开始不会改变标准化结果。

训练过程中,模型会自己调整它们。

---

  • 和 PyTorch LayerNorm 对比

代码:

python
torch_ln = nn.LayerNorm(D)

表示对最后一维长度为 `D` 的特征做 LayerNorm。

这也是音频序列 `[B, T, D]` 中最常见的写法。

为了公平比较,代码把参数复制过去:

python
torch_ln.weight.copy_(manual_ln.gamma)
torch_ln.bias.copy_(manual_ln.beta)

所以两个输出应该几乎一样。

最大误差通常非常小。

---

  • Pre-Norm block

核心代码:

python
return x + self.sublayer(self.norm(x))

这就是:

\[ y = x + Sublayer(LayerNorm(x)) \]

其中:

python
self.norm = nn.LayerNorm(hidden_dim)

是 LayerNorm。

python
self.sublayer = nn.Linear(hidden_dim, hidden_dim)

这里只是用 Linear 模拟子层。

真实 Transformer 中,`sublayer` 可以是:

  • Self-Attention
  • Feed Forward Network
  • 跨模态 Attention
  • 音视频融合模块

---

  • 张量形状

输入:

python
x.shape = [2, 4, 6]

归一化后:

python
norm(x).shape = [2, 4, 6]

线性层后:

python
sublayer(norm(x)).shape = [2, 4, 6]

残差相加后:

python
x + sublayer(norm(x)).shape = [2, 4, 6]

所以 Pre-Norm 不改变形状。

它改变的是:

送进子层之前的数值尺度。

---

  • 常见错误

错误 1:

把 `nn.LayerNorm(B)` 写成 batch size。

例如:

python
nn.LayerNorm(2)

如果输入是 `[2, 4, 6]`,这是错的。

因为 LayerNorm 通常要归一化最后一维 `D=6`。

应该写:

python
nn.LayerNorm(6)

---

错误 2:

对 `dim=0` 求均值。

python
x.mean(dim=0)

这更像在 batch 维上混合样本。

LayerNorm 的重点不是混合 batch。

对 `[B, T, D]`,常见是:

python
x.mean(dim=-1)

---

错误 3:

忘记 `keepdim=True`。

容易造成广播不符合预期。

建议初学时固定写:

python
mean = x.mean(dim=-1, keepdim=True)

---

错误 4:

以为 LayerNorm 会改变 shape。

不会。

输入 `[B, T, D]`,输出还是 `[B, T, D]`。

---

错误 5:

以为 Pre-Norm 是一个新的层。

不是。

Pre-Norm 是一种摆放方式。

LayerNorm 是层。 Pre-Norm 是结构。

---

  • 它在真实模型中的对应位置

在真实说话人日志模型中,一个 Transformer 编码器 block 可能长这样:

python
x = x + self_attention(layer_norm_1(x))
x = x + feed_forward(layer_norm_2(x))

输入 `x` 可能是声学编码后的帧级特征:

python
[B, T, D]

每个时间帧都带有上下文表示。

LayerNorm 让每帧特征更稳定。

Attention 再用这些稳定后的特征去建模:

  • 远距离上下文
  • 说话人切换
  • 重叠说话线索
  • 静音和语音边界

所以今天这段小代码,就是很多真实音频 Transformer block 的缩小版。

再练一步
  • 把 TinyPreNormBlock 里的 Linear 换成两层 MLP:Linear -> ReLU -> Linear。
  • 再写一个 TinyPostNormBlock,实现 LayerNorm(x + sublayer(x)),并对比输出形状。
类比
代码记忆法:`x = x + sublayer(norm(x))`,先 norm,再干活,最后走残差。

往期记录 159 条记录

2026年08月11日信息粒缓存编排interviewPrefixDAGMinCostFlowSemanticHash
2026年08月11日表示一个折线图的最少线段数codeGeometryArrayMath
2026年08月11日RMSNorm:今天真正弄懂foundationRMSNormnormalizationLLaMA
2026年08月11日RMSNorm:动手实现practicePythonPyTorchRMSNorm
2026年08月10日长上下文块复用interviewPrefixCachingDynamicProgrammingIntervalScheduling
2026年08月10日到达终点数字codeMathParityGreedy
2026年08月10日多教师蒸馏调度interviewMinCostFlowDynamicProgrammingParetoFrontier
2026年08月10日定长子串中元音的最大数目codeStringSliding WindowTwo Pointers
2026年08月06日长窗注意力稳健化interviewNumericalStabilitySoftmaxPositionBias
2026年08月06日执行操作使数据元素之和大于等于 KcodeGreedyMathEnumeration
2026年08月05日必须拿起的最小连续卡牌数codehashmaparrayslidingwindow
2026年08月04日绝对差不超过限制的最长连续子数组codesliding windowmonotonic queuedeque
2026年08月03日证据路由与采样优化interviewRoutingSubmodularLatency
2026年08月01日查询引导长视频采样interviewSubmodularKnapsackTemporalCoverage
2026年08月01日边界元素是最大值的子数组数目codeStackArrayMonotonicStack
2026年07月30日受限内存推理调度interviewLLM-servingKV-cacheScheduling
2026年07月29日技能感知词元压缩interviewTokenCompressionMultimodalKnapsack
2026年07月27日递归验证预算分配interviewAStarBanditSubmodular
2026年07月26日推理早停预算分配interviewOptimalStoppingSequentialTestCalibration
2026年07月26日二叉树中所有距离为 K 的结点codeTreeBFSDFS
2026年07月25日流式同传轨迹调度interviewStreamingMonotonicAlignmentLatencyControl
2026年07月25日分割回文串codepalindromebacktrackingdynamicprogramming
2026年07月24日最大节点价值之和codeGreedyBitManipulationTree
2026年07月23日长音视频工具调度interviewTool RoutingDAG SchedulingSubmodular Maximization
2026年07月20日流式多模态记忆检索interviewStreaming MemoryMultimodal RetrievalTemporal Indexing
2026年07月20日T 秒后青蛙的位置codeTreeDFSProbability
2026年07月20日约束预算模型路由interviewModel RoutingConstrained OptimizationContextual Bandit
2026年07月20日匹配模式数组的子数组数目 IIcodeArrayKMPStringMatching
2026年07月20日受限显存解码调度interviewLLMCompilerKVCacheScheduling
2026年07月20日填充每个节点的下一个右侧节点指针 IIcodeTreeBFSLinkedList
2026年07月02日变分信息瓶颈Information BottleneckVariational BoundRate-Distortion
2026年07月01日CTC序列对齐算法CTCForward-Backward AlgorithmBlank Token
2026年07月01日故障流行病学Core DumpStatistical DebuggingFault Localization
2026年06月30日哈希嵌入压缩Hash EmbeddingFeature HashingEmbedding Compression
2026年06月29日一致性蒸馏Consistency ModelsProgressive DistillationODE Trajectory
2026年06月29日原生推理引擎Native RuntimeggmlInference Engine
2026年06月28日无分类器引导Classifier-Free GuidanceGuidance ScaleScore Interpolation
2026年06月25日MVDR波束成形MVDR BeamformingSpatial FilteringCovariance Estimation
2026年06月24日神经缩放定律Scaling LawsCompute-Optimal TrainingPower Law
2026年06月23日最小贝叶斯风险解码Minimum Bayes RiskDecision TheoryHypothesis Selection
2026年06月23日PID控制与生成调控PID ControllerFeedback ControlClosed-loop Generation
2026年06月22日生成模型评估度量Frechet Inception DistanceGenerative EvaluationFeature Statistics
2026年06月21日浮点量化收缩偏差FP4 TrainingShrinkage BiasLow-Precision Arithmetic
2026年06月21日模型上线仿真Deployment SimulationShadow TestingOffline Evaluation
2026年06月20日现代联想记忆Hopfield NetworkAssociative MemoryEnergy-Based Model
2026年06月19日离散扩散语言模型Discrete DiffusionAbsorbing StateConcrete Score
2026年06月18日循环变换器架构Looped TransformerWeight TyingAdaptive Computation
2026年06月17日韵律建模演进Prosody PredictionF0 ModelingDuration Prediction
2026年06月16日说话人日志Speaker DiarizationSpeaker EmbeddingEEND
2026年06月15日偏好对齐优化Preference OptimizationDPOReward Modeling
2026年06月14日多令牌并行预测Multi-Token PredictionSpeculative DecodingParallel Decoding
2026年06月13日流匹配生成模型Flow MatchingRectified FlowOptimal Transport Path
2026年06月13日实时管线延迟预算Latency BudgetPipeline OrchestrationTime-to-First-Token
2026年06月12日MoE路由机制Mixture of ExpertsSparse GatingRouter Design
2026年06月11日连续自回归生成Continuous AutoregressiveLatent PredictionAudioVAE
2026年06月10日KV缓存压缩KV Cache CompressionToken EvictionAttention Sparsity
2026年06月09日浏览器端模型推理WebGPUBrowser InferenceClient-side ML
2026年06月02日残差向量量化Residual Vector QuantizationAudio TokenizationNeural Codec
2026年05月31日彩色噪声扩散采样Colored NoiseSpectral BiasSDE Solver
2026年05月31日算子融合编译原理Kernel FusionOperator Fusiontorch.compile
2026年05月20日AI生成内容溯源 (7 chars) ✓Content ProvenanceC2PASynthID
2026年05月19日推理委托设计模式 (8 chars) ✓ Let me now write the full content for both topics. Actually, I realize I should double-check: is "Runtime Abstraction" or "Delegate Pattern" too close to any covered keyword? Looking at the list: Cluster Scheduling, Co-design, Collective Communication, Computational Expressiveness, CUTLASS... No, none of these overlap. OK, let me finalize and write everything out. Let me reconsider the engineering topic one more time. The title "推理委托设计模式" is good but maybe I should make it even more specific and interesting. What about focusing on the "graph partitioning" aspect - how ML runtimes decide which operations to delegate to which backend? This is a more specific and technically interesting angle. No, I think the broader "delegate pattern" is better because it covers the full picture and is more useful to the reader. Let me write it all out now. For the engineering topic, let me think about the history: - Early days: frameworks were monolithic (Caffe, early TensorFlow) - TensorRT (2017): NVIDIA's specialized inference engine, initially standalone - ONNX Runtime (2019): Microsoft introduced "Execution Providers" - the first major delegate-like abstraction - TFLite delegates (2018-2019): TensorFlow Lite introduced delegate API for GPU, NNAPI, etc. - ExecuTorch (2023-2024): PyTorch's answer to edge inference with a clean delegate API - 2025-2026: MLX delegate, Qualcomm AI Engine Direct delegate, etc. This is a rich history. Let me write it up. Actually, I want to make sure I have the dates right: - TensorRT was first released around 2016-2017 - ONNX was announced in 2017 - ONNX Runtime was open-sourced in 2018-2019 - TFLite was released in 2017, delegates came later - ExecuTorch was announced at PyTorch Conference 2023 OK, let me write everything now. I'll be thorough. One more thought: for the MATH section of the engineering topic, I could discuss the graph partitioning problem formally, or I could discuss the cost model for deciding whether to delegate. Let me think... The graph partitioning for delegation can be formalized as: - Given a computation graph $G = (V, E)$ where $V$ is the set of operations and $E$ is data dependencies - And a set of delegates $D = \{d_1, ..., d_m\}$ where each delegate supports a subset of operations $S_i \subseteq V$ - Find a partition $P = \{P_0, P_1, ..., P_m\}$ (where $P_0$ is the fallback/CPU partition) that minimizes total execution time - Subject to: each $
2026年05月17日连续批处理异步化
2026年05月10日连续潜在扩散语言模型Continuous Latent DiffusionNon-autoregressive LMDiffusion Language Model
2026年05月10日零样本跨语言语音克隆Zero-shot Voice CloningCross-lingual TTSIPA Phoneme Representation
2026年05月09日最优传输音频距离Optimal TransportFréchet Audio DistanceRiemannian Metric
2026年05月09日推荐系统推理核内广播优化Intra-kernel BroadcastEmbedding TableRecommendation Inference
2026年05月08日扩散Transformer异常值令牌Outlier TokensDiffusion TransformerAttention Sink
2026年05月08日WebRTC低延迟语音工程WebRTCReal-time AudioJitter Buffer
2026年05月07日音素级深度伪造检测原理Phoneme-level Deepfake DetectionSelf-supervised Speech EmbeddingEmotional Speech Synthesis
2026年05月07日AI训练网络协议工程哲学Multi-path Reliable ConnectionRDMA over EthernetCollective Communication
2026年05月05日对抗解纠缠说话人验证Speaker DisentanglementAdversarial TrainingCross-lingual Verification
2026年05月05日LLM推理为何用语言Chain-of-ThoughtLatent ReasoningToken Space
2026年05月01日跨架构知识蒸馏原理Cross-Architecture DistillationDiffusion LMAutoregressive Teacher
2026年05月01日AI评估计算瓶颈工程LLM Evaluation InfrastructureBenchmark SaturationEval Compute Bottleneck
2026年04月29日平衡传输语音增强Schrödinger BridgeStochastic Differential EquationSpeech Enhancement
2026年04月29日深度学习理论形成Deep Learning TheoryLoss LandscapeNeural Tangent Kernel
2026年04月28日语义进度函数原理Semantic Progress FunctionDiffusion TrajectoryNonlinear Denoising
2026年04月28日大模型OCR选型认知OCR BenchmarkModel Selection BiasCost-Performance Tradeoff
2026年04月27日说话人验证核心原理Speaker Verificationd-vectorECAPA-TDNN
2026年04月27日GPU核函数语言选型GPU Kernel EngineeringCuTe DSLCUTLASS
2026年04月26日时长控制TTS原理Duration ModelingProsody ControlAutoregressive TTS
2026年04月26日AI研究价值评估困境Research EvaluationPublication BiasPeer Review
2026年04月25日全双工对话建模原理Full-Duplex DialogueTurn-TakingVoice Activity Detection
2026年04月25日流式TTS文本规范化Text NormalizationStreaming TTSInverse Text Normalization
2026年04月24日离散扩散语言模型原理Discrete DiffusionMasked Diffusion Language ModelAbsorbing Diffusion
2026年04月24日跟进ML研究的认知工程Information OverloadResearch TriageSpaced Repetition
2026年04月23日一致性正则化ASR原理Consistency RegularizationUnified ASRTransducer
2026年04月23日流式TTS文本规范化工程Text NormalizationStreaming TTSInverse Text Normalization
2026年04月22日神经编码器伪影检测Neural Audio CodecArtifact DetectionForensic Residual
2026年04月22日AI研究复现危机工程Reproducibility CrisisML EngineeringExperimental Rigor
2026年04月21日扩散SNR偏差校正原理Signal-to-Noise RatioDiffusion Timestep BiasScore Matching
2026年04月21日论文复现危机根治工程Reproducibility CrisisAblation StudyExperimental Rigor
2026年04月20日音频时序定位原理Temporal GroundingAudio Event DetectionCross-modal Alignment
2026年04月20日论文复现危机根因Reproducibility CrisisBenchmark OverfittingEvaluation Validity
2026年04月19日流匹配对齐原理Flow Matching AlignmentReward Gradient BackpropagationTrajectory Optimization
2026年04月19日分布式训练任务编排Distributed Training OrchestrationCluster SchedulingFault Tolerance
2026年04月18日最优传输信号融合Optimal TransportWasserstein BarycenterTime-Frequency Resolution
2026年04月18日分布式训练任务调度Distributed Training OrchestrationJob SchedulingCluster Resource Management
2026年04月17日扩散语音识别原理Masked Diffusion Language ModelDiscrete DiffusionASR Decoding
2026年04月17日Mel尺度跨文化偏差Mel ScalePsychoacousticsCultural Bias
2026年04月16日音频水印对抗原理Audio WatermarkingSemi-FragilePsychoacoustic Masking
2026年04月16日推测解码草稿树工程Speculative DecodingDraft TreeBlock Diffusion
2026年04月15日对抗流模型原理Continuous Normalizing FlowAdversarial TrainingFlow Matching
2026年04月15日代理状态可观测性工程Agent ObservabilityDistributed TracingState Machine Debugging
2026年04月14日过程奖励模型原理Process Reward ModelStep-level SupervisionReasoning Chain
2026年04月13日离散令牌音源分离Discrete Token ModelingSource SeparationConditional Generation
2026年04月13日超算API工程哲学Distributed Training OrchestrationSupercomputer API DesignFault Tolerance
2026年04月12日信息瓶颈原理演进Information BottleneckVariational IBDisentanglement
2026年04月12日Safetensors格式工程哲学SafetensorsModel SerializationMemory-Mapped IO
2026年04月11日归一化层演进原理Layer NormalizationRMS NormalizationBatch Normalization
2026年04月11日GEMM自调优后端工程GEMM AutotuningTorchInductorCuteDSL
2026年04月10日多令牌预测原理Multi-Token PredictionSpeculative DecodingMedusa Heads
2026年04月10日ML从业者认知校准Calibration BiasCapability IllusionBenchmark Overfitting
2026年04月09日编码器-解码器LM原理Encoder-Decoder LMCross-Attention ConditioningSequence-to-Sequence
2026年04月09日torch.compile归一化优化torch.compileLayerNormRMSNorm
2026年04月08日KV缓存压缩原理KV Cache CompressionRoPE Position EncodingAttention Score Estimation
2026年04月08日音效基础模型工程Sound Effect GenerationFoundation ModelFoley Synthesis
2026年04月07日可验证奖励强化学习Verifiable RewardRLVRProcess Reward Model
2026年04月07日LLM技能退化认知机制Cognitive OffloadingSkill AtrophyDesirable Difficulty
2026年04月06日音素可解释说话人验证Phoneme-aware Speaker VerificationInterpretable BiometricsLocal Acoustic Evidence
2026年04月06日音频幻觉攻击评估Hallucination AttackAudio Language Model ReliabilityAdversarial Probing
2026年04月05日潜在空间推理原理Latent Space ReasoningContinuous RepresentationToken-Free Inference
2026年04月05日mRNA模型极低成本训练Biology Foundation ModelCross-Species TransferLow-Budget Training
2026年04月04日编码器-解码器TTS原理Encoder-Decoder TTSText ConditioningPositional Capacity
2026年04月04日大模型训练的MXFP8工程MXFP8MicroscalingMixed Precision Training
2026年04月03日在线知识蒸馏原理Online DistillationKnowledge TransferStudent-Teacher
2026年04月03日MoE专家并行调度工程Expert ParallelismMixture of ExpertsAll-to-All Communication
2026年04月02日波形潜空间扩散TTSwaveform latent diffusionnon-autoregressive TTSlatent space acoustic modeling
2026年04月02日波形隐空间扩散原理waveform latent spacediffusion TTSVAE audio codec
2026年04月02日LLM量化权重工程weight quantizationLLM compression4-bit quantization
2026年04月02日扩散语言模型离散生成Discrete DiffusionMasked Diffusion Language ModelNon-autoregressive TTS
2026年04月02日LLM后训练库工程演进RLHF engineeringPPO training stabilityreward hacking
2026年04月02日声学证据瓶颈原理Audio Evidence BottleneckAcoustic GroundingAudio Language Model
2026年04月02日状态空间模型音频建模State Space ModelMambaSelective Scan
2026年04月02日实时语音增强工程选型Real-time Speech EnhancementNoise SuppressionStreaming Inference
2026年04月02日对话上下文压缩原理Context CompressionAbstractive SummarizationCross-Attention Fusion
2026年04月02日说话人匿名化工程Speaker AnonymizationVoice ConversionStreaming Inference
2026年04月02日视听语音识别融合Audio-Visual Speech RecognitionLip ReadingViseme
2026年04月02日GPU训练吞吐加速工程MXFP8MoE TrainingExpert Parallelism
2026年04月01日熵驱动多样性生成diversity samplingtypicality biasrepulsion in latent space
2026年04月01日说话人分割工程选型speaker diarizationbenchmark methodologystreaming ASR pipeline
2026年03月31日转向检测联合建模turn-taking detectionvoice activity detectionjoint acoustic-linguistic modeling
2026年03月31日基准测试的系统性失效benchmark contaminationevaluation validityLLM judge reliability
2026年03月31日扩散模型声学生成diffusion modelscore matchingstochastic differential equation
2026年03月31日TTS开源生态竞争open-weight TTStime-to-first-audiomultilingual speech synthesis
2026年03月30日注意力机制变体演进Multi-Head AttentionGrouped Query AttentionMulti-head Latent Attention
2026年03月30日设备端语音推理架构on-device inferenceExecuTorchvoice agent pipeline
2026年03月29日混合自回归流匹配TTSautoregressive semantic tokensflow matching acoustic decoderhybrid TTS architecture
2026年03月29日NCCL超时诊断方法论NCCL watchdog timeoutdistributed training debuggingcollective communication
2026年03月29日混合架构音频表示Mambastate space modelaudio representation learning
2026年03月29日DeepSeek预训练加速工程MXFP8 trainingexpert parallelismMoE pretraining
2026年03月27日说话人验证度量学习speaker verificationmetric learningcurriculum learning
2026年03月27日MX浮点格式加速训练MXFP8microscalingmixed precision training
2026年03月26日TTS模型极限压缩model compressionknowledge distillationTTS on-device
2026年03月26日小模型极限压缩哲学model compressionknowledge distillationquantization
2026年03月25日流匹配生成原理flow matchingrectified flowODE
2026年03月25日神经音频编解码器neural audio codecresidual vector quantizationEnCodec
2026年03月25日推测解码加速推理speculative decodingdraft modeltoken verification