108 lines
3.5 KiB
Markdown
108 lines
3.5 KiB
Markdown
---
|
|
title: "IA : Deep Learing"
|
|
date: 2023-10-24
|
|
tags: ["IA", "jeux"]
|
|
categories: ["Intelligence artificielle", "Cours"]
|
|
mathjax: 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][wiki_neurone] CC-BY.
|
|
|
|

|
|
|
|
|
|
En 1943, les travaux de [Mc Culloch][mcculloch] et [Pitts][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.
|
|
|
|

|
|
|
|
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*.
|
|
|
|
```python
|
|
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...
|
|
|
|

|
|
|
|
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**.
|
|
|
|
[wiki_neurone]:https://commons.wikimedia.org/w/index.php?title=User:Nicolas.Rougier
|
|
[mcculloch]:https://fr.wikipedia.org/wiki/Warren_McCulloch
|
|
[pitts]:https://fr.wikipedia.org/wiki/Walter_Pitts
|