Lien de la note Hackmd
Un neurone
- On reflechis selon les impulsions electriques dans notre cerveau
- Il y a des seuils pour les impulsions electriques
- 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
- $z=b+\sum_iw_ix_i$
- $y=\sigma(z)$
avec
- les $i$ entrees $x_i$
- $b$ le biais
- $w_i$ les poids
- $\sigma$ la fonction d’activation
- 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
É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.
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.
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$)
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.
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$
- On fait un pourcentage $\rightarrow$ $50%$
Utilisons l’erreur pour corriger les poids
L’algorithme consiste à trouver les $w_i$ qui minimisent l’erreur :
- On initialise les poids à une valeur probable (disons 10 pour tous)
- 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$
\(\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
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}$”