原文课程: Lecture 14 — Private ML and Stats: Modern ML (Gautam Kamath, CS 860, Fall 2020)
上一讲我们讨论了凸优化场景下的 DP-ERM。但现代机器学习(特别是深度学习)面临两个挑战:
- 非凸性:神经网络的损失函数不是凸的
- 大规模:模型可能有数百万甚至数十亿参数
今天我们介绍两种在实践中行之有效的方法:DP-SGD和PATE。
1. 为什么神经网络特殊?
神经网络的结构
一个多层感知机(MLP)由多个层组成:
v⁰ = x (输入) v¹ = f¹(W¹·v⁰ + b¹) (第一层) v² = f²(W²·v¹ + b²) (第二层) ... o = W^L·v^{L-1} + b^L (输出层) ŷ = softmax(o) (预测)其中 W 是权重矩阵,b 是偏置,f 是非线性激活函数(如 ReLU、sigmoid、tanh)。
与凸优化模型的区别
| 特性 | 凸模型(如逻辑回归) | 神经网络 |
|---|---|---|
| 损失函数形状 | 凸函数 → 唯一最优解 | 非凸 → 多个局部最优 |
| 优化方法 | 梯度下降保证收敛 | SGD 配合各种 trick |
| 参数规模 | 与特征数相当 | 可能上亿 |
| 敏感性分析 | 简单 | 复杂(每层梯度不同) |
graph TD subgraph "凸函数" A["🍚 唯一最小值"] end subgraph "非凸函数(神经网络)" B["🏔️ 多个局部最小值"] C["🏔️ 鞍点"] D["🏔️ 全局最小值(可能难找到)"] end2. DP-SGD:差分隐私随机梯度下降
DP-SGD(Abadi et al., 2016)是应用最广泛的差分隐私深度学习算法。它基于我们上一讲提到的梯度扰动思路,但针对深度学习做了关键调整。
算法流程
# 差分隐私 SGD 核心步骤 for t in range(T): # 1. 随机选取一批样本 batch = random_sample(D, batch_size) # 2. 计算每个样本的梯度(按样本!不是按批次平均) gradients = [] for x, y in batch: g = compute_gradient(loss, θ, x, y) gradients.append(g) # 3. 梯度裁剪:每个梯度单独裁剪 clipped = [clip(g, C) for g in gradients] # 4. 加噪声到平均梯度 avg_gradient = mean(clipped) + Gaussian(0, σ²) # 5. 更新参数 θ = θ - η * avg_gradient三个关键设计
flowchart TD A["批次中的样本"] --> B["步骤1: 每样本计算梯度"] B --> C["步骤2: 梯度裁剪每样本梯度范数 ≤ C"] C --> D["步骤3: 平均+加噪"] D --> E["输出:差分隐私梯度"](1)每样本梯度计算(Per-Example Gradient)
传统的 SGD 计算的是批次平均梯度。DP-SGD 需要每个样本的梯度——这样我们才能裁剪每个样本。
这个步骤是计算瓶颈(需要反向传播 batch_size 次),但学术界已经提出了多种加速方法。
(2)梯度裁剪
def clip(g, C): g_norm = ‖g‖₂ return g · min(1, C / g_norm) # 范数超过C则缩放到C为什么裁剪?为了控制敏感性。裁剪后:
- 每个样本对平均梯度的影响 ≤ C/batch_size
- 敏感性 = C/batch_size
(3)噪声添加
添加高斯噪声到裁剪后的平均梯度:
G̃ = (1/B) · Σ clip(gᵢ, C) + N(0, σ²·I)其中:
- B 是批次大小
- σ 根据隐私预算 ε 和 δ 选择
3. DP-SGD 的隐私分析
DP-SGD 的隐私成本来自所有迭代的总和。
graph LR A["第1步: (ε₀,δ₀)-DP"] --> B["第2步: (ε₀,δ₀)-DP"] B --> C["..."] C --> D["第T步: (ε₀,δ₀)-DP"] D --> E["总隐私:(ε·√(2T·log(1/δ)), T·δ₀+δ)-DP"]使用高级组合定理和矩会计师(Moments Accountant),Abadi 等人证明:
对于 T 次迭代,每次使用高斯噪声 σ,总隐私 ≈ O(q·ε·√T)
其中 q = 批次大小 / 数据集大小(采样率)
重要发现
| 因素 | 对隐私的影响 |
|---|---|
| 迭代次数 T | √T 增长(次线性 ✅) |
| 批次大小 B | 线性增加(大批次 → 更多隐私损耗) |
| 采样率 q = B/n | 小采样率 → 隐私更好(神秘的正效应) |
| 梯度裁剪阈值 C | 越大 → 噪声越多 |
4. PATE:教师集成私有聚合
PATE(Private Aggregation of Teacher Ensembles, Papernot et al., 2017)采取了完全不同的思路。
核心思想
用多个"教师"模型投票,然后用噪声使投票结果满足差分隐私。
flowchart TD subgraph "敏感数据" A["数据集 D(含隐私)"] end subgraph "训练阶段(在敏感数据上)" B["教师模型 1"] --> D["对预测投票"] C["教师模型 2"] --> D A --> B A --> C D --> E["加噪投票(拉普拉斯/高斯)"] end subgraph "部署阶段(在公开数据上)" E --> F["学生模型"] F --> G["公开预测"] end工作流程
- 分割数据:将敏感数据集 D 分成 k 个互不相交的子集
- 训练教师:每个子集上独立训练一个教师模型
- 私有投票:对于查询 x,收集所有教师模型的预测,然后对预测分布添加噪声
- 训练学生:使用加噪投票的结果(在非敏感数据上)训练学生模型
PATE 的隐私优势
| 特性 | 说明 |
|---|---|
| 教师分歧 | 如果教师们的意见一致,需要的噪声较小 |
| 学生是公有的 | 学生只看到加噪后的标签,不接触原始数据 |
| 基于敏感度分析 | 教师投票数越集中,隐私越强 |
5. DP-SGD vs PATE
| 对比维度 | DP-SGD | PATE |
|---|---|---|
| 适用模型 | 任何可微模型 | 分类模型 |
| 训练方式 | 端到端差分隐私训练 | 先用数据训练教师,再 distillation |
| 隐私分析 | 精确的矩会计师 | 基于教师分歧分析 |
| 模型质量 | 较好(对大型模型) | 一般(受限于教师数量) |
| 计算开销 | 高(每样本梯度) | 中(需要训练多个教师) |
| 典型应用 | 大语言模型、图像分类 | 小样本、迁移学习场景 |
6. 实际应用中的挑战
挑战一:隐私预算 vs 模型质量
graph LR A["更严格的隐私 (ε很小)"] --> B["噪声更大"] B --> C["模型质量下降"] D["更宽松的隐私 (ε较大)"] --> E["噪声更小"] E --> F["模型质量更好"]实际部署中,ε 通常在1-10之间,需要在隐私和效用之间仔细权衡。
挑战二:微调(Fine-tuning)的隐私
大语言模型的隐私训练面临着计算挑战:
| 模型规模 | 每样本梯度计算 | 隐私微调方案 |
|---|---|---|
| 小型(1M 参数) | 可行 | 全参数 DP-SGD |
| 中型(100M 参数) | 计算密集 | DP-LoRA(低秩适配) |
| 大型(10B+ 参数) | 极困难 | 仅微调部分参数 + DP |
挑战三:超参数选择
DP-SGD 有很多超参数需要调整:
- 裁剪阈值 C
- 噪声规模 σ
- 学习率 η
- 批次大小 B
- 迭代次数 T
而这些调整本身也可能导致额外的隐私成本(因为你是"看着数据"调参的)。
小结
| 概念 | 要点 |
|---|---|
| DP-SGD | 梯度裁剪 + 加噪,每步消耗隐私预算 |
| PATE | 教师集成 + 私有投票 + 学生蒸馏 |
| 梯度裁剪 | 控制单样本对梯度的影响 ≤ C |
| 矩会计师 | DP-SGD 的精确隐私分析工具 |
| 隐私-效用权衡 | ε 在 1-10 之间平衡 |
| 主要挑战 | 计算开销、超参数选择、大规模模型 |
DP-SGD 已经成为了差分隐私深度学习的事实标准。OpenAI、Google、Apple 等公司都在其产品中使用 DP-SGD 的变体来保护用户数据。
下一讲,我们将回到统计学的核心问题——均值估计,看看 DP 如何影响这个最基本的统计问题。
下一篇: 私有均值估计:最简单的统计问题