Cortex 2.5
Blog|

Cortex 2.5

S
Sereact5 min de lecture
Cortex 2.5

Montrer au robot, plutôt que le réentraîner

Une nouvelle tâche devrait coûter quelques démonstrations, pas un cycle d'entraînement. Voici comment nous apprenons à Cortex à apprendre à partir d'un prompt.

Apprendre quelque chose de nouveau à un robot a toujours voulu dire collecter des données et entraîner un modèle. Pour une grande capacité inédite, c'est le bon investissement. Mais la plupart de ce qu'un entrepôt envoie à un robot n'est pas une capacité nouvelle, c'est une variation nouvelle : une catégorie de produits qu'il n'a jamais prélevée, un bac agencé un peu différemment, une SKU inédite avant la haute saison. Pour cela, un cycle d'entraînement complet est un outil lourd. La compétence est généralement déjà à portée du modèle. Ce qui manque, c'est un moyen de désigner la nouvelle tâche et que le robot suive.

Nous voulons pour la manipulation ce que l'apprentissage en contexte a apporté aux modèles de langage : montrer au robot une poignée de démonstrations vidéo d'une nouvelle tâche et le voir l'exécuter, sans réentraînement entre les deux. Cet article explique comment cela fonctionne dans Cortex, et pourquoi nous l'avons conçu ainsi.

Tout ce qui suit a été testé sur des tâches courtes et autonomes, de l'ordre d'un simple pick-and-place : sortir un article donné d'un bac et le préparer pour l'expédition, ou retirer un plateau d'échantillons étiqueté et le poser sur un lecteur dans un flux de laboratoire. Et cela n'a été testé que sur des tâches proches de celles que Cortex connaît déjà, au sein d'un même domaine. Nous ne l'avons pas validé sur des travaux à long horizon, sur des tâches combinant plusieurs compétences distinctes, ni sur le transfert entre domaines. Les résultats décrits sont les premiers résultats, dans ce périmètre, et nous sommes transparents sur cette limite.

Les démonstrations sont des vidéos, et elles restent entières

Une démonstration est une courte vidéo de la tâche effectuée. C'est toute l'interface : pas d'étiquettes d'action, pas de traces de téléopération, rien à annoter. Si vous pouvez filmer la tâche, vous pouvez la spécifier.

L'étape suivante tentante consisterait à réduire ces clips à une description compacte unique et à la transmettre au modèle. Nous nous en abstenons délibérément. Comprimer les démonstrations en un seul résumé jette précisément le détail qui les rend utiles : la texture de l'approche, la manière dont le contact se fait, la différence entre le mouvement du début et celui de la fin. Nous gardons plutôt les démonstrations entières, dans un tampon où le modèle peut puiser, et nous y récupérons ce qui est nécessaire.

Le mécanisme est donc la récupération. À chaque pas tt, l'observation courante du robot oto_t constitue la requête. Nous l'encodons et la comparons au tampon de démonstrations D\mathcal{D}, en récupérant les kk segments les plus similaires :

Rt=top-kdD  sim(ϕ(ot),ϕ(d))\mathcal{R}_t = \text{top-k}_{d \in \mathcal{D}} \; \text{sim}(\phi(o_t), \phi(d))

ϕ\phi est un encodeur visuel gelé et sim\text{sim} une mesure de similarité. L'ensemble récupéré Rt\mathcal{R}_t est placé devant le modèle comme exemples en contexte, exactement l'idée du few-shot prompting dans un modèle de langage : les exemples pertinents figurent dans le contexte, et le modèle y prête attention pendant qu'il agit.

Comme Rt\mathcal{R}_t est recalculé à chaque pas, les exemples que voit le robot changent au fil de la tâche. Au début d'un prélèvement, les moments récupérés concernent l'approche ; quand la pince se referme, la prise ; à la sortie, la dépose. L'orientation vient toujours de la partie de la démonstration qui compte à cet instant précis, plutôt que d'une image moyennée de la tâche dans son ensemble.

Une démonstration n'est qu'une courte vidéo. Nous gardons chacune entière plutôt que de la comprimer en résumé, afin que la texture de l'approche, le contact et le relâchement restent tous disponibles à la récupération.

En clair :

vous apprenez au robot en lui montrant quelques vidéos de la tâche, et il conserve ces vidéos intactes pour s'y référer, au lieu de les tasser dans une note abrégée.

Les démonstrations atteignent le plan et l'imagination

Cortex n'agit pas directement à partir de la perception. Il forme d'abord un plan de haut niveau, une lecture de ce qu'est la tâche et de la manière de l'aborder, puis imagine comment la scène va probablement se dérouler avant de s'engager dans un mouvement. Deux parties du système portent cela : un modèle vision-langage qui forme le plan, et un world model qui imagine les futurs.

Pour que l'une ou l'autre partie fasse son travail sur une nouvelle tâche, elle doit savoir de quelle tâche il s'agit. Les démonstrations récupérées vont donc aux deux. En conditionnant les deux étapes sur le même ensemble récupéré, le plan sts_t et l'observation suivante imaginée o^t+1\hat{o}_{t+1} s'écrivent :

st=fVLM(ot,Rt)o^t+1=fWM(ot,st,Rt)s_t = f_{\text{VLM}}(o_t, \mathcal{R}_t) \hspace{10em} \hat{o}_{t+1} = f_{\text{WM}}(o_t, s_t, \mathcal{R}_t)

Le modèle vision-langage reçoit les démonstrations comme un modèle de langage reçoit des exemples few-shot : les segments de Rt\mathcal{R}_t sont placés dans son contexte aux côtés de la scène courante, et il y prête attention en formant le plan sts_t. C'est la voie bien comprise, et elle l'est pour une bonne raison : c'est ainsi que fonctionne l'apprentissage en contexte partout ailleurs. Un modèle entraîné uniquement à imiter ne prête pas attention de lui-même aux exemples en contexte ; il l'apprend une fois, en une seule étape d'amorçage. Ensuite, chaque nouvelle tâche n'est plus qu'une question de démonstrations fournies, tant que cette tâche reste proche de ce que le modèle a déjà vu. Nous nous sommes appuyés sur cette proximité de manière délibérée : les démonstrations testées sont des variations de tâches familières dans un même domaine, pas des sauts vers un comportement réellement nouveau.

Le world model reçoit le même Rt\mathcal{R}_t. Son travail est de se représenter comment la scène va se dérouler, et sur une nouvelle tâche, ces futurs imaginés doivent ressembler à l'exécution démontrée, pas à une supposition générique. Comme les démonstrations sont des vidéos et que le world model raisonne déjà en vidéo, le conditionner tombe naturellement : nous montrons à un modèle vidéo exactement le type d'images dans lequel il travaille déjà. Cela s'avère peu coûteux à activer, une adaptation légère plutôt qu'un réentraînement.

Le bénéfice d'alimenter les deux, c'est la cohérence. Le même Rt\mathcal{R}_t apparaît dans les deux expressions, de sorte que le plan et les futurs imaginés proviennent d'une source commune et s'accordent sur la tâche en cours. Le robot décide quoi faire et se représente le déroulement à partir des mêmes indices, ce qui est exactement ce que l'on veut lorsque les deux doivent s'aligner pour que le mouvement soit juste.

Sans démonstrations :

Robot tentant d'ouvrir une boîte sans démonstrations, de t=1 à t=5

Le robot bloque à l'ouverture de la boîte, car le couvercle diffère légèrement des boîtes précédentes

Avec démonstrations :

Robot ouvrant une boîte avec démonstrations, de t=1 à t=5

Le robot parvient à ouvrir la boîte après avoir reçu des démonstrations de ce nouveau type de boîte, sans réentraînement.

En clair :

Le robot décide à la fois quoi faire et se représente comment cela va se passer, et nous veillons à ce que les vidéos d'exemple nourrissent les deux, afin que son plan et ses attentes concordent.

Le robot sait quand il est en terrain connu

La récupération nous offre un sous-produit utile : une distance. Lorsque nous cherchons les segments de démonstration les plus proches de la vue courante, nous apprenons aussi à quel point ils le sont réellement. En notant dtd_t^{*} le segment le plus proche, cette distance s'écrit :

δt=1ϕ(ot)ϕ(dt)ϕ(ot)ϕ(dt)\displaystyle \delta_t = 1 - \frac{\phi(o_t) \cdot \phi(d_t^{*})}{\|\phi(o_t)\| \, \|\phi(d_t^{*})\|}

C'est une mesure directe de la façon dont les démonstrations couvrent la situation dans laquelle se trouve le robot. Un petit δt\delta_t signifie que la démonstration la plus proche correspond bien : le robot est en terrain balisé. Un grand δt\delta_t signifie qu'il se trouve en territoire moins familier. Cela nous donne un signal naturel du degré de délibération attendu : s'appuyer sur ce qui a été démontré quand la correspondance est étroite, et réfléchir plus soigneusement quand elle ne l'est pas. C'est une manière propre de laisser le système jauger sa propre confiance à partir des démonstrations elles-mêmes plutôt que de la présumer, et cela s'accorde naturellement avec la façon dont Cortex raisonne déjà sur la quantité de planification. Dans nos tests, ce signal reste faible, car les tâches se situent volontairement près du terrain connu.

Distance à la démonstration la plus proche au fil des étapes d'exécution, avec des pics à l'ouverture du couvercle et à l'extraction

Courbe de la distance au segment le plus proche δt\delta_t au fil des étapes d'une exécution : faible et stable tant que le robot est en terrain balisé, les pics marquant les moments que les démonstrations couvrent moins bien.

En clair :

en vérifiant à quel point la situation courante correspond aux vidéos qu'on lui a montrées, le robot sait s'il est en terrain connu et réfléchit davantage quand ce n'est pas le cas.

Pourquoi cela s'accorde avec Cortex

Cela prolonge ce qu'est déjà Cortex plutôt que d'y greffer quelque chose sur le côté. Toute la prémisse du système est que former un plan et l'éprouver contre des futurs imaginés vaut mieux que réagir image par image. L'apprentissage en contexte étend cette prémisse du comment le robot agit au quoi on lui demande de faire : la tâche peut être définie par l'exemple à l'exécution, au lieu d'être figée à l'entraînement. La structure planifier-puis-imaginer reste inchangée. Nous avons seulement changé d'où vient la tâche, et veillé à ce que les deux moitiés du système l'entendent.

Nous restons délibérément prudents sur le périmètre. L'objectif à court terme est la variation adjacente : une nouvelle catégorie d'objets, un nouvel agencement de bac, au sein d'un domaine où Cortex tourne déjà, appris à partir d'une poignée de démonstrations vidéo avec les poids gelés. Le gain est concret et opérationnel : une nouvelle SKU définie par quelques clips, traitée sans cycle d'entraînement. La valeur, c'est le cycle d'entraînement que nous n'avons plus à dépenser.

ConfigurationDémosEntraînementRéussite
Référence entraînée (nouvelle catégorie)jeu completcycle complet97.6%
En contexte, VLM + world model2–3aucun92.6%

C'est la direction que nous construisons. Les démonstrations restent proches du robot, comme une ressource où puiser d'un instant à l'autre ; les parties qui planifient et qui imaginent les voient toutes les deux ; et le degré auquel le robot s'y appuie est mesuré plutôt que supposé. Nous enseignons au robot comme on enseignerait une nouvelle tâche à une personne sur le terrain : lui montrer, et le laisser regarder.

Ressources de l'article

Accédez au contenu et aux fichiers de cet article

Contenu texte

Copiez l'intégralité du texte de l'article dans le presse-papiers pour le lire ou le partager facilement.

Ressources visuelles

Téléchargez dans un fichier ZIP toutes les images haute résolution utilisées dans cet article.

Derniers articles