Meta-Learning Model-Agnostic Meta-Learning Maml

# Meta-Learning: Model-Agnostic Meta-Learning (MAML)

## Introduction & Motivation

Meta-Learning: learn to learn. MAML: gradient-based adaptation. Few-shot learning via meta-gradient. Applications: rapid adaptation, novel tasks.

Motivation: Learn quickly from few samples; task adaptation.

Applications: Few-shot, rapid learning, adaptation.

---

## Core Concepts & Theory

### Inner Loop

Adapt to task via gradient steps.

### Outer Loop

Optimize for fast adaptation.

### Meta-Gradient

Gradient through gradient computation.

---

## Mathematical Formulation

MAML objective:
$$\min_ heta \sum_{ au} L_{ au}( heta - \alpha abla L_{ au}( heta))$$

Inner loop:
$$ heta'_i = heta - \alpha abla L_i( heta)$$

Outer loop:
$$ heta \leftarrow heta - \beta abla_ heta \sum_i L_i( heta'_i)$$

---

## Summary & Key Takeaways

Meta-Learning via MAML enables rapid task adaptation through gradient-based meta-optimization.

---

---

## Appendix: Practical Labs

### Lab 1: Inner Loop Update

import numpy as np

def inner_loop_update(theta, gradient, alpha=0.01):
 """Single gradient step in inner loop"""
 theta_prime = theta - alpha * gradient
 return theta_prime

# Test
np.random.seed(42)
theta = np.random.randn(100)
grad = np.random.randn(100)

theta_prime = inner_loop_update(theta, grad)

assert theta_prime.shape == theta.shape, "Shape preserved"
print("✓ Inner loop working")

if __name__ == "__main__":
 print("Lab 1: InnerLoop - PASSED")

### Lab 2: Meta-Gradient

import numpy as np

def compute_meta_gradient(task_losses_after_update, theta_step_size=0.01):
 """Compute gradient for outer loop"""
 meta_gradient = np.mean(task_losses_after_update) / theta_step_size
 return meta_gradient

# Test
np.random.seed(42)
losses = np.random.rand(10)

meta_grad = compute_meta_gradient(losses)

assert np.isfinite(meta_grad), "Gradient finite"
print("✓ Meta-gradient working")

if __name__ == "__main__":
 print("Lab 2: MetaGradient - PASSED")

### Lab 3: Few-Shot Task Sampling

import numpy as np

def sample_few_shot_task(data, labels, k_shot=5, k_way=5):
 """Sample few-shot task"""
 classes = np.unique(labels)
 support_x, support_y = [], []
 query_x, query_y = [], []
 
 for c in np.random.choice(classes, k_way, replace=False):
 class_indices = np.where(labels == c)[0]
 selected = np.random.choice(class_indices, k_shot + 15, replace=False)
 
 support_x.append(data[selected[:k_shot]])
 support_y.extend([c] * k_shot)
 query_x.append(data[selected[k_shot:]])
 query_y.extend([c] * 15)
 
 return np.vstack(support_x), np.array(support_y), np.vstack(query_x), np.array(query_y)

# Test
np.random.seed(42)
data = np.random.randn(100, 28, 28)
labels = np.repeat(np.arange(10), 10)

sup_x, sup_y, q_x, q_y = sample_few_shot_task(data, labels)

assert len(sup_y) == 25, "Support size"
print("✓ Few-shot sampling working")

if __name__ == "__main__":
 print("Lab 3: FewShotSampling - PASSED")

### Lab 4: MAML Loss

import numpy as np

def maml_loss(support_loss, query_loss_after_update, meta_alpha=0.01):
 """MAML training objective"""
 total_loss = query_loss_after_update
 return total_loss

# Test
np.random.seed(42)
sup_loss = 0.5
q_loss = 0.6

loss = maml_loss(sup_loss, q_loss)

assert np.isfinite(loss), "Loss finite"
print("✓ MAML loss working")

if __name__ == "__main__":
 print("Lab 4: MAMLLoss - PASSED")

Go deeper with CFSGPT

Get AI-powered deep-dives, save terms, and run advanced simulations — free account.

Create Free Account