Monthly Shaarli

All links of one month in a single page.

August, 2024

Diffusion Models Are Real-Time Game Engines

Des chercheurs de chez Google ont exploré l'utilisation de modèles de génération d'images comme moteur de jeu.

En gros ils génèrent 20 images par seconde qui représentent le gameplay du jeu Doom et ils guident la génération avec les input clavier.

Cela permet d'avancer, de tourner, de tirer etc

Impressionnant mais par contre je doute que ça remplace un jour les vrais engine au vu des problèmes d'hallucinations et des coûts faramineux associés à la génération de 20 images par seconde.

Aussi, les jeux modernes sont bien plus complexes que Doom et donc bien plus dur à simuler uniquement en générant des images. (Simuler un moteur physique par exemple)

Mistral NeMo (16B)

Mistral sort un nouveau modèle en collaboration avec Nvidia.

C'est un petit modèle (16b paramètres) qui avec 68% au MMLU benchmark, joue dans la cour de LlaMa 3 8b (62%) mais assez loin de GPT-4o mini (82%)

L'autre nouvelle importante c'est surtout la nouvelle version de leur tokenizer qui utilise 30% de tokens en moins pour représenter du code !

How Postgres stores data on disk – this one's a page turner
thumbnail

Une explication sur le fonctionnement du stockage de données avec Postgres

Mixture of A Million Experts

Un papier de recherche de Google DeepMind sur un nouveau type de modèle d'IA basée sur l'architecture Mixture of Expert (MoE).

L'idée c'est d'entrainer des millions de plus petits modèles sur des connaissances différentes puis lors d'une requête, sélectionner les modèles les plus à même de répondre.

Un des avantages de ce genre d'architecture c'est qu'il serait plus facile de "désapprendre" ou "apprendre" de nouvelles choses au modèle en supprimant certains des petits modèles ou en ajoutant de nouveaux.

Pour l'instant c'est encore à l'état de recherche mais c'est encourageant pour la suite, notamment pour palier au problème de "désapprentissage" des modèles actuels qui rend leur fine-tuning pour du RAG peu efficace.

Let Me Speak Freely? A Study on the Impact of Format Restrictions on Performance of Large Language Models

Une étude qui démontre que les performances de génération ("raisonnement") des LLMs peuvent être impactées lorsque l'on demande une sortie dans un format spécifique comme du JSON.

Les LLMs suivant ont été testés:

  • Gemini 1.5 flash: presque pas de différence
  • Claude 3 haiku: baisse significative en JSON, pas en XML ou YAML
  • GPT 3.5 Turbo: baisse significative en JSON, XML et meilleures perfs en Yaml
  • LlaMa 3 8B: baisse de performance dans les 3 formats

Comme à chaque fois que l'on cherche à contraindre la génération, par des formats ou des règles d'éthique, la qualité de cette dernière est moindre.

Pour les formats, je pense qu'une chaine de prompt pourrait améliorer les performances avec un premier prompt qui sortirait une génération en texte brute et un deuxième prompt qui prendrait le texte tel quel pour le formater en JSON par exemple.

Introducing Structured Outputs in the API

OpenAI ajoute un nouveau mode à son API qui permet de spécifier un JSON Schema pour assurer à 100% la génération d'un JSON valide.

Ils ne disent pas comment ils font mais il y a de fortes chances qu'ils utilisent une technique similaire à celle de Outlines en transformant le JSON en une machine à état qu'il est facile de suivre à chaque étape.

Concrètement c'est une très bonne nouvelle pour limiter les erreurs de génération structuré !

Bonus dans le SDK TS avec le support des schéma Zod directement:

const MathResponse = z.object({
    steps: z.array(Step),
    final_answer: z.string(),
})
const client = new OpenAI();
const completion = await client.beta.chat.completions.parse({20
    model: 'gpt-4o-2024-08-06',
    messages: [
        {
            "role": "system",
            "content": "You are a helpful math tutor. Only use the schema for math responses.",
        },
        { "role": "user", "content": "solve 8x + 3 = 21" },
    ],
    response_format: zodResponseFormat(MathResponse, 'mathResponse'),
});
The Instruction Hierarchy: Training LLMs to Prioritize Privileged Instructions

OpenAI travaille sur de meilleures techniques pour éviter les instructions malicieuses (prompt injection, prompt extraction, etc).

Ils ont créé une hiérarchie dans les instructions entre les instructions système, celles des utilisateurs et celles des outils.

Notamment, ils décrivent un concept d'instruction "alignées" ou "non-alignées" par rapport au message système que le LLM doit être capable de détecter afin de refuser de répondre à des instructions potentiellement malicieuses.

Comme toujours c'est un travail assez difficile car d'un côté il faut être capable de bloquer les instructions malicieuses et de l'autre ne pas dégrader les capacités du modèle à répondre à des questions ouvertes ou complexes.

En tout cas, leur technique est efficace car elle bloque 80% des prompt injection vs 60 auparavant et sur d'autre types d'instruction malicieuses comme l'extraction de prompt on parle de 95% vs 32%.

Pour l'instant ces techniques ne sont pas encore disponibles dans les modèles de OpenAI mais les prochains seront très certainement entrainés pour mieux résister aux instructions malicieuses.

Finding Trends With Approximate Embedding Clustering

Un article qui explique comment découvrir des tendances lorsque l'on manipule des embeddings.

Par exemple, si l'on a les embeddings des questions posées par les utilisateurs à un Assistant, on peut utiliser la technique de k-mean clustering pour trouver quels sont les sujets les plus abordés dans les questions.

L'article explique comment utiliser Clickhouse pour calculer les centroids de chaque cluster (et donc la meilleure "représentation" du concept) mais il est possible d'utiliser d'autres méthodes, l'algorithme k-mean est assez répandu et de nombreuses implémentations existent

HippoRAG: Neurobiologically Inspired Long-Term Memory for Large Language Models

HippoRAG propose une méthode de RAG avancée capable de répondre à des questions à partir d'informations dispersées dans plusieurs documents.

La méthode commence par une phase d'indexation afin d'extraire les "named entities" et des tuple de relations d'un graphe de connaissances. Par exemple, "Teddy Riner", "Judo", "Paris" sont des entités nommées (NE) et ["Teddy Riner", "est un champion de", "judo"] est une partie du graphe.

Lors de la phase de recherche, ils commencent par extraire les NE de la requête puis ils s'en servent pour parcourir le graphe à l'aide d'un algorithme de type "Page Rank". Entre autre, plus un noeud est loin du noeud de départ (une NE extraite depuis la query) et plus son score est faible.

Les résultats dépassent ceux des benchmark actuels jusqu'à 20 %.

Je trouve que la méthode de construction d'un graphe par LLM afin de s'en servir pour récupérer les informations pertinentes est quelque chose à creuser. Plus une base de connaissances augmente en taille et plus il est difficile d'extraire les connaissances pertinente simplement avec des recherches.

Tous les prompts sont donnés à la fin du papier 👌

Aider is SOTA for both SWE Bench and SWE Bench Lite
thumbnail

Aider est un assistant pour développement dans le terminal.

L'outil est vraiment bien foutu, je suis impressionné par sa capacité à réaliser des tâches en autonomie. Je l'utilise beaucoup pour du refacto par exemple.

C'est actuellement le meilleur assistant, ils obtiennent 18.9% sur le SWE Bench qui évalue les assistants à leur capacité à réaliser des tâches de programmation.

Le dernier SOTA était Devin.

Bref, c'est un super projet et en plus tout est open source! A utiliser d'urgence