# IREN - Introduction aux réseaux neuronnaux
# Un neurone
![](https://i.imgur.com/9EFBuRe.png)
- On reflechis selon les impulsions electriques dans notre cerveau
- Il y a des seuils pour les impulsions electriques
![](https://i.imgur.com/giplUbM.png)
- Poid: $w_0$
- Energie de la part du voisin: $x_0$
- Si on a une mauvaise "connexion", on recoit pas ou peu les informations des voisins
- On a une fonction d'activation $f$ (seuil) pour savoir si on ressort du neurone
- A la sortie on a une combinaison lineaire de l'entree de base
- La fonction d'activation *casse* la linearite
- Les problemes ne se reglent pas lineairement a chaque fois
## Les maths d'un neurone
1. $z=b+\sum_iw_ix_i$
2. $y=\sigma(z)$
avec
- les $i$ entrees $x_i$
- $b$ le biais
- $w_i$ les poids
- $\sigma$ la fonction d'activation
![](https://i.imgur.com/MpH4FwW.png)
- ReLU:
- cancer ? $2,5$ en reponse
- Logistique (sigmoide)
- vrai ou faux
- Tangente hyperbolique
- Varie de $-1$ a $1$
- Choisi entre vrai ou faux
# Un premier reseau neuronal
![](https://i.imgur.com/9L6XulL.png)
Évaluer les couples d’entrée $(1,1)$, $(0,1)$, $(1,0)$ et $(0,0)$ avec $\sigma$ une logistique
- $(0,0) = 0$
# Construction d'un reseau neuronal
Pour construire un réseau neuronal par apprentissage supervisé il faut :
- un grand jeu de données étiquetées par la sortie voulue
- définir l’architecture du réseau avec
- le nombre de couches
- les types de couches
- le nombre de nœuds par couche
- les fonctions d’activations
- les connexions inter-couches
- toutes astuces qui fonctionnent
- une fonction d’erreur pour guider la correction sur les poids
- une méthode pour faire converger le réseau (trouver les bons poids)
> En cas de problème, on sacrifie un poulet.
# Les donnees
Les données doivent être
- très nombreuses (assez pour définir toutes les inconnues du réseau)
- de bonne qualité (pour ne pas tromper le réseau)
*On appronfondira avec des exemples et l’utilisation de Pandas pour nettoyer les données.*
![](https://i.imgur.com/6DgeOCy.png)
Est-ce un champignon ? Précision suivant la qualité des étiquettes.
# L’architecture du réseau
C’est la partie tactique et artistique.
*L’étude des différents réseaux n’entre pas dans le cadre de ce cours d’introduction. On se limitera à quelques réseaux lors des TP.*
![](https://i.imgur.com/2dWzDxd.png)
# La fonction d’erreur
La fonction d’erreur indique de combien le réseau s’est trompé par rapport à
la vérité terrain ($y$ vs $t$). Elle doit
- être dérivable
- correspondre au problème traité
Cette fonction est aussi appelée fonction de coût (*cost function* ou *loss function* en anglais).
## Exemple
- L’erreur quadratique $E = (y − t)^2$
- $E = \log(\cosh(y − t))$ quadratique puis linéaire lorsque l’écart croît
- L’entropie croisée pour des probabilités (valeurs entre $0$ et $1$)
$$
E=-\sum_kt_k\log(y_k)+(1-t_k)\log(1-y_k)
$$
# Une méthode pour trouver les bons poids
Comment l’erreur nous guide pour trouver les poids ?
## Exemple
Vous êtes le directeur et tous les jours vous invitez votre équipe à déjeuner. Il y a le choix entre le plat A, B ou C. Vous payez chaque jour l’addition.
![](https://i.imgur.com/Ymi0H3z.png)
Avec les données $[(5,3,2), 114]$, $[(6,2,2), 108]$, $[(3,4,5), 147]$ qui correspondent aux quantités de chaque plat et au prix global, déduire le prix de chaque plat par une méthode d’apprentissage
### *Que proposez-vous ?*
C'est une equations a 3 inconnues mais on veut faire apprendre au reseau de neurones.
Supposons qu'on met tous les prix a 10euros et qu'au lieu de payer 100euros pour 10 plats, on paye 114euros.
Reflechir comme un reseau neuronal:
- On augmente tous les prix
- On augment les poids en fonction du nombre de fois ou un plat a ete prit
- On fait un pourcentage $\rightarrow$ $50%$
- La somme de tous les $i$ divise par $i_0$
### Utilisons l’erreur pour corriger les poids
L’algorithme consiste à trouver les $w_i$ qui minimisent l’erreur :
1. On initialise les poids à une valeur probable (disons 10 pour tous)
2. On corrige les poids au prorata de leur part dans l’erreur $E = y − t$ :
$$
w_j = w_j − \eta d_j
$$
- $d_j = \frac{E\times i_j}{\sum_ki_k}$
- $\eta$ petit pour éviter de sur-corriger
Déroulons l’algorithme avec $\eta = \frac{1}{10}$:
- $[(5,3,2), 114]$ Notre prix estimé est de 100.
- $d_0=\frac{(y-t)\times i_0}{10} = -7.0$ donc $w_0=10+0.70=10.7$
- $d_1=\frac{(y-t)\times i_1}{10} = -4.2$ donc $w_0=10+0.42=10.42$
- $d_2=\frac{(y-t)\times i_2}{10} = -2.8$ donc $w_0=10+0.28=10.28$
- $[(6,2,2), 108]$ Notre prix estimé est de 105.6 et on obtient
- $w_0=10.84$, $w_1=10.46$ et $w_2=10.33$
- $[(3,4,5), 147]$ Notre prix estimé est de 126.04 et on obtient
- $w_0=11.37$, $w_1=11.16$ et $w_2=11.20$
On peut rejouer les données jusqu’à converger
- la convergence peut être longue avec un petit $\eta$
- cela peut diverger avec un trop grand $\eta$
:::danger
$$
\frac{E\times i_j}{\sum_k i_k} = \alpha\frac{\delta(y-t)^2}{\delta w_j}
$$
derivee partielle par rapport a $w_j$
:::
# Rétropropagation du gradient
![](https://i.imgur.com/1iJPfKY.png)
Fonction logistique
Calculons l’influence du poids $w_{2,2}^2$ sur l'erreur quadratique $E:\frac{\delta E}{\delta w_{2,2}^2}$
La derivee partielle de $y$ par rapport a $z$ est $y(1-y)$
> C'est $e^x$ qui se balade. Il croise $2$ tout panique qui lui dit "Derivee me court apres!" et part en courant pendant que $e^x$ se marre. Ensuite $e^x$ tombe sur un gars qui cherche quelqu'un, et le gars lui demande "T'as pas peur de moi ?", $e^x$ repond "Bah non pourquoi?", le gars lui repond "Bah parce que je suis $\frac{d}{dy}$"
## Que vaut le gradient de $E :\nabla E$?
## Pourquoi ce titre ?