Réseaux de neurones

Neural network (NN) : Réseau de Neurones (RN).

Motivation

Apprendre à partir de nombreux critères (trouver des hypothèses non-linéaires complexes).

Analyse

Lorsque le nombre de critères est trop grand (IR par ex), l'approche polynomiale devient trop coûteuse en calcul (autant de features que de pixels) et il devient plus intéressant d'utiliser une alternative comme un réseau de neurones.

À l'image des neurones biologiques, un neurone artificiel possède :

Réseau

Un réseau est constitué de `L` couches (souvent représentées de gauche à droite) :

  1. couche de `s_1` entrées (où l'on insèrera les valeurs de `x_1, x_2, ..., x_n`)
  2. `L-2` couches "cachées" : contient `s_n` unités d'activation (nœuds) `a_0^i, a_1^i, ..., a_n^i`. À noter que 1 seule couche cachée peut suffire à beaucoup de besoins, pour peu qu'elle contienne assez de neurones (généralement plus que dans les couches d'entrée et de sortie). Si plus d'une couche cachée est nécessaire, il est généralement recommandé qu'elles aient le même nombre de neurones. Enfin, plus le réseau sera complexe, plus il demandera du temps de calcul (amoindrissant la rapidité de réponse donc) et plus il sera susceptible de faire du surapprentissage.
  3. couche de `s_L` sorties (typiquement constituée de `n` neurones de sorties si la prédiction recherchée à `n` possibilités de réponses, par exemple 26 s'il s'agit de reconnaître une lettre de l'alphabet)

Par exemple pour 1 seule couche "cachée" (2) :

`[[x_0],[x_1],[x_2],[x_3]] -> [[a_1^((2))],[a_2^((2))],[a_3^((2))]] -> hθ(x)`

Lorsqu'un réseau contient plusieurs couches cachées (impliquant autant de niveaux d'abstraction), on parle d'apprentissage profond (deep learning).

Conception

On définit pour chacun des `n` nœuds d'une couche `j` un résultat dépendant de la couche précédente `j-1` et de sa matrice de poids `Θ_j` :

`z_i^((j))=Θ_(i,0)^((j-1)) x_0 + Θ_(i,1)^((j-1)) x_1 + Θ_(i,2)^((j-1)) x_2 + Θ_(i,3)^((j-1)) x_3`

et l'on définit alors la fonction d'activation comme une fonction logistique `g` :

`a_i^((j))=g(z_i^((j)))`

et l'on considère la sortie `h_Θ(x)` comme `a_1^(3)` par exemple (s'il y a 3 couches), recevant la couche 2 comme `X` (i.e. `x_i = a_i`) :

`h_Θ(x)=g(Θ_(1,0)^((2)) a_0 + Θ_(1,1)^((2)) a_1 + Θ_(1,2)^((2)) a_2 + Θ_(1,3)^((2)) a_3)`

Toutefois les résultats peuvent être plus complexes. Dans des problèmes de classification multiple (plus de 2 classes) par exemple, les résultats connus (et donc les hypothèses) auront plutôt la forme d'une matrice (où chaque ligne indique si la classe `i` est reconnue ou non par exemple) :

`h_Θ(x)=[[h_Θ(x)_1],[h_Θ(x)_2],[h_Θ(x)_3],[h_Θ(x)_4]]`

On parlera donc plus généralement de `h_Θ(x)_k` comme étant le `k`ième résultat dans la couche de sortie .

Comme pour d'autres algorithmes de ML, avant de prédire, le réseau doit être "entraîné" (trained) en 2 phases à répéter jusqu'à convergence :

Exemples

Des exemples de RN sont :

Notes