# 6.5 离散对抗攻击与模型鲁棒性

对抗样本（Adversarial Examples）是机器学习安全的经典话题，其在 LLM 领域呈现出独特的形式和挑战。

## 6.5.1 对抗样本基础

对抗样本是指经过精心设计的输入，对人类来说与正常输入无异，但会导致模型产生错误或意外的输出。

**传统对抗样本**

{% @mermaid/diagram content="graph LR
A\["正常输入"] --> B\["模型"]
B --> C\["正确输出"]

```
D["正常输入 + 微小扰动"] --> E["模型"]
E --> F["错误输出"]" %}
```

图 6-15：对抗样本基础流程图

在图像识别中，对抗样本表现为：添加人眼不可见的噪声，使熊猫图片被识别为长臂猿。

**LLM 对抗样本特点** LLM 的对抗样本主要体现在文本层面，形式包括：

| 类型        | 描述            | 示例                        |
| --------- | ------------- | ------------------------- |
| 字符级扰动     | 插入/替换/删除字符    | “how to mаke” (使用西里尔字母 а) |
| Token 级扰动 | 构造特定 Token 序列 | 无意义但有效的后缀                 |
| 语义级扰动     | 改变表达但保持意图     | 各种同义改写                    |

## 6.5.2 GCG 攻击：梯度引导的对抗后缀

Greedy Coordinate Gradient（GCG）攻击是一种经典的 LLM 对抗攻击方法。

**核心难点与基本原理：离散空间的梯度搜索** 在图像识别领域，像素值是连续的，可以通过反向传播直接计算出对抗噪声片段（如 FGSM 算法）。但大语言模型的输入是 **离散的 Token ID**，无法直接应用微弱的“连续噪声”。

GCG 的核心创新是将连续的梯度引导搜索近似到离散空间：

1. **One-Hot 代理表示**：将输入的对抗后缀序列表示为一个 One-Hot 向量矩阵。
2. **计算目标前缀的对数似然梯度**：向前传递完整的“系统提示 + 恶意请求 + 对抗后缀组合”，并在模型输出端计算目标性肯定前缀（如 `Sure, here is ...`）的序列负对数似然损失，然后反向传播。
3. **泰勒展开近似评估（投影）**：在输入嵌入层（Embedding Layer），获取相对于当前对抗后缀 One-Hot 矩阵的损失梯度。由于穷举所有可能的 Token 替换计算代价极高（词表大小 $|V|$ $\approx$ 32000 到 100000），GCG 利用梯度的一阶泰勒展开，快速近似评估出哪些备选 Token 如果替换在当前位置，最能大幅度降低目标损失。
4. **贪心坐标下降（Coordinate Descent）**：在每次迭代中，随机挑选后缀序列中的几个位置，从上一步评估出的候选 Top-K Token 中随机选择组合进行真实前向传播验证，保留最优结果进入下一轮。

{% @mermaid/diagram content="flowchart TB
A\["恶意请求 + 初始随机后缀"] --> B\["反向传播计算 Embedding 梯度"]
B --> C\["一阶近似（Top-K 候选 Token 评估）"]
C --> D\["随机批量采样替换组合"]
D --> E\["前向传播计算真实 Loss"]
E --> |未收敛| B
E --> |达到阈值| F\["有效的对抗性后缀"]" %}

图 6-16：GCG 攻击：梯度引导的对抗后缀流程图

**攻击效果与迁移性** 研究表明，通过 GCG 方法生成的对抗性后缀在部分设置下可以显著提高越狱成功率，而且原始论文还观察到了对若干黑盒公开模型的迁移现象。但更稳妥的结论是：**GCG 的迁移效果高度依赖训练模型、提示集合、目标模型、judge 和评测协议**。后续更严格的 benchmark 也显示，其在一些强模型和不同评测口径下的表现会明显下降。

因此，GCG 更适合被理解为一条重要的白盒对抗后缀路线，而不是“对所有模型稳定有效”的通用越狱方法。

## 6.5.3 AutoDAN：语义化的遗传算法攻击

AutoDAN 代表了另一条路线：不再追求乱码式后缀，而是通过遗传算法自动生成 **更自然、更隐蔽** 的 jailbreak prompt。它确实对基于困惑度的防御有启发意义，但不应被简化为“专门为绕过困惑度过滤而出现”。

**核心机制**

* **进化策略**：以分层遗传算法（hierarchical genetic algorithm）为核心，通过种群进化生成更自然、更隐蔽的越狱提示。
* **种群进化**：从原型 jailbreak prompt 出发作为初始种群，进行变异（同义词替换、句式重组）和交叉。
* **适应度评估**：围绕关键词拒答信号、recheck 机制、roulette selection、多点 crossover 和 momentum word scoring 等设计，自动演化出语义连贯的攻击 Prompt。

**特点**

* 生成的 Prompt 是自然语言，隐蔽性强。
* 难以通过简单的统计特征防御。

## 6.5.4 鲁棒性评估

评估 LLM 对对抗攻击的鲁棒性是安全评估的重要组成部分。

**评估维度**

{% @mermaid/diagram content="mindmap
root((鲁棒性评估))
输入扰动
字符级
Token 级
语义级
攻击强度
白盒攻击
黑盒攻击
迁移攻击
评估指标
攻击成功率
需要扰动量
生成质量" %}

图 6-17：鲁棒性评估思维导图

**主要评估指标**

| 指标            | 描述                   |
| ------------- | -------------------- |
| 攻击成功率         | 对抗样本导致目标行为的比例        |
| 查询 / Token 成本 | 达到成功攻击所需的查询量或搜索开销    |
| 迁移成功率         | 跨模型攻击的成功率            |
| 防御绕过率         | 绕过特定防御措施的成功率         |
| 隐蔽性 / 可检测性    | 攻击是否容易被困惑度、规则或人工审核发现 |

## 6.5.5 提升鲁棒性的方法

**对抗训练** 在训练过程中加入对抗样本，使模型学会抵抗此类攻击：

{% @mermaid/diagram content="flowchart LR
A\["正常训练数据"] --> C\["模型训练"]
B\["对抗样本"] --> C
C --> D\["更鲁棒的模型"]" %}

图 6-18：提升鲁棒性的方法流程图

**输入净化** 在输入到达模型前进行预处理，去除可能的对抗性扰动：

* 字符规范化
* Token 过滤
* 语义保持的改写

**集成防御** 使用多个模型集成，降低单一对抗样本的成功率。

**认证鲁棒性（Certified Robustness）在 NLP 中的困境** 所谓认证鲁棒性，是指提供一种数学上的证明：在某个给定的输入扰动半径内，模型必定不会改变预测结果或输出恶意内容（例如图像视觉领域的 Randomized Smoothing 技术）。 但在开放式生成模型和自然语言生成场景中，这仍然是一个开放挑战：

* **无意义的 L-p 范数**：在文本空间中，由于 Token 嵌入分布的不均匀，即使在嵌入空间计算具有极小 $L\_2$ 距离的扰动，反映到离散文本上也可能产生句法崩塌或语义完全反转的输出。
* **语义不变性难以定义**：一段文本的“语义不变性”无法用简单的数学范数界定。同一句话即使换几个同义词，对人类理解相同，却可能触发模型完全不同的注意力分布。
* **上下文爆炸**：自回归生成在极长的步数下，微小的局部扰动极易引发蝴蝶效应。因此，当前已有一些文本分类/NLI 任务上的认证鲁棒性工作，但对于开放式生成、长上下文和安全拒答行为，成熟的认证框架仍然不足。

## 6.5.6 对抗性与安全对齐

对抗样本与安全对齐的关系：

**对齐的脆弱性** 安全对齐通过训练使模型学会拒绝有害请求，但这种学习可能被对抗性输入绕过。对齐更多是让模型学会了特定的拒绝模式，而非真正理解什么是有害的。

**对抗性评估** 对抗样本可作为评估对齐效果的工具：

* 如果简单的对抗样本就能绕过对齐，说明对齐不够鲁棒
* 对抗性评估帮助发现对齐的薄弱点

**鲁棒对齐** 追求对对抗性攻击也有效的安全对齐：

```
目标：即使面对精心设计的对抗性输入，
模型也能保持安全行为
```

## 6.5.7 对抗与防御的军备竞赛

对抗样本领域呈现出典型的攻防军备竞赛特征：

{% @mermaid/diagram content="flowchart TB
A\["新的对抗攻击"] --> B\["防御措施研发"]
B --> C\["自适应攻击"]
C --> D\["增强防御"]
D --> A" %}

图 6-19：对抗与防御的军备竞赛流程图

**发展趋势**

* 攻击方法越来越自动化和高效
* 防御需要在多个层面部署
* 完全的鲁棒性可能无法实现
* 实用防御需要在鲁棒性和成本之间权衡

## 6.5.8 与其他章节的边界

对抗鲁棒性章节主要关注 **输入扰动、离散对抗后缀、可迁移性与模型层防御**。像推理链破坏、自反馈循环、长上下文注入和工具链注入等方向确实相关，但它们分别会在推理模型安全、长上下文安全和智能体/工具调用章节中展开。因此，本节到这里为止，重点应停留在“对抗输入如何扰乱模型决策”这一主线。

## 6.5.9 实践建议

**对于安全评估**

1. 将对抗性测试纳入安全评估流程
2. 使用自动化工具生成对抗样本
3. 关注跨模型的迁移攻击
4. 持续跟踪新的攻击技术

**对于防御部署**

1. 实施输入预处理和规范化
2. 部署多层防御机制
3. 监控异常输入模式
4. 保持模型和防御措施的更新

对抗样本和模型鲁棒性是 LLM 安全的重要组成部分。虽然完美的鲁棒性难以实现，但通过系统性的评估和防御措施，可以显著提高安全水平。


---

# 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.5_adversarial_robustness.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.
