Train VLA models for robotic manipulation by using the model's own successful trajectories as self-reference for reward—enable progress-based feedback for failed attempts without external rewards or demonstrations.
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Une commande directe contourne le prompt de vérification. Examinez la source avant de l'exécuter.
Train VLA models for robotic manipulation by using the model's own successful trajectories as self-reference for reward—enable progress-based feedback for failed attempts without external rewards or demonstrations.
Train VLA Models with Self-Referential Rewards for Robotic Manipulation
Vision-Language-Action (VLA) models for robotics face extreme reward sparsity: tasks succeed or fail, with little feedback for in-between attempts. SRPO (Self-Referential Policy Optimization) breaks this bottleneck by using the model's own successful trajectories as self-reference. Failed attempts are measured against the model's successful ones from the same training batch, enabling dense progress-based rewards without external reward models or demonstrations.
This achieves 99.2% success on LIBERO (103% relative improvement from supervised baseline) by leveraging the model's latent world representation to assess behavioral progress robustly.
Core Concept
Standard VLA training for manipulation suffers from:
Reward Sparsity: Most trajectories fail; binary success/failure provides no gradient signal for intermediate progress
Sparse Demonstrations: Expert trajectories are expensive; RL without them requires dense rewards
Domain Shift: Reward models trained on one set of tasks fail on new objects/scenes
SRPO addresses all three by enabling self-comparison: rather than comparing failed trajectories to fixed rewards or external demonstrations, the model compares its current attempt to its own successful trajectories (from the same batch). A latent world model captures progress via compressed state representations, enabling robust progress estimation without task-specific fine-tuning.
classSelfReferentialComparison:
"""
Compare failed trajectories to successful ones in the batch.
"""def__init__(self, world_model):
self.world_model = world_model
defcompute_self_referential_reward(self, failed_traj, success_trajs):
"""
Compute reward for failed trajectory based on self-comparison.
failed_traj: dict with 'observations' and 'actions'
success_trajs: list of successful trajectory dicts
"""# Encode failed trajectory
failed_latent = self.world_model.encode_trajectory(
failed_traj['observations'],
failed_traj['actions']
)
# Encode successful trajectories
success_latents = []
for traj in success_trajs:
latent = self.world_model.encode_trajectory(
traj['observations'],
traj['actions']
)
success_latents.append(latent)
# Compare to each successful trajectory
progress_scores = []
for success_latent in success_latents:
progress = self.world_model.compute_progress(failed_latent, success_latent)
progress_scores.append(progress)
# Average progress across all successful trajectories
avg_progress = torch.stack(progress_scores).mean()
return avg_progress.item()
defcompute_batch_rewards(self, trajectories):
"""
Process batch of trajectories, extracting successful and failed.
Compute self-referential rewards for each failed trajectory.
"""
successful = [t for t in trajectories if t['success']]
failed = [t for t in trajectories ifnot t['success']]
rewards = {}
for i, traj inenumerate(trajectories):
if traj['success']:
# Successful trajectories get positive baseline reward
rewards[i] = 1.0else:
# Failed trajectories get self-referential progress rewardif successful:
progress_reward = self.compute_self_referential_reward(
traj,
successful
)
rewards[i] = progress_reward # Typically in [-1, 0] rangeelse:
# No successful trajectories in batch; use zero reward
rewards[i] = 0.0return rewards