# 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、现代代码模型都会混合这两种训练目标。