Meta Learning
Il meta-apprendimento addestra un modello su numerosi compiti, così che possa adattarsi a un nuovo compito a partire da pochi esempi. Scopri come funzionano gli episodi, MAML e le reti prototipiche.
Il meta-apprendimento, spesso chiamato «imparare a imparare», è un approccio di apprendimento automatico (ML) che addestra un modello su molte attività correlate affinché possa adattarsi rapidamente a una nuova attività, di solito a partire da pochi esempi etichettati. Mentre l'apprendimento supervisionato addestra un modello su un singolo dataset, il meta-apprendimento ottimizza il processo di apprendimento stesso: i pesi iniziali, lo spazio di embedding usato per confrontare gli esempi oppure una rete che apprende dagli esempi in un unico passaggio in avanti. La sua applicazione principale è l'apprendimento con pochi esempi, ovvero il riconoscimento di nuove classi a partire da uno a pochi esempi per ciascuna classe; il meta-apprendimento si applica anche ai robot e ad altri agenti che devono adattarsi al volo a nuove condizioni.
Come funziona il meta-apprendimento#
Il meta-apprendimento avviene attraverso episodi che simulano la situazione che il modello incontrerà durante il test. Ogni episodio campiona un'attività, ad esempio un problema di classificazione 5-way 1-shot costruito a partire da cinque classi con un'immagine etichettata ciascuna. Gli esempi etichettati formano il set di supporto, mentre gli esempi tenuti da parte delle stesse classi formano il set di query. In un ciclo interno, il modello si adatta al set di supporto; in un ciclo esterno, i meta-parametri vengono aggiornati in base alle prestazioni del modello adattato sul set di query, così il modello viene premiato per la sua capacità di adattarsi anziché per aver memorizzato una singola attività. Le classi usate per il meta-test non compaiono mai durante il meta-training.
Approcci principali#
- Basato sull'ottimizzazione: il meta-apprendimento agnostico rispetto al modello (MAML) apprende un'inizializzazione dalla quale uno o pochi passaggi di discesa del gradiente sul set di supporto di una nuova attività portano a buone prestazioni. Il ciclo esterno calcola il gradiente attraverso l'aggiornamento interno, operazione che richiede gradienti del secondo ordine; varianti del primo ordine come Reptile di OpenAI evitano questo costo spostando l'inizializzazione verso i pesi adattati su ciascuna attività.
- Basato su metriche: questi metodi apprendono uno spazio di embedding in cui è possibile classificare gli esempi in base alla distanza. Le reti prototipiche calcolano la media degli embedding di supporto di ogni classe per ottenere un prototipo e assegnano ogni query al prototipo più vicino; così, durante il test si può aggiungere una classe senza alcun addestramento.
- Basato sul modello: una rete come una rete neurale ricorrente (RNN) con memoria esterna legge il set di supporto e predice direttamente le etichette delle query, apprendendo la procedura di adattamento nelle proprie attivazioni. Il documento su GPT-3 ha descritto l'apprendimento in contesto nei modelli linguistici di grandi dimensioni (LLMs), che risolvono un'attività a partire da esempi nel prompt, come il ciclo interno di questo tipo di meta-apprendimento, con il pretraining come ciclo esterno.
Il benchmark di regressione originale di MAML chiede a una piccola rete di adattarsi a onde sinusoidali con ampiezza e fase casuali, usando 10 punti ciascuna. Il seguente esempio in PyTorch esegue il meta-training dell'inizializzazione con entrambi i cicli, quindi verifica un passaggio di adattamento su nuove onde sinusoidali:
import torch
import torch.nn.functional as F
from torch import nn
from torch.func import functional_call
torch.manual_seed(0)
net = nn.Sequential(nn.Linear(1, 40), nn.ReLU(), nn.Linear(40, 40), nn.ReLU(), nn.Linear(40, 1))
meta_optimizer = torch.optim.Adam(net.parameters(), lr=0.001)
def sine_task_losses():
"""Sample a sine-wave task, adapt on 10 points with one gradient step, and return query losses before and after."""
amplitude, phase = torch.empty(1).uniform_(0.1, 5), torch.empty(1).uniform_(0, 3.14)
x = torch.empty(20, 1).uniform_(-5, 5)
y = amplitude * torch.sin(x + phase)
params = dict(net.named_parameters())
support_loss = F.mse_loss(functional_call(net, params, x[:10]), y[:10])
grads = torch.autograd.grad(support_loss, list(params.values()), create_graph=True) # inner loop
adapted = {name: p - 0.01 * g for (name, p), g in zip(params.items(), grads)}
before = F.mse_loss(functional_call(net, params, x[10:]), y[10:])
after = F.mse_loss(functional_call(net, adapted, x[10:]), y[10:])
return before, after
# Outer loop: update the shared initialization so that one inner step fits each new task
for step in range(10000):
meta_loss = sum(sine_task_losses()[1] for _ in range(4))
meta_optimizer.zero_grad()
meta_loss.backward()
meta_optimizer.step()
# On 500 unseen sine waves, compare query error before and after the one-step adaptation
losses = torch.tensor([[loss.item() for loss in sine_task_losses()] for _ in range(500)])
print(f"query MSE before adaptation: {losses[:, 0].mean():.2f}, after one step: {losses[:, 1].mean():.2f}")Stampa query MSE before adaptation: 3.10, after one step: 0.70. L'inizializzazione appresa tramite meta-apprendimento non si adatta a nessuna onda sinusoidale specifica, ma un singolo passaggio di gradiente su 10 punti riduce di oltre quattro volte l'errore su punti nuovi di un'onda mai vista.
Meta-apprendimento e termini correlati#
- Transfer learning: riutilizza i pesi addestrati su un'attività ampia come punto di partenza per un'altra, senza ottimizzarli per l'adattabilità. Eseguire il fine-tuning di un rilevatore Ultralytics YOLO26 pretrained su COCO con un dataset personalizzato è transfer learning: i pesi iniziali provengono dal normale addestramento su COCO, e per adattarli si usa un dataset etichettato e molte epoche di addestramento, anziché pochi esempi e pochi passaggi di gradiente.
- Apprendimento few-shot: il problema di apprendere da pochissimi esempi. Il meta-apprendimento è una famiglia di soluzioni; gli embedding pretrained con un classificatore semplice sono un'altra.
- Apprendimento automatico automatizzato (AutoML): ricerca architetture e iperparametri, di solito per un dataset alla volta. Alcune rassegne considerano meta-apprendimento l'apprendimento degli iperparametri su più attività.
- Apprendimento continuo: apprende una sequenza di attività senza dimenticare quelle precedenti, mentre il meta-apprendimento prepara un modello ad apprendere rapidamente nuove attività.
Benchmark e risultati#
I benchmark di immagini few-shot hanno guidato la maggior parte della ricerca sul meta-apprendimento: Omniglot contiene 1.623 caratteri scritti a mano appartenenti a 50 alfabeti, mentre miniImageNet usa 100 classi di ImageNet con 600 immagini ciascuna, suddivise in classi separate per meta-addestramento, validazione e test. Due studi successivi hanno messo in dubbio quanto contribuisca il meta-apprendimento in sé. "Apprendimento rapido o riutilizzo delle caratteristiche?" ha mostrato che il successo di MAML deriva soprattutto dal riutilizzo delle caratteristiche apprese nel ciclo esterno, e la sua variante semplificata ANIL, che adatta solo il livello finale nel ciclo interno, ha eguagliato MAML. "Ripensare la classificazione di immagini few-shot" ha poi rilevato che un classificatore lineare su un buon embedding, appreso con addestramento supervisionato standard o auto-supervisionato sulle classi di meta-addestramento, superava i principali metodi di meta-apprendimento few-shot dell'epoca.










