- Le système Autoresearch adopte une structure de boucle d’optimisation sous contraintes dans laquelle un agent LLM modifie
train.py de manière itérative pour améliorer les performances, en automatisant tout le cycle, de la formulation des hypothèses jusqu’à l’évaluation
- Les expériences s’exécutent dans un environnement sandbox basé sur des conteneurs, qui bloque l’accès réseau et l’exécution de code arbitraire
- En utilisant le jeu de données Ukiyo-eVG, l’entraînement exploite environ 11�0 images d’estampes japonaises sur bois et leurs annotations, et un modèle basé sur CLIP atteint un Mean Rank de 34,30 et un R@5 d’environ 53 %
- Les principales améliorations proviennent de l’assouplissement du paramètre temperature (-113 de Mean Rank) et du tuning d’hyperparamètres (-30 de Mean Rank), avec un gain de performance de 54 % obtenu via 13 commits sur 42 expériences en une journée
- L’agent LLM est efficace dans un espace de recherche clairement défini, mais son instabilité augmente après l’étape des changements structurels, ce qui met en évidence les limites d’une recherche entièrement autonome
Idée principale
- Autoresearch repose sur une boucle d’optimisation sous contraintes centrée sur un agent LLM, qui modifie
train.py afin d’améliorer itérativement les métriques d’évaluation
- L’agent lit les instructions dans
program.md et utilise scratchpad.md comme carnet de travail pour consigner le déroulement des expériences
- L’exploration est structurée en plusieurs phases : elle commence par le tuning d’hyperparamètres, passe à de petites modifications structurelles, puis s’étend à une exploration plus libre avec un minimum de contraintes
- La boucle complète suit une structure cyclique : formulation d’hypothèse → modification du code → entraînement → évaluation → commit ou retour en arrière → répétition
- Chaque expérience est limitée à environ 5 minutes afin de favoriser des itérations rapides et de limiter l’overfitting
- L’agent peut modifier librement
train.py dans la limite de temps impartie
-
Sandbox
- Pour éviter les risques liés à l’exécution de code arbitraire, la boucle d’entraînement s’exécute dans un environnement conteneurisé avec accès réseau bloqué
run.sh pilote l’ensemble du flux expérimental, et Claude Code ne peut modifier que train.py et program.md
- L’exécution directe de Python, l’installation via pip, l’accès réseau, les
git push, etc. sont tous interdits
- L’implémentation correspondante est publiée sur GitHub
Jeu de données
- Comme le jeu de données de radiographies médicales utilisé dans l’étude d’origine n’était pas accessible, le jeu de données Ukiyo-eVG a été utilisé à la place
- Il contient environ 11�0 images d’estampes japonaises sur bois ainsi que des annotations texte–boîtes englobantes
- Les boîtes englobantes sont converties en heatmaps gaussiennes ajoutées en entrée du modèle, selon une approche similaire au mécanisme d’attention experte de l’article eCLIP original
- Les heatmaps guident le modèle pour qu’il se concentre sur des zones spécifiques
Configuration expérimentale avec Claude Code
- Claude Code a mis à niveau le code de recherche existant vers un environnement Python récent et a écrit le chargement du nouveau jeu de données ainsi que le scaffolding de la boucle d’expérimentation
- Il a également mis en place les splits de validation croisée, la logique d’évaluation et les idées initiales dans
program.md
- La métrique d’évaluation utilisée était le Mean Rank, et le rapport final inclut aussi le Recall@K
- Le Mean Rank a été retenu pour son interprétation intuitive, mais il est mentionné qu’un Median Rank aurait probablement été plus approprié car moins sensible aux valeurs extrêmes
- Configuration du modèle : backbone CLIP avec ViT-Small (22M) + DistilBERT (66M) + HeatmapProcessor, pour un total d’environ 90M de paramètres
- Entraînement : 800 steps (environ 3 minutes par expérience sur une RTX 4090)
- Évaluation : mesure du Mean Rank et du Recall@K sur un jeu de test de 1�0 images
- Performance de référence : Val Mean Rank 344,68, img→txt R@1 17,2 %, txt→img R@1 16,5 %
Résultats expérimentaux
- Au total, 42 expériences ont été menées en une journée, dont 13 commits et 29 retours en arrière
- Le Mean Rank a baissé de 344,68 à 157,43, soit 54 % de réduction
- Lors de l’entraînement final sur l’ensemble du jeu de données, les scores de test se sont révélés supérieurs aux scores de validation
- Cela suggère que les expériences courtes de 800 steps étaient en situation d’underfitting
- Performance finale sur le test : Mean Rank 34,30, img→txt R@5 53,0 %, txt→img R@5 51,4 %
Principaux points d’amélioration
-
Correction du clamp de temperature (-113 de Mean Rank)
- Dans le code, le paramètre temperature entraînable était plafonné à 2 ; l’agent a assoupli cette contrainte, ce qui a fortement amélioré les performances
- C’est l’effet unitaire le plus important parmi toutes les améliorations
-
Optuna++ (-30 de Mean Rank)
- Les améliorations suivantes proviennent principalement du tuning d’hyperparamètres
- L’augmentation de la dimension de projection et le réajustement du taux d’apprentissage ont apporté 30 points supplémentaires de gain
- L’agent exécute plus vite et plus systématiquement des tâches répétitives et fastidieuses qu’un humain ferait à la main
-
Zone de rendements décroissants
- À partir de la phase 4 (changements structurels), le taux de réussite des hypothèses du LLM chute fortement
- Les modifications du mécanisme d’attention ou les tentatives d’idées audacieuses (moonshot) ont presque toutes échoué
- Dans la seconde moitié de l’exploration, les essais sont devenus largement aléatoires
-
Importance de la sandbox
- Claude Code a parfois montré un comportement instable, oubliant ses permissions et tentant des appels bash incorrects, ou interrompant la boucle pendant l’attente de l’entraînement
- L’exécution totalement autonome a donc encore des limites
Observations finales
- Sur l’ensemble du processus, les 90 % initiaux se sont déroulés sans accroc, tandis que les 10 % restants ont demandé beaucoup d’intervention
- Un agent LLM peut mener efficacement de la recherche en ML dans un espace de recherche clairement défini
- La boucle commit–retour en arrière d’Autoresearch est utile comme stratégie d’exploration structurée
- Mais dès qu’elle s’étend à des zones inconnues, la boucle d’optimisation devient instable
- La contrainte n’autorisant qu’une seule modification par expérience était peut-être trop stricte pour explorer des idées de grande ampleur
- Parmi les pistes d’amélioration proposées figurent l’ajout d’une phase de planification ou l’introduction de sous-agents (subagents)
- Après la fin des expériences, la collaboration avec Claude Code s’est conclue par un retour au quotidien
Remerciements
- Jeu de données Ukiyo-eVG : environ 11K images d’estampes japonaises sur bois avec annotations texte–boîtes englobantes
- Autoresearch : basé sur l’idée originale d’Andrej Karpathy
1 commentaires
Commentaires sur Hacker News
Si le lien principal est lent, suggestion d’essayer la version archive.is
J’utilise souvent les LLM pour explorer des recherches existantes ou réfléchir à un problème autrement 90 % des résultats ne correspondent pas à mon domaine, mais les 10 % restants sont assez utiles En revanche, avoir un agent qui essaie réellement tout ce que le LLM recommande coûte beaucoup trop cher ($$$) La liste de recommandations contient souvent des bibliothèques de niche qui ne sont plus maintenues Cela dit, les « consultants experts » de l’entreprise font souvent des propositions tout aussi absurdes, donc je préférerais encore qu’un agent s’en charge à leur place
La formule « l’agent s’est comporté comme un algorithme d’optimisation d’hyperparamètres » m’a marqué L’essentiel tient à un unique fichier de prompt système,
program.md, avec une boucle du type « améliorer train.py → lancer l’entraînement → évaluer → consigner les résultats » Le reste n’est qu’un modèle de ML quelconqueDonner du code en fonctionnement à un LLM et lui faire répéter correction de bugs, mesure des performances et évaluation de la couverture de tests est l’approche standard de notre équipe Utiliser un modèle différent à chaque itération donnait une impression agréable de nouveau point de vue
Je me demandais pourquoi « Autoresearch » faisait autant parler de lui J’ai toujours pensé que les goulots d’étranglement en IA/ML étaient surtout la qualité des données ou les ressources de calcul, et je ne vois pas en quoi cela améliore ces points
Au final, ça a fonctionné. Le LLM a bien trouvé des bugs et optimisé certaines choses
En regardant l’historique des commits (lien GitHub), on voit que c’était surtout du tuning d’hyperparamètres À ce niveau-là, j’ai l’impression que le coût en tokens ($$$) ne vaut pas le coup
L’article d’origine utilisait des données médicales de radiographie, mais faute d’accès ils les ont remplacées par Ukiyo-eVG (11 k estampes japonaises) Ça m’a semblé être un changement assez étrange. On trouve aussi beaucoup d’images médicales gratuites sur le Cancer Imaging Archive
J’espérais que quelqu’un ferait ce genre d’expérience, donc j’étais content de voir que quelqu’un l’avait vraiment fait Le passage « j’en ai eu assez d’attendre la fin de l’entraînement et j’ai fermé la conversation » m’a fait rire Merci d’avoir partagé les résultats
Cela ressemble moins à de la recherche automatisée qu’à des essais-erreurs structurés Au final, l’essentiel reste la qualité de la métrique d’évaluation. Si elle est faible, on ne fait qu’optimiser plus vite dans la mauvaise direction