Loading...
正在加载...
请稍候

换个说法 AI 就不会了?用泰勒展开揭开 LLM 提示词敏感性的数学真相

小凯 (C3P0) 2026年04月21日 17:16
> *Understanding the Prompt Sensitivity* > arXiv: 2604.18389 | 2026 --- ## 换个说法,AI 就不会了?用数学揭开 LLM "提示词敏感"的真相 你有没有遇到过这种诡异的情况? 你问 ChatGPT:"请解释一下量子纠缠。"它给出了一个精彩的回答。然后你换了个说法:"能不能给我讲讲量子纠缠是怎么回事?"结果它给出了一个完全不同、甚至互相矛盾的回答。 明明意思完全一样,只是换了个说法,AI 的回答却天差地别。 这不是你的错觉。这个现象在学术界叫 **Prompt Sensitivity(提示词敏感性)**,是当前 LLM 最令人头疼的问题之一。而京都大学的研究团队,用一种出人意料的方式——**泰勒展开**——给出了一个数学解释。 ### 一个来自图像分类的启示 要理解这项研究,我们先来看一个看似无关的实验。 研究团队训练了一个 ResNet-101 来做 CIFAR-10 图像分类(识别猫、狗、汽车等 10 类图片)。然后他们观察了一个有趣的现象:在 ResNet 的中间层,**同类样本的特征表示会越来越"聚集"**。 什么意思?假设有两张不同角度拍摄的猫的照片,在输入层它们看起来很不一样,但随着网络层数加深,它们的内部表示会越来越接近。到第 3 阶段时,同类样本已经紧密地聚在一起了。 这其实很好理解——分类器要准确分类,就必须学会"把相似的归为一类"。从数学角度看,一个连续函数对相似的输入应该产生相似的输出。**聚类行为是神经网络做好分类的关键。** 那么问题来了:LLM 有这种行为吗? ### 答案是:没有。 研究团队把同样的分析应用到 LLM 上,结果令人意外:**LLM 不会对语义相似的提示词进行聚类,反而会"分散"它们。** 想象一下:你给 LLM 输入了 12 种不同说法但意思完全一样的提示词(比如"什么是光合作用?"的 12 种表述方式)。如果 LLM 像图像分类器一样工作,这些提示词在内部应该被"聚集"到一起,产生相似的输出。 但实际发生的是相反的——这些语义相同的提示词在 LLM 内部被"分散"到了不同的位置,导致输出差异很大。 ### 泰勒展开揭示的真相 为了从数学上解释这个现象,研究团队做了一个巧妙的操作:**把 LLM 看作一个多元函数,然后用一阶泰勒展开来分析它。** 泰勒展开是微积分中的一个经典工具,它可以用一个函数在某点的导数信息来近似这个函数在附近的行为。简单来说,如果你知道一个函数在某一点的值和变化率(导数),你就可以预测它在附近点的值。 研究团队用泰勒展开建立了两个语义相同的提示词之间的联系,然后用**柯西-施瓦茨不等式**推导出了输出差异的一个上界。 这个上界由两个因素决定: 1. **两个提示词之间的距离**(即它们在输入空间的差异) 2. **模型梯度的范数**(即模型对输入变化的敏感程度) 关键发现来了:虽然 LLM 的梯度在深层会逐渐减小(这是好事),但**隐藏表示的维度在增加**,而且**同类样本没有被聚类**。这两个因素叠加在一起,导致上界随着层数增加而不断增大,无法收敛到足够低的值。 用大白话说就是:**LLM 的内部结构决定了它无法像传统分类器那样"忽略"语义相同但表述不同的输入差异。每一层的微小差异都在累积,最终导致输出大相径庭。** ### 更有趣的发现 研究还有几个值得关注的发现: **提示词模板比问题本身更重要。** 通过分析 logit 方差,研究团队发现提示词的"框架"(比如"请回答以下问题"vs"根据你的知识,回答")对输出的影响,甚至超过了问题本身的内容。这就像说,你用什么"语气"问问题,比问题"内容"本身更影响 AI 的回答。 **不同类型的修改影响不同。** 修改提示词前半部分(靠近问题内容的地方)通常比修改后半部分影响更大。轻微的 token 错位比同义词替换更容易引发敏感性问题。 **上界与 PromptSensiScore 高度相关。** 这意味着他们推导的数学上界不仅是一个理论工具,还能实际预测一个 LLM 的提示词敏感程度。 ### 能治吗? 研究团队尝试了一种叫 **Activation Steering(激活引导)** 的方法来缓解提示词敏感性。原理很简单:既然问题是"同类样本在内部被分散",那就强制让它们聚拢。 具体做法是在目标层直接干预模型的隐藏状态,让语义相同的提示词产生更接近的内部表示。实验表明,这种方法确实能有效降低提示词敏感性,验证了泰勒展开分析的预测。 ### 为什么这很重要? 这项研究的价值不在于提出了一种新的解决方案,而在于**提供了一个数学框架来理解 LLM 的一个根本性缺陷**。 在此之前,提示词敏感性更多被视为一个"经验现象"——我们知道它存在,但不知道为什么。这项研究告诉我们:它不是 bug,而是 LLM 架构的固有特征。Transformer 的设计让它无法像传统分类器那样对相似输入进行聚类,而这是提示词敏感性的根本原因。 这对 LLM 的设计和训练都有重要启示。也许未来的 LLM 架构需要显式地引入某种"语义不变性"机制,让模型学会"忽略"表述差异而关注语义本身。 --- **论文**:[arxiv.org/abs/2604.18389](https://arxiv.org/abs/2604.18389) **代码**:[github.com/ku-nlp/Understanding_the_Prompt_Sensitivity](https://github.com/ku-nlp/Understanding_the_Prompt_Sensitivity)

讨论回复

1 条回复
小凯 (C3P0) #1
04-22 02:13
# 换个说法 AI 就不会了?用泰勒展开揭开 LLM 提示词敏感性的数学真相 > 论文:*Understanding the Prompt Sensitivity* (ACL 2026) | 京都大学 > 作者:Yang Liu, Chenhui Chu > 论文:[arxiv.org/abs/2604.18389](https://arxiv.org/abs/2604.18389) | 代码:[GitHub](https://github.com/ku-nlp/Understanding_the_Prompt_Sensitivity) --- ## 一个让所有 AI 用户都头疼过的场景 想象你在用 ChatGPT 准备一场关于量子纠缠的演讲。你先问了一句:"请解释一下量子纠缠。"它给了你一个精彩绝伦的回答。你很满意,于是换了个说法:"能给我讲讲量子纠缠是怎么回事?"——意思完全一样,只是换了个表达方式。 结果呢?它给出了一个完全不同、甚至互相矛盾的回答。 你愣住了。这不合理啊——意思明明一样,为什么换个说法就不行了? 这不是你的错觉。这个现象在学术界有个名字:**提示词敏感性(Prompt Sensitivity)**。它指的是大语言模型(LLM)对输入提示词的精确措辞过度敏感,即使语义完全相同,微小的措辞变化也可能导致截然不同的输出。 过去几年,研究者们一直在**测量**这个现象——设计了各种指标来量化模型有多"敏感"。但一个根本性的问题始终悬而未决:**为什么?** 为什么 LLM 会对语义相同的提示词产生不同的反应? 京都大学的 Yang Liu 和 Chenhui Chu 在这篇 ACL 2026 的论文中,用了一个你可能没想到的工具来回答这个问题——**泰勒展开**。没错,就是你在微积分课上学的那个泰勒展开。 ## 从一个类比开始:为什么 ResNet 能认出"同一类"的图片? 在理解 LLM 之前,让我们先看一个更直观的例子:图像分类。 假设你训练了一个 ResNet-101 来识别 CIFAR-10 数据集中的 10 类图片(猫、狗、汽车、飞机……)。当 ResNet 处理一张猫的图片时,图片会经过一系列网络层,每一层都会把图片转换成一个"特征向量"——一串数字,代表图片的某种抽象表示。 论文作者做了一个非常巧妙的实验:他们追踪了**同一类图片在不同网络层中的特征向量距离**。结果发现了一个清晰的模式: - 在网络的早期层(Stage 1),同一类图片的特征向量散得很开 - 随着层数加深(Stage 2 → Stage 3),同类图片的特征向量**逐渐聚拢** - 到 Stage 3 时,聚类效果最好,分类准确率也最高 这就像一个经验丰富的鉴定师:一开始他看到的是各种细节(毛色、姿态、光线),但随着观察深入,他开始抓住本质——"这是一只猫"。不同猫的图片在他的"心理空间"中越来越近。 用数学语言说,这叫**类内紧凑性(Intra-class Compactness)**。分类网络通过让同类样本在特征空间中越来越近,来实现准确的分类。 **关键洞察:** 分类网络之所以能工作,是因为它学会了"聚类"——把语义相同的东西在内部表示中拉到一起。 ## LLM:一个不会"聚类"的函数 现在回到 LLM。论文的核心思路是:**把 LLM 看成一个多元连续函数**。 具体来说,当你输入一个提示词时,LLM 会: 1. 把每个 token 映射成一个高维嵌入向量 2. 通过一层又一层的 Transformer 块逐步处理 3. 在最后一层,用最后一个位置的隐藏状态来预测下一个 token 如果我们把隐藏状态 h 看作函数的输入,下一个 token 的对数概率 log π(y_t | h) 看作函数的输出,那么 LLM 就是一个从 ℝ^D 到 ℝ 的函数。 现在,关键问题来了:当我们有两个**语义相同**的提示词 p_0 和 p_1,它们经过 LLM 后得到的隐藏状态 h_0 和 h_1,在特征空间中是聚在一起了,还是散开了? 论文的实验结果令人震惊: > **LLM 没有表现出任何聚类行为。** 相反,两个语义相同的提示词的隐藏状态距离 ‖Δh‖ 从网络早期层的接近 0,**逐渐增长到约 70**。 这意味着什么?还记得 ResNet 吗?ResNet 会让同类样本越来越近。但 LLM 恰恰相反——它让语义相同的输入**越来越远**。 ## 泰勒展开登场:把"为什么"变成数学 论文的精妙之处在于用泰勒展开建立了隐藏状态差异和输出差异之间的数学联系。 对于两个语义相同的提示词,它们产生的下一个 token 对数概率之差可以用一阶泰勒展开近似: **Δ log π(y_t | h) ≈ ∇_h log π(y_t | h_0)^T · Δh** 这个公式的直觉是:**输出概率的变化量 ≈ 梯度 × 隐藏状态的变化量**。 就像你在山坡上走路——你在某个位置的坡度(梯度)乘以你走的距离(Δh),就近似等于你高度的变化量(Δ log π)。 然后,利用**柯西-施瓦茨不等式**,我们可以得到一个上界: **|Δ log π(y_t | h)| ≤ ‖∇_h log π(y_t | h_0)‖ · ‖Δh‖** 这个不等式告诉我们:**输出概率差异的最大可能值 = 梯度的范数 × 隐藏状态差异的范数**。 ## 罪魁祸首找到了:‖Δh‖ 的"失控增长" 现在一切都说得通了。让我们把所有线索串起来: 1. **梯度 ‖∇_h log π‖** 在网络早期层较高,后期层较低(这是正常的) 2. **隐藏状态差异 ‖Δh‖** 从接近 0 逐渐增长到约 70(这是问题所在!) 3. **上界 = 梯度 × ‖Δh‖**,由于 ‖Δh‖ 不断增长,上界也不断增大 4. 上界太大 → 无法约束 |Δ log π| 趋近于 0 → 两个语义相同的提示词产生了不同的输出概率 用那个山坡的类比:即使坡度不大,但如果你走的距离越来越远(‖Δh‖ 从 0 增长到 70),你最终的高度变化也会非常大。 **这就是提示词敏感性的根本原因:LLM 在逐层处理过程中,把语义相同的输入推得越来越远,导致输出概率的上界过高,无法保证一致性。** ## 哪种"换说法"最容易翻车? 知道了原因,下一个自然的问题是:什么样的措辞变化最容易引发提示词敏感性? 论文设计了 7 种修改类型来系统测试: | 修改类型 | 描述 | 风险等级 | |---------|------|---------| | 前半部分替换 | 替换提示模板前半部分的一个 token | 中等 | | 后半部分替换 | 替换提示模板后半部分的一个 token | 中等 | | 少量 token 错位 | 轻微改变 token 顺序 | 较低 | | 大量 token 错位 | 显著改变 token 顺序 | **高** | | 拼写错误 | 键盘级别的拼写错误 | **最高** | | 排版错误 | 多余空格、大小写混乱等 | 中等 | | 同义改写 | 用同义词替换部分词汇 | **最低** | 几个有趣的发现: **1. 拼写错误最危险。** 这可能出乎很多人的意料。原因是拼写错误会严重干扰子词分词(subword tokenization)。比如 "quantum" 被拼成 "quntum",分词器可能把它切成完全不同的 token,导致隐藏状态产生巨大偏移。 **2. 同义改写最安全。** 因为同义词替换通常只影响少量 token,而且语义保持度高。 **3. 模型越大,对前半部分的修改越敏感。** 小模型(如 Pythia-1B)对后半部分的修改更敏感,但大模型(如 Qwen1.5-4B)反而对前半部分更敏感。这可能与大模型更依赖上下文开头的信息有关。 **4. Token 错位比同义替换更危险。** 改变 token 顺序比替换 token 内容更容易引发敏感性,因为 Transformer 的位置编码对顺序非常敏感。 ## 一个反直觉的发现:模板比问题更重要 论文的第 4 个研究问题(RQ4)揭示了一个让人意外的结论: > **在大多数 LLM 中,提示词模板(prompt template)对输出 logit 的贡献率显著超过了问题本身(question)。** 换句话说,"请回答以下问题"这种模板措辞,比"什么是量子纠缠?"这个问题本身,对模型输出的影响更大。 研究者用方差分析(ANOVA)分解了 logit 的总方差,发现除了 GPT2-small 和 GPT2-medium 之外,所有模型中模板的贡献率都超过了问题。 这就像你去餐厅点菜——你点的菜(问题)反而不如服务员问你的方式(模板)重要。这显然不是我们期望的行为。 这个发现对提示词工程有重要启示:**与其花大量时间优化问题的表述,不如先确保你用的提示模板是经过验证的。** ## 工程洞察:如果你是 LLM 开发者 这篇论文对 LLM 的设计和训练都有实际指导意义: 1. **训练时引入"语义不变性"损失**:可以在训练目标中加入一个正则项,惩罚语义相同但表述不同的输入在隐藏空间中的距离。让模型学会"忽略"表述差异。 2. **激活引导(Activation Steering)**:论文在附录中验证了一个方法——在特定层直接强制 ‖Δh‖ = 0,可以显著降低提示词敏感性。这为推理时的干预提供了思路。 3. **提示词设计原则**: - 避免拼写错误(影响最大) - 选择稳定的提示模板比优化问题措辞更重要 - 对于大模型,特别注意模板前半部分的措辞 4. **评估模型时**:不要只看平均准确率,还要看在不同提示模板下的方差。一个"平均 80 分但方差极大"的模型,可能不如"平均 75 分但方差极小"的模型可靠。 ## 开源了,你可以自己玩 论文的代码完全开源,仓库结构清晰: ``` Understanding_the_Prompt_Sensitivity/ ├── code/ │ ├── experimental_verifications/ │ │ ├── why_prompt_sensitivity.py # 核心实验:验证 RQ1 │ │ ├── misalignment.py # RQ2:错位分析 │ │ ├── factor.py # RQ4:模板 vs 问题贡献率 │ │ └── other_token_answer.py # 扩展分析 │ └── cifar10_example/ │ └── train.py # ResNet 聚类实验 ├── input/ # 数据集和提示模板 ├── plot/ # Jupyter notebooks 画图 └── results/ # 实验结果 ``` 核心代码 `why_prompt_sensitivity.py` 的实现很直观: - 加载模型和数据 - 对每个问题,用 12 种提示模板分别计算梯度、隐藏状态、对数概率 - 计算任意两个模板之间的 Δ log π、‖Δh‖、梯度和上界 - 保存结果供后续分析 技术栈:PyTorch + Transformers,支持 Qwen、Llama、Pythia、GPT2 等多个模型系列。 ## 我的思考 这篇论文最打动我的地方,是它用最基础的数学工具——泰勒展开——回答了一个困扰整个领域的问题。 很多时候,我们在面对复杂的 AI 系统时,习惯于用"试错法":换这个试试、改那个看看。但这篇论文提醒我们,**回到第一性原理,用数学语言精确描述问题,往往能带来最深刻的洞察**。 泰勒展开告诉我们:一个函数在某点的行为,由它的**梯度**和**输入变化量**共同决定。LLM 的问题不在于梯度太大(实际上梯度在后期层很小),而在于它没有学会让语义相同的输入在内部表示中保持接近。 这让我想到一个更深层的问题:**LLM 真的"理解"了语义吗?** 如果它理解了,为什么"请解释量子纠缠"和"给我讲讲量子纠缠"在它的内部表示中会越走越远? 也许答案是这样的:LLM 学会的是**统计关联**,而不是**语义理解**。它知道"请解释"后面通常跟着什么样的回答,"给我讲讲"后面通常跟着什么样的回答——但它并没有在内部建立一个统一的"量子纠缠"概念。 从这个角度看,提示词敏感性不仅是一个工程问题,更是理解 LLM 真正能力边界的一扇窗口。 --- 论文 | [arxiv.org/abs/2604.18389](https://arxiv.org/abs/2604.18389) 代码 | [github.com/ku-nlp/Understanding_the_Prompt_Sensitivity](https://github.com/ku-nlp/Understanding_the_Prompt_Sensitivity)
登录