cours/content/ia/3_deep_learning/index.md

3.5 KiB

title date tags categories mathjax
IA : Deep Learing 2023-10-24
IA
jeux
Intelligence artificielle
Cours
true

L'apprentissage profond -- ou deep learing -- est une branche de l'intelligence artificielle. Il utilise les réseaux de neurones pour résoudre des tâches complexes. Ces techniques ont permi des progès significatif et rapide dans des domaines tels que la reconnaissances d'écritures, la vision par ordinateur, les traitements automatisés du lancages etc.

Il existe deux catégories d'apprentissage profond :

  • supervisé: l'algorithme d'apprentissage est entraîné avec des jeux de données etiquettés afin de produire les résultats attendus;
  • non supervisé: les données ne sont pas étiquetées, c'est à l'algorithme de découvrir les structures sous-jascentes.

Ces deux méthodes sont totalement différentes, nou étudirons seulement l'entraînement supervisé dans le cadre de ce cours.

Un neurone

D'abord il y a le neurone biologique en voici un schéma, crédits Nicolas Rougier CC-BY.

Schéma de neurone biologique

En 1943, les travaux de Mc Culloch et Pitts mène à la publication de l'article « A logical calculus of the Ideas Immanent in Nervous activity » dans Bulletin of Mathematical Biophysics, University of Chicago Press. Ces travaux mènerons à la définission du *neurone formel.

Neurone formel

C'est une représentation mathématique et informatique d'un neuronne.

Schéma de fonctionnement de neurone formel

Il se compose d'une ou plusieurs entrées associés à des coefficients (poids). Notre neurone formel calcule la somme pondérée des entrées à laquelle il ajoute un biais puis envoie la sortie dans une fonction d'activation.

Premiers pas en Python

Pour implémenter notre premier neurone formel, nous utiliserons Python et la bibliothèque Numpy.

import numpy as np

"""
La définition mathématique du neurone

x: entrée
w: poids
b: biais
f: fonction d'activation
"""
def neron(x, w , b, f):
    x = np.dot(x, w) + b
    return f(2)

# et maintenant nous allons utiliser notre neurone
# --

# Définissons les entrées
x = np.array([1,2,3,4])
# Nous mettons les poids à 1
w = np.array([1,1,1,1])
# Et notre biais à 1
b = np.array([1])

## Et on l'utilise
neuron(x, w, b, lambda z: np.exp(z))

Fonctions d'activation

C'est une fonction mathématique appliquée à un signal en sortie de notre neurone. Son nom viens de son équivalent biologique potentiel d'activation qui représente le seuil qui entraîne une réponse du neurone une fois atteint.

N'importe quel fonction mathématique peut faire l'affaire, on utilisera cependant les fonctions suivants leurs caractéristiques :

  • Linéaire;
  • Seuil;
  • ReLU (Rectified Linear Unit): \(f(x) = max(0, z)\)
  • Radiale : \( f(x) = \sqrt{1/2\pi{e}^{(-z^{2}/2)}}\)

les réseaux de neurones

D'un neurone vers l'infini...

Exemple d'un réseau de neurones

Dans un réseau de neurones, chacune a son propre poid et biais, les paramètres du réseau sont composés de l'ensemble des poids et biais. Tous les neurones d'une même couche ont les mêmes fonctions.