Meta-Learning for Agents

Implement meta-learning for agents that adapt to new tasks quickly

Production Implementation

Implementing MAML requires four key components: task sampler (generate diverse training tasks), inner loop adapter (fast task-specific adaptation), outer loop meta-learner (update initialization), and training orchestrator (coordinate everything). Here's production-ready code.

Interactive: Code Explorer

Explore each component of a MAML implementation:

🎲
Task Sampler
Sample diverse tasks from distribution
class TaskSampler:
    """Sample tasks from a distribution for meta-training"""
    
    def __init__(self, task_pool: List[Task], k_shot: int = 5):
        self.task_pool = task_pool
        self.k_shot = k_shot
        
    def sample_task_batch(self, batch_size: int = 16):
        """Sample batch of tasks with support/query splits"""
        tasks = random.sample(self.task_pool, batch_size)
        
        batched_tasks = []
        for task in tasks:
            # Split task data into support and query sets
            support = random.sample(task.examples, self.k_shot)
            query = [ex for ex in task.examples if ex not in support]
            
            batched_tasks.append({
                'task_id': task.id,
                'support': support,  # K examples for adaptation
                'query': query[:10]  # Held-out for evaluation
            })
            
        return batched_tasks
    
    def ensure_diversity(self, tasks: List):
        """Ensure task diversity using clustering"""
        # Embed tasks, cluster, sample from each cluster
        embeddings = [self.embed_task(t) for t in tasks]
        clusters = kmeans_cluster(embeddings, n_clusters=5)
        return sample_from_clusters(tasks, clusters)

Usage Example

# Initialize meta-learning system
model = AgentModel(input_dim=512, hidden_dim=256, output_dim=64)
task_sampler = TaskSampler(task_pool=training_tasks, k_shot=5)

# Create trainer with optimal hyperparameters
trainer = MAMLTrainer(
    model=model,
    task_sampler=task_sampler,
    inner_lr=0.01,      # Fast task adaptation
    outer_lr=0.001,     # Slow meta-learning
    inner_steps=5       # 5 gradient steps per task
)

# Train for 10K iterations (4-8 hours on GPU)
meta_model = trainer.train(
    num_iterations=10000,
    task_batch_size=16  # 16 tasks per meta-update
)

# Deploy: adapt to new task in seconds
new_task_data = load_new_task()  # Just 5 examples needed
adapted_agent = trainer.inner_adapter.adapt(new_task_data['support'])

# Use adapted agent immediately
response = adapted_agent.predict(user_query)

Training Tips

Task Diversity: Need 50-100 diverse training tasks. Poor diversity = poor adaptation.
Inner LR: Start with 0.01. Too high = instability. Too low = slow adaptation.
Outer LR: 10x smaller than inner (0.001). Controls meta-learning speed.
Batch Size: Use 16-32 tasks per meta-update. Larger = stable but slow.
Training Time: Expect 4-8 hours on GPU for 10K iterations. Worth it for deployment speed.
💡
Deployment Strategy

Meta-trained model is your "base agent". For each new customer/domain/task: collect 5-10 examples, run inner loop adaptation (5-30 seconds), deploy adapted agent. Update base model monthly with outer loop on new task distribution. Cost: one-time meta-training, then fast per-task adaptation.

ROI: Meta-training takes 8 hours. Traditional fine-tuning takes 2 hours per task. Break-even at 4 tasks. By task 100, you've saved 192 hours.

Few-Shot Learning