Révisions et IA Générative

Florent Capelli

23 Mars 2024

Petit retour en arrière

IA et Logique

Logique Propositionnelle

  • Présentée dans le TP 1
  • On fabrique des propositions à partir de propositions atomiques :

(ps) ⇒ r

  • p: il pleut
  • s: il y a du soleil
  • r: il y a un arc-en-ciel
p s r F
0 0 0 1
0 0 1 1
0 1 0 1
0 1 1 1
1 0 0 1
1 0 1 1
1 1 0 0
1 1 1 1
  • On peut utiliser les propositions pour encoder de la connaissances sur un système et chercher les modèles possibles (voir TP1).

Résolution

Étant donné une proposition, quels sont ses modèles ?

  • Approche bruteforce : 2n, impossible pour n > 40 en pratique.
  • Problème soupçonné intrinsèquement difficile à résoudre : P vs NP.
  • Outils dédiés très efficaces : SAT Solvers, voir Travail Maison 1.
    • Recherche de modèle guidée par des heuristiques
    • Évite d’essayer des assignations qui ne seront pas des modèles pour des raisons évidentes ou “découvertes”.
    • Exemple:
      • p ET F(q1,…,qr). On n’explorera pas les assignations où p = 0.
      • (p OU q) ET (p OU NON(q)) ET F(q1,…,qr): de même, mais la raison est plus subtile!

D’autres logiques

La logique propositionnelle ne permet pas de tout transcrire :

  • Logique du premier ordre pour des logiques sur des domaines non finis : “Tous les chiens savent nager”.
  • Notions de connaissances, croyances difficile à encoder : logiques modales.
  • Logique non monotones : ajouter de la connaissance peut modifier les fait dérivés.

Approche logique

Avantages :

  • Raisonnement complètement formalisé
  • Corrects et fiable.

Désavantages :

  • Complexité algorithmique de la résolution
  • Complexité de la formalisation :
    • erreurs possibles.
    • subtilité difficile à traduire.
    • connaissance / croyance pas toujours facile à capturer.

IA et Apprentissage

Approche statistique, on apprend depuis des données :

2024-02-19T11:32:03.707360 image/svg+xml Matplotlib v3.6.3, https://matplotlib.org/
2024-02-19T11:19:38.992110 image/svg+xml Matplotlib v3.6.3, https://matplotlib.org/
  • Données D : ensemble de vecteurs d’attributs
    • TP 3 : [7.3, 12, 5.1, 4.3] décrivant la longueur/largeur des sépales et longueur/largeur des pétales d’une iris.
  • On cherche une fonction f(x;p) qui colle aux données et généralise
    • Attention au surapprentissage
  • Problème d’optimisation: quel est la meilleure f ? f* = f(x;p)p minimise une erreur E(p)!

Arbres de décision

Voir TP 3.

l P Poids > 500 Poivron1 Poivron P->Poivron1 oui Chou Chou P->Chou non T Taille < 15 Poivron2 Poivron T->Poivron2 oui Banane Banane T->Banane non Q diamQueue < 0.5 Poivron3 Poivron Q->Poivron3 oui Pomme Pomme Q->Pomme non PV couleur = jaune PV->T oui PV->Q non V couleur = vert V->P oui V->PV non

Pour l’apprendre :

  • On cherche une question qui répartit bien les données dans différentes classes
  • Mesuré par une fonction de mélange (Gini, entropie)
  • On recommence avec les données qu’il reste.

Réseaux de neurones

Voir TP 4

g F1 ReLU w1F3 2 F1->w1F3 w1F4 -1 F1->w1F4 F2 ReLU w2F3 1 F2->w2F3 w2F4 -1 F2->w2F4 F3 σ y₁ y₁ F3->y₁ F4 ReLU y₂ y₂ F4->y₂ w1F1 2.5 w1F1->F1 w2F1 -1 w2F1->F1 w1F2 -1 w1F2->F2 w2F2 1 w2F2->F2 w1F3->F3 w2F3->F3 w1F4->F4 w2F4->F4 x₁ x₁ x₁->w1F1 x₁->w1F2 x₂ x₂ x₂->w2F1 x₂->w2F2
  • Inspiré au départ par des recherches sur le cerveau
  • Décrit un ensemble de fonctions dérivables, très expressives, avec beaucoup de paramètres.
  • Apprentissage : par descente de gradient.
    • Algorithmes efficaces
    • Implémenté sur des GPU (cartes graphiques)
    • Permet de traiter des échelles jusqu’alors inacessibles !

IA générative : une introduction

Exemple

On veut générer des objets : images, textes etc.

Molécules

Autre exemple : générer la structure 3D d’une protéine étant donnée sa séquence d’acide aminés.

https://alphafold.ebi.ac.uk/entry/Q8I3H7

Des outils

Nouvelles techniques ont engendré un intêret accru pour l’IA générative et multiplié les outils disponibles, souvent massivement financé par des grands acteurs de l’informatique :

  • Images : DALL-E, Midjourney, StableDiffusion etc.
  • Modèles de langues : ChatGPT (OpenAI), Llama (Meta), Gemini (Google), Mistral etc.
  • Vidéos : Sora (OpenAI), Gen-2 (Runway), Make-A-Video (Meta)
  • Molécules : AlphaFold (Google)
  • Code informatique : CoPilot (Microsoft)

Formalisation

IA Générative : on veut pouvoir tirer aléatoirement dans un ensemble d’objet O.

  • étant donnés o1, …, ok tirés aléatoirement depuis O selon une distribution D inconnue
  • on veut trouver une distribution D telle que D ≃ D.

Cadre un peu différent de l’apprentissage supervisé : ici on essaie d’apprendre une distribution.

  • Par exemple O peut être l’ensemble des images de taille 512 × 512
  • D : distribution ne considérant que l’ensemble des images représentant la photo d’un visage de quelqu’un.

Idée derrière : https://thispersondoesnotexist.com/

Formalisation : distribution jointe

L’approche précédente ne décrit pas vraiment ce dont on a besoin pour la génération d’images :

  • On veut pouvoir tirer aléatoirement une image décrivant “un cheval à la plage”
  • On a donc une probabilité jointe P(i,d)i est une image et d sa description.
  • On veut tirer i avec probabilité P(id=un cheval à la plage)

On veut donc “apprendre” une probabilité jointe P(X,Y) et être capable, étant donné y, de tirer x avec probabilité P(xY=y).

On a besoin de “modèle” représentant des distributions (et plus des fonctions) :

  • Gaussian mixture model
  • Hidden Markov Model
  • Generative Adverserial Networks: méthode basée sur des réseaux de neurones
  • Transformers: utilisé en particulier par les modèles de langues

Éthique : un florilège

Deepfake

  • Possibilité de générer des images réalistes rapidement et facilement
  • Fine-tuning : outils disponibles peuvent être
  • Spam et crédibilité du texte

Utilisation de données d’entraînement non autorisés

  • Outils entraînés en utilisant des jeux de données massifs (plusieurs terraoctets de données)
  • Ces jeux de données contiennent du matériel protégé par les droits d’auteurs… qui ressurgisse lors de la génération
Source: theguardian.com
Source: theguardian.com

Images générées et droits d’auteurs

Théâtre D’opéra Spatial, gagnants 2022 Colorado State Fair’s annual fine art competition, non éligible (aux US) pour la protection copyright car pas créé par un humain.

Biais racistes et autres

L’IA générative, pour des raisons similaires, souffre des mêmes problèmes que la classification concernant les biais :

“an African man and his fancy house”, Credit: P. Kalluri et al. généré par Stable Diffusion XL

Génération de texte

Approches structurelles

Premières approches (pour la traduction essentiellement) :

  • modélisation de la langue via une grammaire formelle
  • génération de contenu respectant cette grammaire.
  • Difficile de coder la/les sens des mots qui dépendent du contexte.
  • Difficile de formaliser complètement une langue : la grammaire ne décrit pas les usages.
  • Ne semble pas être liée à la façon dont nous apprenons une langue.

Modèles de langue

Un modèle probabiliste de la langue !

On veut pouvoir évaluer la probabilité qu’un mot w apparaissent à la fin d’un texte T.

P(w|T)

Génération de texte

Comment générer un texte avec un modèle de langue ?

On complète mot par mot. On commence avec T= Aujourd’hui il :

  1. Prendre w0 qui maximise P(w|T) : w0= fait.
  2. Prendre w1 qui maximise P(w|T.w0): w1=soleil
  3. Prendre w2 qui maximise P(w|T.w0.w1): w2=END

Génération déterministe : pas très intéressante !

Génération de texte : avec tempéature

  • Au lieu de prendre le mot le plus probable, on tire x ∈ [0,1] aléatoirement.
  • Si x < K, on prend le mot le plus probable.
  • Sinon, on tire w avec probabilité P(w|T).

Température K = 0.8 et T= Aujourd’hui il :

  1. x0 = 0.3 : Prendre w0 qui maximise P(w|T) : w0= fait.
  2. x0 = 0.85 : Prendre w1 avec proba P(w|T.w0): w1=un
  3. x0 = 0.1 : Prendre w2 qui maximise P(w|T.w0.w1): w2=temps

Modèle n-grams

Un modèle de langue n-grams est un modèle donnant la probabilité qu’un mot w apparaisse après une suite w1, …, wn de mots, n fixé :

P(w|w1,…,wn)

On peut l’approximer depuis un corpus de texte. Cependant :

  • Si on a 10000 mots et qu’on veut représenter explicitement cette probabilité pour n = 3, on doit calculer 1016 valeurs
  • Petit contexte : peu pertinent d’un point de vu sémantique…
  • Même si on pouvait avoir de grand contexte : combien de textes faudrait-il pour trouver ces probabilités ?

Succès des modèles de langues récents : capacité à intégrer de gros contextes tout en repérant les parties “pertinentes”.

LLMs

ChatGPT, Mistral, Gemini, etc. sont aujourd’hui appelé Large Language Models :

  • basés sur des architectures en réseaux contenant plusieurs milliards de paramètres,
  • entraînés sur des corpus de texte de plusieurs terraoctets.
  • Plusieurs phases d’apprentissage avec des buts et données différentes :
    1. Entraînement sur un large corpus
    2. Entraînement à résoudre des tâches questions/réponses.
    3. Renforcement : garder les “meilleurs” réponses (selon un score, souvent donné par un humain).

Tokens

GPT 4 utilise 100k tokens différents automatiquement choisis en analysant le corpus de texte.
  • Les mots ne sont pas forcément la bonne unité pour travailler.
  • Par exemple : tourner, tournant, tourniquet, tournons sont tous de la même famille
  • On travaille avec des unités plus fines : les tokens

Apprentissage implicite d’encodages

  • Les réseaux de neurones travaillent plus facilement avec des nombres qu’avec du texte.
  • On a donc un encodage E des mots vers des vecteurs de nombres.
  • Idéalement, ces vecteurs traduisent la sémantique d’un mot.

E(roi) + E(femme) ≃ E(reine)

Idées déjà présentes avant l’apparition des LLMs, voir word2vec (jeux pedantle/semantle basés sur ces outils).

Voir la page de Jean-Philippe Fauconnier où vous trouverez un modèle d’encodage pour le français et des instructions pour l’utiliser avec la librairie Python gensim.

LLMs et Encodages

Les LLMs vont un cran plus loin :

Ils apprennent des encodages d’un mot et de son contexte.

  • utilise une architecture neuronale dédiée : les transformers
  • Un mécanisme appelé attention qui modifie l’importance des mots dans un contexte T.

I called Alice but she did not answer. Her phone was off.

Forces et limites des LLMs

Compréhension de concepts

On observe des comportements de généralisations, compréhension de concepts non explicitement définis :

  • Exemple :
    • Prompt: Il faut empiler de façon stable : un livre, neufs oeufs, un ordinateur portable, une bouteille et un clou.
    • Réponse : Placer les oeufs sur le livre comme une grille 3 × 3 puis l’ordinateur par-dessus. Déposer le reste des objets sur l’ordinateur.

Nécessite un “modèle” physique pour répondre à la questions, qui a été implicitement appris via le langage comme proxy.

Hallucinations

Limite : Connaissances

Les LLMs n’ont pas d’anchrage direct avec des modèles de vérité / de connaissances :

  • “Connaissances” inférées lors de l’entraînement
  • Dépend du corpus, qui peut être pollué (voir manipulé), biaisé.
  • Limite “logique” naturellement induite par le fait que le contexte considéré est borné (rappel : problème de logique du TP 1).

Limite : erreurs humaines

Les LLMs tendent à répéter des intuitions fausses qui sont induites chez les humains par la tournure de certains textes :

Go home ChatGPT, you are drunk.
Euuh… j’aurais essayé…

Le blog de Gil Kalai contient d’autres exemples amusants.

Génération d’images

Modèle de diffusion

StableDiffusion est basé sur un modèle de diffusion.

Une image est générée par débruitages successifs d’une image aléatoire :

Les images

On considère que les images sont des tableaux de pixels.

On a un sous-ensembe V des vraies images, ie, qui représentent “quelque chose” – implicitement définie par notre jeu de données.

Le but est de “débruiter” une image y hors de V, c’est-à-dire de trouver u petit tel que y + u ∈ V.

Apprendre à débruiter…

On suppose qu’on démarre avec une image bruitée de la forme y = x + σϵ.

  • x est une “vraie” image
  • σ est le niveau de bruit
  • ϵ est un bruit, ie des valeurs aléatoires  ∈ [0,1]

On veut apprendre une fonction d(y,σ) qui “approxime” ϵ connaissant y et σ.

On “générera” donc x en faisant y + d(y,σ).

Une autre interprétation : on cherche x une vraie image qui est “proche” de y.

  • Pour cela, on bruite (plusieurs fois) chaque image y du jeu de données avec des valeurs de σ, ϵ différentes
  • On fait un apprentissage supervisé pour apprendre d(y,σ)

… pour débruiter du bruit

Pour générer une image (ou autre chose), on part d’un bruit y0 complètement aléatoire.

yi + 1 := yi + σi ⋅ d(yi,σi)

  • On fixe le nombre t d’étapes où on applique le débruitage
  • σi décroit : plus on affine, plus on considère que le bruit est petit (en général, il décroit exponentiellement vite).
StableDiffusion ou halluciner des images dans du bruit !

En vrai ?

En vrai, c’est beaucoup plus complexe que cela :

  • Besoin de “guider” le débruitage avec le texte
    • encodage sémantique du texte vers des vecteurs
    • jeu de données nécessaire encore plus important
  • Architecture du réseau permettant d’apprendre d assez complexe.