# Summary
本质就是完形填空
# Notes
好问题!"去噪"这个名字确实容易让人困惑。让我解释一下:
## 为什么叫"去噪"目标
**核心思路:把"挖掉的词"看作是"噪声"**
### 训练过程的类比
**1. 原始干净数据:**
```Java
"今天天气很好"
```
**2. 人为加入"噪声"(mask掉一些词):**
```Java
"今天<mask><mask>很好" ← 这是"有噪声"的数据
```
**3. 模型的任务是"去噪":**
```Java
去除噪声 → 恢复成 "今天天气很好"
```
### 类比图像去噪
这个概念借鉴自图像处理:
```Java
原图 → 加入噪点 → 训练模型去除噪点 → 恢复原图
```
对应到文本:
```Java
原文 → 加入mask → 训练模型填充mask → 恢复原文
```
## 为什么不直接叫"填空"
因为在机器学习术语里:
- **Denoising(去噪)** 强调的是从损坏的数据中恢复信息的能力
- 这个术语来自 **Denoising Autoencoder**(去噪自编码器)的传统
BERT的全称也体现了这一点:
- **BERT** = Bidirectional Encoder Representations from Transformers
- 训练时用的是 **MLM (Masked Language Modeling)**
- 本质就是一种 **去噪任务** - 从"被mask污染"的句子中恢复原句
所以"去噪"、"填充"、"填空"其实说的都是同一件事,只是角度不同!
# Infilling (填充/填空)
**填补空白** - 就是文中说的"去噪目标"的现代表达方式
**工作方式:**
```Java
输入: "今天<mask><mask>很好"
模型预测: "天气"
输入: "我<mask>喜欢<mask>编程"
模型预测: "很" 和 "写"
- 挖掉中间的一些词,让模型填回去
- BERT用的是这个思路
- **只学习被mask的token**,样本效率较低
- 但能学到更好的双向语义理解
## 为什么现代模型混合使用?
文章指出:**CLM + Infilling 混合训练效果最好**
- CLM:保证基础的生成能力和样本效率
- Infilling:增强理解能力和特定任务(如代码补全)的表现
例如代码模型特别需要填充能力:
```
```python
def calculate_sum(a, b):
# 光标在这里,需要补全中间代码
return result
```
这就是为什么PaLM-2、现代代码模型都会混合这两种训练目标。