summaryrefslogtreecommitdiff
path: root/PURE_DEBIASING_GUIDE.md
blob: 237ad1c776ebe023be441d372e2ec42f5862bc1f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
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训练!