From 6b1180928562d1b407d5792ec20aae22cb3f70fd Mon Sep 17 00:00:00 2001 From: haoyuren <13851610112@163.com> Date: Fri, 27 Jun 2025 14:09:07 -0700 Subject: remove EM --- PURE_DEBIASING_GUIDE.md | 192 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 PURE_DEBIASING_GUIDE.md (limited to 'PURE_DEBIASING_GUIDE.md') diff --git a/PURE_DEBIASING_GUIDE.md b/PURE_DEBIASING_GUIDE.md new file mode 100644 index 0000000..237ad1c --- /dev/null +++ b/PURE_DEBIASING_GUIDE.md @@ -0,0 +1,192 @@ +# 纯偏见减少(Pure Debiasing)使用指南 + +## 🎯 概述 + +纯偏见减少训练专注于**最小化男女间的熵差**,不包含整体熵最小化(EM)。这使得训练目标更加明确,计算更加高效。 + +### 核心目标 +``` +原GEE损失: L = H̄ + λ * (H_female - H_male)² + ↓ +纯Debiasing: L = (H_female - H_male)² +``` + +**关键优势:** +- ✅ 目标更明确:只关注性别偏见 +- ✅ 计算更简单:去除熵最小化项 +- ✅ 训练更稳定:单一优化目标 +- ✅ 效果更直接:熵差距直接下降 + +## 🚀 快速开始 + +### 1. 基础运行 +```bash +# 使用默认参数 +./scripts/run_pure_debiasing.sh /path/to/your/model + +# 自定义参数 +./scripts/run_pure_debiasing.sh /path/to/model my_run_name 0.005 30 +``` + +### 2. 手动运行 +```bash +python train_debiasing.py \ + --model_path /path/to/model \ + --run_name pure_debiasing_test \ + --target_gap 0.01 \ + --max_steps 20 \ + --micro_batch_size 2 \ + --effective_batch 4 \ + --learning_rate 1e-5 \ + --use_test_data +``` + +## 📊 核心组件 + +### 1. 损失函数 (`losses/debiasing_loss.py`) +```python +class DebiasingLoss: + def __init__(self, use_l1=False, scale_factor=1.0): + """ + use_l1: False=L2损失, True=L1损失 + scale_factor: 损失缩放因子 + """ +``` + +**损失计算:** +- L2版本: `(H_female - H_male)²` +- L1版本: `|H_female - H_male|` + +### 2. 训练脚本 (`train_debiasing.py`) +专门的纯debiasing训练,包含: +- 智能批次平衡 +- 早停机制(达到目标熵差) +- 实时监控和可视化 + +### 3. 测试验证 +```bash +# 数学逻辑测试 +python test_debiasing_math.py + +# 完整功能测试(需要PyTorch) +python test_debiasing_loss.py +``` + +## 🔧 参数配置 + +### 关键参数 +| 参数 | 默认值 | 说明 | +|------|--------|------| +| `--target_gap` | 0.01 | 目标熵差距,达到后早停 | +| `--scale_factor` | 1.0 | 损失缩放因子 | +| `--use_l1` | False | 使用L1损失替代L2 | +| `--learning_rate` | 1e-5 | 学习率(建议较低) | +| `--micro_batch_size` | 2 | 必须≥2保证性别平衡 | + +### 训练建议 +- **学习率**: 1e-5 到 5e-5 (比普通训练更低) +- **批次大小**: 确保每批至少1男1女 +- **目标熵差**: 0.005-0.02 (根据应用需求调整) +- **训练步数**: 通常10-50步即可看到效果 + +## 📈 监控指标 + +训练过程中关键指标: +``` +📉 Step 1 | loss=0.160000 | gap=0.400000 | H_male=0.4500 | H_female=0.8500 +📉 Step 2 | loss=0.040000 | gap=0.200000 | H_male=0.5000 | H_female=0.7000 +📉 Step 3 | loss=0.010000 | gap=0.100000 | H_male=0.5500 | H_female=0.6500 +``` + +**理想训练轨迹:** +- 损失持续下降 +- 熵差距(`gap`)持续缩小 +- `H_male`和`H_female`趋于相等 + +## 🎯 预期效果 + +### 训练前 +``` +H_male=0.25, H_female=0.95, gap=0.70 (严重偏见 💥) +``` + +### 训练后 +``` +H_male=0.58, H_female=0.60, gap=0.02 (轻微偏见 ⚠️) +``` + +### 理想状态 +``` +H_male=0.60, H_female=0.60, gap=0.00 (无偏见 ✅) +``` + +## 🔄 与原GEE的对比 + +| 方面 | 原GEE | 纯Debiasing | +|------|-------|-------------| +| 损失函数 | `H̄ + λ*(H_f-H_m)²` | `(H_f-H_m)²` | +| 优化目标 | 熵最小化+偏见减少 | 仅偏见减少 | +| 参数数量 | 需要调节λ权重 | 无需权重调节 | +| 训练复杂度 | 高(双目标平衡) | 低(单目标) | +| 收敛速度 | 较慢 | 较快 | +| 偏见减少效果 | 可能被EM目标稀释 | 直接且强烈 | + +## 💡 最佳实践 + +### 1. 数据准备 +```python +# 确保数据性别平衡 +male_samples = [s for s in data if s['gender'] == 'male'] +female_samples = [s for s in data if s['gender'] == 'female'] +print(f"男女比例: {len(male_samples)}:{len(female_samples)}") +``` + +### 2. 超参调优 +```bash +# 保守设置(稳定但慢) +--learning_rate 5e-6 --target_gap 0.005 + +# 激进设置(快速但可能不稳定) +--learning_rate 2e-5 --target_gap 0.02 +``` + +### 3. 监控要点 +- 关注`entropy_gap`是否持续下降 +- 检查批次平衡性(无警告信息) +- 观察损失收敛曲线 + +### 4. 故障排除 +```bash +# 如果批次不平衡 +--micro_batch_size 4 # 增加批次大小 + +# 如果训练不稳定 +--learning_rate 1e-6 # 降低学习率 + +# 如果收敛太慢 +--scale_factor 2.0 # 增加损失权重 +``` + +## 📁 文件结构 + +``` +losses/ +├── debiasing_loss.py # 纯debiasing损失函数 +└── gee_loss.py # 原GEE损失(对比用) + +train_debiasing.py # 纯debiasing训练脚本 +test_debiasing_math.py # 数学逻辑测试 +scripts/ +└── run_pure_debiasing.sh # 便捷运行脚本 +``` + +## 🎉 总结 + +纯偏见减少方法提供了一个**更专注、更高效**的debiasing解决方案。通过去除熵最小化的干扰,训练过程更加直接,效果更加明显。 + +**适用场景:** +- 只关心减少性别偏见,不需要整体性能优化 +- 需要快速原型验证debiasing效果 +- 资源有限的环境下进行偏见减少 + +**下一步:** 根据你的具体需求调整参数,开始纯debiasing训练! \ No newline at end of file -- cgit v1.2.3