# 6.1 训练数据投毒

训练数据投毒是指攻击者通过在训练数据中注入恶意样本，影响模型学习过程，使训练后的模型产生预期之外的行为。

## 6.1.1 投毒攻击原理

LLM 的能力来源于其训练数据。如果训练数据被污染，模型学到的知识和行为模式也会受到影响。

**攻击流程**

```mermaid
flowchart LR
    A["攻击者准备<br/>恶意数据"] --> B["数据注入<br/>训练集/数据源"]
    B --> C["受污染数据<br/>参与训练"]
    C --> D["模型习得<br/>恶意模式"]
    D --> E["推理时<br/>表现异常"]
```

图 6-1：投毒攻击原理流程图

**内在机制：梯度层面的投毒** 大语言模型的训练本质上是通过反向传播优化参数，以最小化预测下一个 Token 的损失（Loss）。 当模型在训练批次（Batch）中遇到投毒样本时：

1. **异常梯度产生**：投毒样本包含异常的输入-输出配对（如正常问题对应恶意答案），导致当前模型预测误差极大，从而产生一个方向偏离正常分布的 **大幅度梯度向量**。
2. **权重更新被牵引**：即使投毒数据占比极低，如果多次出现或在微调（学习率较高或数据量较小）阶段出现，这些异常梯度也会强行将模型的权重（Loss Landscape 上的最低点）牵引到一个“局部次优解”。
3. **恶意模式固化**：在这个次优解下，模型对普遍的正常输入仍然保持较低的损失，但在遇到特定模式（或触发器）时，会按照投毒设定的高概率输出恶意内容。

**与其他攻击的区别**

| 特征   | 数据投毒  | 提示注入 | 越狱攻击 |
| ---- | ----- | ---- | ---- |
| 攻击时机 | 训练阶段  | 推理阶段 | 推理阶段 |
| 持久性  | 永久嵌入  | 单次会话 | 单次会话 |
| 检测难度 | 极高    | 中等   | 中等   |
| 修复难度 | 需重新训练 | 输入过滤 | 对齐强化 |

## 6.1.2 投毒攻击类型

**可用性攻击** 降低模型的整体性能，使其无法正常工作。

```
目标：使模型在特定任务上表现变差
方法：注入大量错误标注的样本
效果：模型准确率下降
```

**靶向攻击** 使模型在特定输入上产生错误输出，同时保持其他场景的正常表现。

```
目标：让模型把“竞争对手 A”评价为负面
方法：注入错误关联
  - “竞争对手 A” + 负面评价 × 多次
效果：模型对 A 产生偏见，但其他正常
```

**后门攻击** 植入隐藏的触发机制，在特定条件下激活（详见 6.2 节）。

## 6.1.3 投毒向量

攻击者可以通过多种途径将恶意数据注入训练流程：

**公开数据投毒**

```mermaid
flowchart TB
    A["攻击者"] --> B["公开数据源<br/>百科/论坛/社交媒体"]
    B --> C["数据爬取"]
    C --> D["训练数据集"]
    D --> E["模型训练"]
```

图 6-2：投毒向量流程图

* 在维基百科等平台发布错误信息
* 在论坛、问答社区等平台发布诱导内容
* 创建包含恶意内容的网站

**供应链投毒**

* 污染公开的预训练数据集
* 在模型/数据集托管平台发布被污染的模型或数据集
* 攻击数据处理流水线

**内部人员攻击** 具有数据访问权限的内部人员直接修改训练数据。

## 6.1.4 LLM 投毒的特殊性

LLM 的训练规模使投毒攻击具有独特特点：

**海量数据中隐藏**

* 预训练数据通常有数万亿 Token
* 人工审核几乎不可能
* 恶意内容容易“隐藏”在海量数据中，导致投毒的信噪比计算对防守方极其不利。

**长尾效应与过参数化（Over-parameterization）**

* 现代 LLM 拥有极其庞大的参数量（数十亿到万亿级别），这赋予了模型极强的 **拟合能力（Memorization）**。
* 理论研究表明，过参数化网络倾向于“记住”训练集中的长尾（Long-tail）和罕见分布特征，即使该模式只出现过个位数次。
* 攻击者正是利用这种对罕见特征的强记忆力，只需注入极少量的恶意样本（如占比小于 $10^{-5}$），就足以在模型庞大的参数空间中刻下不可磨灭的印记。

**重要说明**：上述关于 $10^{-5}$ 级别投毒比例的结论来自特定的实验设置（特定的模型规模、数据集和攻击方法），不应作为通用结论过度推广。实际投毒效果取决于多个关键因素：

* **模型参数量**：较小的模型可能对投毒更敏感，但其记忆能力也较弱
* **训练数据总量**：预训练数据越多，相对投毒比例通常需要更高才能产生显著效果
* **投毒样本特征**：投毒数据与目标任务的相关性越高，所需比例越低
* **训练轮次与学习率**：多轮次迭代或较高的学习率会加强投毒效果
* **微调阶段**：在微调（而非预训练）阶段，即使投毒比例很低，由于数据量和学习率的变化，效果可能显著提升

在大规模预训练场景下，更大的模型可能需要相对更高的投毒比例才能产生可观察的恶意行为。读者若需深入理解具体的投毒有效性，应参考原始研究论文以了解其具体的实验条件、模型设置和数据规模。

**知识难以“遗忘”**

* 一旦模型通过梯度更新学习了某些投毒知识，其权重已经发生了耦合性改变，很难通过简单的后期干预完全移除（灾难性遗忘往往难以精确定向）。
* 即使经过安全微调（RLHF），由于微调通常只调节模型的输出偏好，未能擦除预训练权重中固化的投毒关联，投毒效果仍可能随时被越狱技术再度唤起。

## 6.1.5 投毒检测与防御

**数据质量审核**

```mermaid
flowchart TB
    A["原始数据"] --> B["来源验证"]
    B --> C["内容分析"]
    C --> D["异常检测"]
    D --> E["人工抽检"]
    E --> F["清洁数据"]
```

图 6-3：投毒检测与防御流程图

检测方法：

* 统计异常检测：发现分布异常的样本
* 语义一致性检查：验证内容的逻辑一致性
* 事实核查：对事实性声明进行验证
* 来源信誉评估：评估数据来源的可信度

**训练过程防御**

* 差分隐私训练：限制单个样本的影响
* 鲁棒训练算法：对异常值不敏感的训练方法
* 数据去重与规范化：减少恶意样本的重复影响

**持续监控**

* 模型行为监控：检测行为突变
* 定期评估：使用清洁测试集评估
* 在线检测：监控推理时的异常模式

## 6.1.6 现实中的投毒风险

**供应链风险** 大量组织依赖公开数据集和预训练模型，一旦上游受污染，下游大规模受影响。

**检测困难** 投毒的直接证据难以获取，通常只能通过异常行为间接推断。

**修复成本高** 一旦确认投毒，可能需要：

* 追溯问题数据来源
* 清理数据集
* 重新训练模型（成本极高）

## 6.1.7 偏好数据与奖励模型投毒

前几节关注预训练与微调数据，但 RLHF 的人类偏好数据同样是投毒入口，且因处于对齐环节而危害尤甚。攻击者或恶意标注者通过操纵偏好比较数据，可在奖励模型中植入隐藏的“恶意价值判断”，再借助带触发词的提示在强化学习阶段激活后门。研究显示，这类后门可被用作绕过安全对齐的“通用越狱”：被投毒的奖励模型在普通输入下表现正常，一旦提示中出现特定触发词便切换为有害行为，且后门隐蔽、常规评测难以发现（参见 [对 InstructGPT 的奖励模型后门研究](https://arxiv.org/abs/2304.12298)，以及 [来自被投毒人类反馈的通用越狱后门](https://arxiv.org/abs/2311.14455)）。

防御要点是把偏好数据与标注流程纳入与训练数据同等的安全治理：对标注来源做信誉与多样性管理、对偏好数据做异常与一致性审计、在奖励模型上做触发词与后门扫描，并在对齐完成后用独立红队复核“是否存在仅在特定触发下才出现的行为切换”。

数据投毒是一种高门槛但高影响的攻击。虽然实施难度较大，但其持久性和隐蔽性使其成为需要重点关注的威胁。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://yeasy.gitbook.io/ai_security_guide/di-er-bu-fen-gong-ji-pian/06_data_model_attacks/6.1_data_poisoning.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
