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.
Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.
Quelldateien prüfen
Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Ein direkter Befehl überspringt den Prüf-Prompt. Prüfen Sie die Quelle, bevor Sie ihn ausführen.
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