Action Chunking
Il raggruppamento delle azioni fa sì che una policy robotica preveda una sequenza di azioni future a partire da una singola osservazione, riducendo gli errori cumulativi. Tratta ACT, lo smoothing e i VLA.
Il raggruppamento delle azioni è una tecnica di apprendimento robotico in cui una policy prevede, a partire da una singola osservazione, una sequenza, o blocco, delle successive k azioni invece di un'azione per ogni passo di controllo. Il nome riprende un concetto della psicologia e delle neuroscienze: raggruppare una sequenza di azioni in una singola unità. È entrato nell'apprendimento robotico con Action Chunking with Transformers (ACT) nel 2023. ACT ha appreso attività bimanuali delicate, come inserire una batteria nel suo alloggiamento, con un tasso di successo dell'80-90% partendo da soli 10 minuti di dimostrazioni sui bracci ALOHA a basso costo. La predizione di blocchi è ormai standard nell'apprendimento per imitazione e nei modelli visione-linguaggio-azione (VLA) progettati per la robotica di uso generale.
Perché prevedere blocchi è utile#
Nell'apprendimento per imitazione, una policy impara a riprodurre le azioni mostrate nelle dimostrazioni umane. Ogni piccolo errore porta il robot in uno stato non coperto dalle dimostrazioni, dove la previsione successiva peggiora, facendo accumulare gli errori nel corso di un'attività lunga. Una policy che esegue k azioni per previsione prende k volte meno decisioni per episodio; gli autori di ACT descrivono questo fenomeno come una riduzione k volte dell'orizzonte effettivo dell'attività. Nel loro studio di ablazione simulato, il successo medio su due attività è salito dall'1%, prevedendo un'azione alla volta, al 44% con blocchi di 100 azioni.
I blocchi catturano anche una temporizzazione impossibile da ricavare da una singola osservazione. Chi esegue le dimostrazioni fa pause e tentenna; una policy a un solo passo, che vede la stessa immagine prima e dopo una pausa, non può capire se deve aspettare o muoversi, mentre un blocco che include la pausa la riproduce. Inoltre, quando le dimostrazioni mostrano due modi validi di svolgere un'attività, prevedere l'intera sequenza in una volta sola mantiene il robot su una delle due, invece di fargli calcolare una media tra entrambe.
Il robot esegue un blocco e poi chiede alla policy di generarne un altro:
Ricalcolare il piano dopo l'intero blocco riduce al minimo le chiamate al modello; ricalcolarlo dopo una parte del blocco, come fa Diffusion Policy, segue l'idea dell'orizzonte mobile del controllo predittivo basato su modello e reagisce più rapidamente agli imprevisti.
Ridurre le discontinuità tra i blocchi#
All'interno di un blocco il robot si muove in anello aperto e ogni nuovo blocco parte da una nuova previsione; perciò, il movimento può fare un salto quando un blocco cede il controllo al successivo. L'ensemble temporale di ACT interroga la policy a ogni passo ed esegue una media ponderata di tutte le previsioni dei blocchi per il passo corrente, con pesi exp(−m·i) che assegnano il peso maggiore alla previsione più vecchia. Questo esempio NumPy confronta il raggruppamento semplice con l'ensemble temporale per una policy sostitutiva in cui ogni blocco presenta un piccolo errore:
import numpy as np
rng = np.random.default_rng(0)
k, steps, m = 10, 100, 0.1 # chunk size, episode length, temporal-ensembling decay
target = np.sin(np.linspace(0, np.pi, steps + k)) # the demonstrated joint trajectory
# Stand-in policy: at step t it predicts actions for steps t..t+k-1, each chunk off by its own error
chunks = [target[t : t + k] + rng.normal(0, 0.05) for t in range(steps)]
# Plain chunking: query every k steps and execute each chunk open loop
plain = np.concatenate([chunks[t] for t in range(0, steps, k)])
# Temporal ensembling (ACT): query every step and average all predictions for step t, oldest weighted most
ensembled = []
for t in range(steps):
preds = [chunks[s][t - s] for s in range(max(0, t - k + 1), t + 1)]
weights = np.exp(-m * np.arange(len(preds)))
ensembled.append(np.dot(weights, preds) / weights.sum())
for name, actions in (("plain", plain), ("ensembled", np.array(ensembled))):
print(f"{name}: largest jump between consecutive actions = {np.abs(np.diff(actions)).max():.3f}")
print(f"demonstration: largest jump = {np.abs(np.diff(target[:steps])).max():.3f}")Il raggruppamento semplice produce un salto massimo tra passi consecutivi pari a 0,085, circa tre volte il valore di 0,029 della dimostrazione, in corrispondenza del passaggio tra blocchi. L'ensemble lo riduce a 0,044, perché ogni azione eseguita è la media di un massimo di dieci previsioni ottenute da osservazioni diverse.
I modelli più grandi rendono più difficile nascondere le discontinuità, perché l'inferenza può durare più di un passo di controllo. Il raggruppamento in tempo reale di Physical Intelligence genera il blocco successivo mentre quello corrente è ancora in esecuzione, congela le azioni che verranno eseguite durante il ritardo di inferenza e completa le restanti in modo da renderle compatibili; così, attività dinamiche come accendere un fiammifero hanno continuato a funzionare anche con ritardi superiori a 300 ms.
Suddivisione delle azioni in blocchi nelle moderne policy robotiche#
- ACT: un Transformer addestrato come autoencoder variazionale condizionale che genera blocchi di 100 target di posizione articolare, pari a due secondi di movimento alla frequenza di controllo di 50 Hz di ALOHA.
- Policy di diffusione: generano ogni sequenza di azioni denoisingla iterativamente, rappresentando bene le dimostrazioni con diverse soluzioni distinte.
- Modelli VLA: π0 di Physical Intelligence π0 abbina un modello visione-linguaggio a un esperto di azioni addestrato tramite flow matching, che genera blocchi di 50 azioni per il controllo fino a 50 Hz. La libreria LeRobot di Hugging Face offre implementazioni aperte di ACT, Diffusion Policy e π0.
La maggior parte di queste policy codifica le immagini grezze delle telecamere con un backbone appreso. Una policy può invece basarsi sulle posizioni degli oggetti rilevate da un rilevatore: un modello Ultralytics YOLO26 ottimizzato ulteriormente sulle parti presenti in una postazione di lavoro trasforma ogni fotogramma in alcune coordinate di riquadri o punti chiave, che la policy a blocchi usa come stato al posto dei pixel grezzi.
Suddivisione delle azioni in blocchi e concetti correlati#
- Riconoscimento delle azioni: identifica l'attività in un video. La suddivisione delle azioni in blocchi genera i comandi eseguiti da un robot.
- Controllo predittivo basato su modello: ottimizza una sequenza di azioni rispetto a un modello dinamico a ogni passaggio. Una policy a blocchi apprende le sequenze dalle dimostrazioni e non richiede un modello.
- Modelli di azioni di grandi dimensioni: agenti di IA che agiscono nelle interfacce software tramite clic e chiamate API. La suddivisione delle azioni in blocchi riguarda i comandi motori di basso livello, come il vettore a 14 dimensioni delle posizioni articolari che ACT genera a ogni passaggio per le due braccia di ALOHA.










