summaryrefslogtreecommitdiff
path: root/PURE_DEBIASING_GUIDE.md
diff options
context:
space:
mode:
Diffstat (limited to 'PURE_DEBIASING_GUIDE.md')
-rw-r--r--PURE_DEBIASING_GUIDE.md192
1 files changed, 192 insertions, 0 deletions
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