HCAI-Lab/w2-consensus-deepdive-unlearning-artifacts / social-data-attribution-w2 /notes /hparam_rationale.md
NGDiff Unlearning — Hyperparameter Rationale
Last updated: 2026-03-18
Experiment: Topic-bin machine unlearning on OLMo-3 7B using Normalized Gradient Difference (Bu & Xu, NAACL 2025).
1. Model
| Choice | Value |
|---|---|
| Base model | allenai/OLMo-3-1025-7B |
| Precision | bfloat16 |
| Attention | sdpa (scaled-dot-product, PyTorch 2.0+) |
Why OLMo-3 7B:
Open weights with fully documented training provenance (Dolma corpus). The training data is publicly described topic-by-topic, making it possible to construct a validated forget set — documents that are known to be in the model's training mix. This is a prerequisite for meaningful unlearning experiments. Closed-source models (GPT-4, Gemini) cannot be used because their training data is unknown.
2. LoRA Configuration
| Hyperparameter | Value | Rationale |
|---|---|---|
r (rank) |
8 | Standard rank for 7B-scale selective unlearning. Enough capacity to encode forget-direction gradients; low enough that only ~0.1% of parameters are trainable, preventing catastrophic forgetting. |
lora_alpha |
16 | Set to 2×r by convention — gives a scaling factor of 2 at initialization, which keeps gradient magnitudes stable regardless of rank choice. |
lora_dropout |
0.05 | Light regularization to prevent overfitting to the small forget set (1000 docs). Higher dropout (e.g. 0.1) degraded retain-set PPL in preliminary trials. |
target_modules |
q_proj, k_proj, v_proj, o_proj |
Attention projections only. The attention heads mediate topic-specific associative recall; updating FFN layers risks altering factual representations needed for the retain set. This is consistent with the Bu & Xu NAACL 2025 experiments. |
bias |
none |
Standard LoRA setting; biases are not fine-tuned. |
3. Training Setup
| Hyperparameter | Value | Rationale |
|---|---|---|
per_device_train_batch_size |
4 | Maximum that fits in ~40–45 GB VRAM with OLMo-3 7B + LoRA + gradient checkpointing. A100 80G and H100/H200 allow this comfortably; V100 32G does not. |
gradient_accumulation_steps |
4 | Effective batch = 16 sequences. Each NGDiff step processes 1 forget + 1 retain mini-batch (2 forward/backward passes). Grad accum of 4 → 1 optimizer step = 4 NGDiff steps = 16 total sequences. Matches the batch size used in the Bu & Xu paper. |
learning_rate |
1e-5 | Conservative. Too high (>5e-5) causes rapid retain-set PPL degradation after ~500 steps even with NGDiff normalization. Too low (<5e-6) produces negligible forget-set PPL increase within 5000 steps. 1e-5 reliably triggers the PPL stopping criterion at 500–2000 optimizer steps for single-topic runs. |
lr_scheduler_type |
constant |
No decay. The AutoLR mechanism (quadratic probe every 10 optimizer steps) dynamically adjusts the learning rate, so a separate scheduler would conflict. |
warmup_steps |
0 | Warmup is irrelevant here: we want maximum unlearning signal from the first step. Adding warmup delays the forget-loss gradient from flowing. |
weight_decay |
0.0 | No regularization beyond LoRA dropout. Weight decay on LoRA matrices would counteract the forget gradient unnecessarily. |
max_grad_norm |
1.0 | Standard gradient clipping to prevent occasional large NGDiff update spikes. |
bf16 |
true |
A100/L40S/H100/H200 all support BF16 natively. FP16 risks loss spikes with the NGDiff normalization step. |
gradient_checkpointing |
true |
Reduces peak VRAM from ~55 GB to ~40–45 GB by recomputing activations during backward pass at the cost of ~20% slower throughput. Required for the 4-batch setting. |
4. NGDiff-Specific
| Hyperparameter | Value | Rationale |
|---|---|---|
auto_lr |
true |
Quadratic probe on retain loss every 10 optimizer steps. Automatically keeps LR near the local minimum of retain loss, improving forget/retain trade-off over fixed LR. |
lr_delta |
1e-5 | Perturbation step for the AutoLR probe (equal to the base LR). Small enough that the quadratic approximation is locally accurate; large enough that numerical noise is dominated by the signal. |
5. Data Sampling
| Hyperparameter | Value | Rationale |
|---|---|---|
max_forget_docs |
1000 | A forget set of 1000 documents provides strong unlearning signal without excessively long tokenization (1000 × avg 800 tokens ≈ 800K tokens, fits in memory). Larger sets (5000+) did not change the PPL trajectory significantly given that the stopping criterion fires early. |
max_retain_docs |
9000 | 9:1 retain:forget ratio. The retain objective anchors general capabilities; higher ratios (>9:1) slow down unlearning; lower ratios (<3:1) cause rapid MMLU degradation. 9000 docs is also small enough that data loading is fast (few seconds). |
max_length |
2048 | OLMo-3's native positional encoding supports 2048 tokens. Truncating to this avoids position-ID out-of-range errors and controls memory usage. |
seed |
42 | Fixed for reproducibility of the random forget/retain doc sample. |
6. Stopping Criteria
| Criterion | Value | Rationale |
|---|---|---|
max_steps |
5000 | Hard ceiling ≈ 23 hours on H100. Prevents unbounded runs if PPL stopping never fires (e.g. null-bin control). |
| PPL stopping threshold | Dynamic (per-run) | Computed as: base model's perplexity on chunk-shuffled forget-set tokens, measured before LoRA is applied. Shuffling destroys local syntax but preserves token statistics, so this PPL represents the floor of "random gibberish." Training stops when the fine-tuned model's forget-set PPL meets or exceeds this threshold — i.e., when the model can no longer predict the forget documents better than shuffled noise. This is more principled than a fixed threshold because it adapts to the actual forget set's difficulty. |
| MMLU safety threshold | 0.90 × baseline |
If in-training MMLU drops below 90% of the pre-training baseline, training stops. This guards against catastrophic forgetting of general world knowledge. MMLU is checked every 50 NGDiff steps using 100 pre-loaded validation questions. |
| Wall-time guard | 930 min (PACE ICE only) | SLURM 16-hr jobs stop 30 min early to ensure a clean checkpoint is saved. Disabled on RunPod (pass trainer.max_walltime_minutes=null) since there is no SLURM preemption deadline. |
7. PPL Logging
| Parameter | Value | Rationale |
|---|---|---|
PPL_CHECK_INTERVAL |
1000 NGDiff steps (= 250 optimizer steps) | Checking every 250 optimizer steps is frequent enough to catch early stopping without significant eval overhead (~2 extra forward passes per check). |
PPL_LOG_INTERVAL |
2000 NGDiff steps (= 500 optimizer steps) | Forget-set PPL is written to forget_ppl_log.json every 500 optimizer steps. For grouped-bin experiments where unlearning is faster and stronger than single-topic, 500-step resolution is needed to capture the full PPL trajectory before the stopping criterion fires. |
8. Chain Job / Resume Design (PACE ICE)
- 3 SLURM jobs chained per run (
--dependency=afterok) - Each job is 16 hrs; 3 × 16 hr = 48 hr wall-clock ceiling
- At job start, train.py checks for an existing
ppl_stopping_threshold.jsonandforget_ppl_log.json; if the log already shows PPL ≥ threshold, the job exits immediately without reloading the model - This avoids wasting GPU-hours when the stopping criterion fired in an earlier job of the chain
References
- Bu, J., & Xu, W. (2025). Forget What You Know: Machine Unlearning via Normalized Gradient Difference. NAACL 2025.
- Hu, E. J., et al. (2022). LoRA: Low-Rank Adaptation of Large Language Models. ICLR 2022.
- Groeneveld, D., et al. (2024). OLMo: Accelerating the Science of Language Models. ACL 2024.
Xet Storage Details
- Size:
- 7.93 kB
- Xet hash:
- 2aebf720cabae5a9bbda9d6f20693bfb17a1d95b9fd45a1c6b24f58469f4a3ec
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.