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:

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:

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:

# 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

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.

Take unlearning further

Ask the copilot about this term, or have our engineers assess it against your process.