Fondements des Réseaux de Neurones pour le Deep Learning en Python

Les réseaux de neurones se divisent en trois couches : la couche d'entrée, la couche cachée (ou intermédiaire) et la couche de sortie. Dans un exemple typique, bien que le réseau possède trois couches, seules deux d'entre elles ont des poids, ce qui peut le qualifier de réseau à deux couches, bien que certaines sources le désignent comme réseau à trois couches en comptant toutes les couches.

Un perceptron peut être modélisé mathématiquement. Le biais b peut être traité comme un neurone avec un signal constant de 1 et un poids b. L'équation est :

Fonctions d'Activation

Fonction Sigmoid

def sigmoide(valeur): import numpy as np return 1.0 / (1 + np.exp(-valeur))


### Fonction Échelon

def fonction_echelon(valeur): if valeur > 0: return 1 else: return 0


Pour une implémentation compatible avec les tableaux NumPy :

def fonction_echelon_np(valeur): resultat = valeur > 0 return resultat.astype(np.int64)


Remarque : Les fonctions échelon et sigmoïde sont non linéaires. Les fonctions d'activation des réseaux de neurones doivent être non linéaires car l'utilisation de fonctions linéaires rendrait l'approfondissement des couches inutile, équivalent à un réseau sans couches cachées.

### Fonction ReLU

<div>\[h(x) = \begin{cases} x &amp; (x &gt; 0)\\ 0 &amp; (x \leq 0) \end{cases}\]</div>```

def relu(valeur):
    import numpy as np
    return np.maximum(0, valeur)

Opérations sur les Tableaux Multidimensionnels

Tableaux Multidimensionnels

np.ndim() renvoie la dimension d'un tableau, et np.shape retourne sa forme sous forme de tuple.

Multiplication Matricielle

La multiplication matricielle dans NumPy s'effectue avec np.dot(matA, matB). Par exemple :


import numpy as np
matrice_a = np.array([[1, 2], [3, 4]])
matrice_b = np.array([[5, 6], [7, 8]])
produit = np.dot(matrice_a, matrice_b)

Notez que la multiplication matricielle diffère du calcul de diffusion (broadcasting).

Produit Interne dans les Réseaux de Neurones


entree = np.array([1, 2])
poids = np.array([[1, 3, 5], [2, 4, 6]])
sortie = np.dot(entree, poids)

Implémentation d'un Réseau de Neurones à Trois Couches

Considérons un réseau avec deux neurones d'entrée (couche 0), trois neurones dans la première couche cachée (couche 1), deux neurones dans la seconde couche cachée (couche 2), et deux neurones de sortie (couche 3).

Les calculs pour la couche 1 s'expriment ainsi :

import numpy as np donnee_entree = np.array([1.0, 0.5]) poids1 = np.array([[0.1, 0.3, 0.5], [0.2, 0.4, 0.6]]) biais1 = np.array([0.1, 0.2, 0.3]) activation1 = np.dot(donnee_entree, poids1) + biais1


Appliquer la fonction d'activation sigmoïde pour obtenir la sortie de la couche 1 :

sortie1 = sigmoide(activation1)


Propagation de la couche 1 à la couche 2 :

poids2 = np.array([[0.1, 0.4], [0.2, 0.5], [0.3, 0.6]]) biais2 = np.array([0.1, 0.2]) activation2 = np.dot(sortie1, poids2) + biais2 sortie2 = sigmoide(activation2)


Enfin, propagation de la couche 2 à la couche de sortie, où l'on utilise une fonction d'activation différente :

poids3 = np.array([[0.1, 0.3], [0.2, 0.4]]) biais3 = np.array([0.1, 0.2]) activation3 = np.dot(sortie2, poids3) + biais3 sortie_finale = fonction_identite(activation3)


Remarque : Pour les problèmes de régression, on utilise généralement la fonction identité ; pour la classification binaire, la fonction sigmoïde ; et pour la classification multiclasse, la fonction softmax.

Conception de la Couche de Sortie
---------------------------------

Les réseaux de neurones s'appliquent à la classification et à la régression, avec des fonctions d'activation adaptées en sortie.

### Fonction Identité

def fonction_identite(valeur): return valeur


### Fonction Softmax

<div>\[y_k = \frac{e^{a_k}}{\sum_{i = 1}^{n}e^{(a_i)}}\]</div>Cette fonction calcule la probabilité pour chaque neurone de sortie. Pour éviter les débordements numériques due à l'exponentiation, on peut soustraire le maximum :

def softmax(scores): import numpy as np max_score = np.max(scores) exp_scores = np.exp(scores - max_score) somme_exp = np.sum(exp_scores) probabilites = exp_scores / somme_exp return probabilites


Caractéristiques de la fonction softmax :

- Les sorties sont des valeurs réelles entre 0 et 1.
- La somme des sorties est égale à 1, interprétables comme des probabilités.
- L'ordre des éléments n'est pas modifié par l'application de softmax.

Dans les phases d'inférence après l'apprentissage, la fonction softmax est souvent omise en sortie. Elle est principalement utilisée pendant l'apprentissage. Le nombre de neurones en sortie doit correspondre au nombre de classes pour les problèmes de classification.

Étiquettes: Python NumPy réseaux de neurones deep learning Fonctions d'Activation

Publié le 11 juin à 21h37