unlearning
**Machine Unlearning**
**What is Machine Unlearning?**
Removing specific knowledge, behaviors, or data influence from a trained model without full retraining.
**Why Unlearning?**
| Reason | Example |
|--------|---------|
| Privacy | Remove personal data (GDPR "right to be forgotten") |
| Safety | Remove dangerous knowledge |
| Copyright | Remove training data influence |
| Bias | Remove discriminatory patterns |
**Unlearning Approaches**
**Gradient Ascent**
Increase loss on data to forget:
```python
def unlearn_gradient_ascent(model, forget_data, retain_data, steps=100):
opt = torch.optim.Adam(model.parameters())
for step in range(steps):
# Maximize loss on forget data (forget it)
forget_loss = -model.loss(forget_data)
# Minimize loss on retain data (keep it)
retain_loss = model.loss(retain_data)
total_loss = forget_loss + retain_loss
total_loss.backward()
opt.step()
```
**Representation Misdirection for Unlearning (RMU)**
Corrupt the representation of information to forget:
```python
def rmu_unlearn(model, forget_prompts, layer):
# Get activations for forget prompts
forget_acts = get_activations(model, forget_prompts, layer)
# Generate random target
random_target = torch.randn_like(forget_acts)
# Train to map forget prompts to random activations
loss = mse_loss(forget_acts, random_target)
loss.backward()
```
**Task Vectors**
Subtract the "skill" learned:
```python
# Get task-specific weights
base_weights = load_model("base")
finetuned_weights = load_model("finetuned_on_task")
# Task vector is the difference
task_vector = finetuned_weights - base_weights
# Unlearn by subtracting
unlearned_weights = base_weights - alpha * task_vector
```
**Challenges**
| Challenge | Description |
|-----------|-------------|
| Verification | How to prove knowledge is gone? |
| Side effects | May degrade other capabilities |
| Incomplete removal | Knowledge may persist in other forms |
| Relearning | Model may relearn from context |
**Evaluation**
```python
def evaluate_unlearning(model, target_knowledge, general_knowledge):
# Target should be forgotten
target_accuracy = evaluate(model, target_knowledge)
# General should be retained
general_accuracy = evaluate(model, general_knowledge)
# Good unlearning: low target, high general
return {"target": target_accuracy, "retained": general_accuracy}
```
**Current Limitations**
- No perfect unlearning method exists
- Trade-off between forgetting and retention
- Verification is difficult
- May need to combine multiple techniques
Active research area with important implications for AI safety and regulation.