# IREN - suite
[Index du cours](http://www.ricou.eu.org/iren/notes_rn.html)
# 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)$
:::warning
On note t (*truth*) la vraie valeur avec l'erreur quadratique
:::
[Correction](http://www.ricou.eu.org/iren/notes_rn.html#R%C3%A9tropropagation%20du%20gradient)
## Que vaut le gradient de $E :\nabla E$?
*Qu'est-ce qu'on modifie pour arriver au bon resultat ?*
Les poids, on a 18 poids donc $\nabla E$ est a dimension 18.
$$
\forall \text{ layer }l, W^l\leftarrow W^l-\eta\nabla E(W^l)
$$
## Pourquoi ce titre ?
On fait une propagation a l'envers, *"retropropagation"* pour remonter l'erreur
# La methode du gradient
Le but est de trouver le vecteur $w$ qui minimise notre erreur $E$
![](https://i.imgur.com/W9U5i9B.png)
Avec un $w_0$ choisi, l'algorithme de descente du gradient est:
$$
w_{t+1}=w_t-\eta\nabla E(W_t)
$$
jusuq'a atteindre un seuil choisi
# Representation graphique
Cas simple: l'erreur est une fonction convexe.
Si on modifie les cas apres chaque donnees, on risque d'osciller
![](https://i.imgur.com/YSjVzEC.png)
:::success
travailler par paquet de données. $\rightarrow$ Notion de batch
:::
Lorsque l’elliptiques est allongée, son gradient est quasiment orthogonal à son axe long ce qui n’est pas du tout la bonne direction vers le minimum.
![](https://i.imgur.com/V3yVlGn.png)
:::success
la convergence sera longue
:::
# Travail sur les donnees
## Jouer sur l'echelle
$$
y=w_0i_0+w_1i_1\\
E=(y-t)^2
$$
![](https://i.imgur.com/rLnghJw.png)
Soit comme jeux de donnees:
$$
\begin{aligned}
&\begin{matrix}
0,1&10&\rightarrow&2\\
0,1&-10&\rightarrow&2\\
\end{matrix}
&\begin{matrix}
1&1&\rightarrow&2\\
1&-1&\rightarrow&2\\
\end{matrix}
\end{aligned}
$$
La fonction d’erreur correspondante a la forme suivante:
![](https://i.imgur.com/ZTxEV9K.png)
:::danger
**normaliser** les données pour éviter des fonctions d’erreur écrasées
:::
## Translation
$$
y=w_0i_0+w_1i_1\\
E=(y-t)^2
$$
![](https://i.imgur.com/Nq7NsDR.png)
Soit comme jeux de donnees:
$$
\begin{aligned}
&\begin{matrix}
101&101&\rightarrow&2\\
101&99&\rightarrow&0\\
\end{matrix}
&\begin{matrix}
1&1&\rightarrow&2\\
1&-1&\rightarrow&0\\
\end{matrix}
\end{aligned}
$$
L’erreur correspondante aux jeux de données a la forme suivante:
![](https://i.imgur.com/unZQvRv.png)
:::danger
**centrer** les données pour éviter des fonctions d’erreur écrasées.
:::
# Les minimums locaux
Une fonction d'erreur n'est pas forcement elliptique, il faut s'attendre a avoir des minimums locaux.
![](https://i.imgur.com/uByhkaS.png)
Le point de convergence dépend du point de départ d’où le risque de finir
dans un minimum local.
> Si on lance une bille, en fonction de la ou elle se trouve elle fini dans un minimum local
*Comment sortir d’un minimum local pour rejoindre un minimum global ?*
# Les solveurs
Pour contrer ces differents problemes, on a differents solveurs
## Moment et Nesterov
On donne une inertie $\alpha$ a la methode:
![](https://i.imgur.com/40xM4zO.png)
On ne calcule pas le gradient au poids des poids, mais aux poids modifies.
Nesterov propose de travailler sur les données mise à jour:
![](https://i.imgur.com/4gzOtxK.png)
![](https://i.imgur.com/56Prtas.png)
![](https://i.imgur.com/FUX1fRY.png)
Ca peut aider a "sortir" des trous et reduire les oscillations
> Si notre bille s'approche d'un trou, on lui dira "Non va pas par la, fait demi-tour"
## RMSprop
Le coef d'apprentissage $\eta$ influence beaucoup la convergence.
On peux choisir autant de $\eta_i$ que de parametres existants: $\eta_i=\varepsilon\mu_i\frac{\delta E}{\delta \omega_i}$
Avec:
![](https://i.imgur.com/nnkhdGr.png)
Ca marche mal avec les "*mini-batches*"
- $9\frac{\delta E}{\delta \omega_i}$ de $0,1$ suivi d'une de $-0,9$ devrait faire du surplace, mais pas avec cette methode
On prefere moyenner les gradients dans le temps, l'algorithme est:
![](https://i.imgur.com/aqeMBq3.png)
## Adagrad
On cherche le **w** aui minimise $E$, donc $\nabla E(w)=0$
Au pas de temps $t$, on est au point $w_t$, on cherche $\delta w$ tel que $\nabla E(w-t+\delta w)=0$ donc avec un developpement limite:
![](https://i.imgur.com/f19tbNy.png)
Avec $\nabla^2E$ la matrice hessienne de $E$.
L'algorithme iteratif est:
![](https://i.imgur.com/LVUWV3S.png)
Calculer l'inverse de la matrice essienne est trop couteux, on va chercher quelque chose qui lui ressemble, $V_t$ pour Adagrad:
![](https://i.imgur.com/YcuNNbc.png)
## Exemple de convergence
Regardons à quelle vitesse convergent différentes méthodes suivant la forme
de la fonction d’erreur.
[An overview of gradient descent optimization algorithms](https://ruder.io/optimizing-gradient-descent/)
# Trois types de reseaux neuronaux
Quelques exemples de reseaux neuronaux:
- reseau simple pour separer des donnees
- Qui a le cancer, qui ne l'a pas
- reseau recursif pour faire des additions
- reseau de convolution pour comprendre une image
![](https://i.imgur.com/qyJp6Mn.png)
*Une idée pour séparer les données sur deux cercles?*
## Separation
Relu defini un demi-plan, on va utiliser 6 Relu $(\nearrow)$ pour faire un cercle grossier et une sigmoide $(\rightsquigarrow)$ pour separer les 2 cercles
![](https://i.imgur.com/nh4Y0PC.png)
## Recursif
![](https://i.imgur.com/otGKR1v.png)
On veut calculer $0101011+1001110$, on fait comme un addition a la main
:::danger
On a besoin d'avoir des retenues (si on a $1+1$ par exemple), c'est un reseau a **memoire**.
:::
Les cellules grises sont la memoire, cad les retenues, des operations precedentes.
:::warning
Ces reseau sont compliques a faire converger, il faut que la memoire fonctionne correctement.
:::
## Convolution
:::success
Les *Convolution Neural network* sont la grande reussite du *deep learning*.
:::
Le but est de travailler sur des images pour en extraire ses caracteristiques
![](https://i.imgur.com/zojnP0V.png)
En entrée nous avons une image $N \times N \times 3$ (en RGB) dont nous diminuonsla surface à chaque couche du réseau pour augmenter sa profondeur.
À la fin on peut voir l’image comme un vecteur de caractéristiques.
Ensuite (pas sur le dessin) on peut utiliser un réseau neuronal classique pour classer l’image.
### Les convolutions
![](https://i.imgur.com/rcyq7eD.png)
:::info
Un filtre est un masque d'une certaine taille dont on a donné une valeur pour chacune des couches
:::
On fait la somme de tous les poids $\times$ toutes les valeurs et on travaille un pixel sur 2.
:::warning
La taille des filtres est le nombre de canaux de l'image de depart.
:::
*Chacun des 5 filtres aura combien de canal ?*
2 car l'image d'arrivee a 2 canaux
### Diminuer la surface
L'exemple précédent saute un pas (travailler un pixel sur 2), qui réduit la surface. Si on a pas de saut de plus de filtre $\rightarrow$ le nombre de données EXPLOSE.
:::info
**pooling**: On réduit la surface de l'image au fur et a mesure qu'on augmente sa profondeur.
:::
![](https://i.imgur.com/KSvGeGT.png)
Le choix du maximum est le plus utilisé. On pourrait faire une moyenne mais cela risque de réduire le contraste de l’image.
### Le Net 5
Le premier CNN, qui a bien fonctionné, pour lire les codes postaux sur les enveloppes, développé en 90 par Yann Le Cun
![](https://i.imgur.com/VCiBbFU.png)
### Evolution des CNN
Les reseaux augmentent en précision, taille et nombre d'opérations.
![](https://i.imgur.com/insDjYW.png)
De plus en plus compliqué:
![](https://i.imgur.com/ImdxGGX.png)
On rajoute des trucs pour améliorer les résultats (ou converger).
L'idée est de reprendre des données antérieures pour ne pas trop oublier. Le saut correspond à l’opération:
$$
y=F(x,w)+x
$$
# Kaggle
Le [Kaggle](https://www.kaggle.com/oricou/code) d'Olivier Ricou