Apprentissage Par R Seaux de Neurones Profonds: BENAISSI Sellami S.benaissi@univ-Bouira - DZ
Apprentissage Par R Seaux de Neurones Profonds: BENAISSI Sellami S.benaissi@univ-Bouira - DZ
Apprentissage Par R Seaux de Neurones Profonds: BENAISSI Sellami S.benaissi@univ-Bouira - DZ
Introduction
BENAISSI Sellami s.benaissi@univ-bouira.dz
1
Introduction
TP1
La fonction d'activation est utilisée pour transformer une entrée illimitée en une sortie ayant
une forme agréable et prévisible.
W = [ 0 ,1 ]
b = 4
w=[ 0 ,1 ] c'est juste une façon d'écrire w1= 0 ,w2=1 sous forme vectorielle.
b
x1 w1
( ) y
x2 w2
4
2 0
f() y
3 1
Les sorties du neurone 0,999 étant donné les entrées X=[ 2 ,3 ]. C'est ça! Ce processus
consistant à transmettre des entrées pour obtenir une sortie est connu sous le nom de
feedforward .
feedforward
allons y
def sigmoid(x):
# Our activation function: f(x) = 1 / (1 + e^(-x))
return 1 / (1 + np.exp(-x))
class Neuron:
def __init__(self, weights, bias):
self.weights = weights
self.bias = bias
x = np.array([2, 3]) # x1 = 2, x2 = 3
print(n.feedforward(x)) # 0.9990889488055994
Ce réseau possède :
- 2 entrées (X1 et X2 ) ,
- une couche cachée avec 2 neurones (ℎ1 et ℎ2 ) , et
- une couche de sortie avec 1 neurone (O1 ).
Notez que les entrées pour O1 sont les sorties de ℎ1 et ℎ2 - c'est ce qui en fait un réseau.
Ce réseau possède :
- 2 entrées (X1 et X2 ) ,
- une couche cachée avec 2 neurones (ℎ1 et ℎ2 ) , et
- une couche de sortie avec 1 neurone (O1 ).
Notez que les entrées pour O1 sont les sorties de ℎ1 et ℎ2 - c'est ce qui en fait un réseau.
A hidden layer is any layer between the input (first) layer and output (last) layer.
There can be multiple hidden layers
Une couche cachée est n’importe quelle couche située entre la couche
d’entrée (premiere) et la couche de sortie (derniere). Il peut y avoir
plusieurs couches cachées
network = OurNeuralNetwork()
x = np.array([2, 3])
print(network.feedforward(x)) # 0.7216325609518421
J'ai arbitrairement choisi les montants des décalages (135 et 66 ) pour que les
chiffres soient jolis. Normalement, vous décaleriez par la moyenne.
Décomposons cela :
• est la valeur prédite de la variable. Cela dépend des résultats de notre réseau.
import numpy as np
Ensuite, la perte d'erreur quadratique moyenne est simplement l'erreur quadratique d'Alice :
Comment le calcule-t-on ?
au lieu de :
au-dessus :
x1 le poids, et x2 est la hauteur. C'est la deuxième fois que nous voyons f'( x )(le dérivé de la
fonction sigmoïde) maintenant ! Dérivons-le :
Nous allons continuer à faire comme si seule Alice était dans notre ensemble de données :
Initialisons tous les poids à 1 et tous les biais envers 0. Si nous effectuons une transmission
anticipée à travers le réseau, nous obtenons :
Nous l'avons fait! Cela nous indique que si nous devions augmenter w1, L augmenterait un peu
en conséquence.
1 TP1 42 Deep learning
Training: Stochastic Gradient
3. Training a Neural Network
Descent Entraînement d'un réseau de neurones
Nous disposons désormais de tous les outils dont nous avons besoin pour former un
réseau de neurones ! Nous utiliserons un algorithme d'optimisation appelé descente de
gradient stochastique (SGD) qui nous indique comment modifier nos pondérations et nos
biais pour minimiser les pertes. Il s'agit essentiellement de cette équation de mise à jour :
est une constante appelée taux d'apprentissage qui contrôle la vitesse à laquelle nous nous
entraînons. Tout ce que nous faisons c'est soustraire de :
Si nous faisons cela pour chaque poids et biais du réseau, la perte diminuera
lentement et notre réseau s'améliorera.
1) Choisissez un échantillon dans notre ensemble de données. C'est ce qui en fait une
2) Calculer toutes les dérivées partielles de perte par rapport aux poids ou aux biais
3) Utilisez l'équation de mise à jour pour mettre à jour chaque poids et biais.
4) Revenez à l'étape 1.
class OurNeuralNetwork:
''' A neural network with:
2 inputs
- a hidden layer with 2 neurons (h1, h2)
- an output layer with 1 neuron (o1)
*** DISCLAIMER ***: The code below is intended to be simple and educational, NOT optimal. Real neural net code looks
nothing like this. DO NOT use this code. Instead, read/run it to understand how this specific network works. '‘’
def __init__(self):
# Weights
self.w1 = np.random.normal()
self.w2 = np.random.normal()
self.w3 = np.random.normal()
self.w4 = np.random.normal()
self.w5 = np.random.normal()
self.w6 = np.random.normal()
# Biases
self.b1 = np.random.normal()
self.b2 = np.random.normal()
self.b3 = np.random.normal()
# Neuron o1
d_ypred_d_w5 = h1 * deriv_sigmoid(sum_o1)
d_ypred_d_w6 = h2 * deriv_sigmoid(sum_o1)
d_ypred_d_b3 = deriv_sigmoid(sum_o1)
d_ypred_d_h1 = self.w5 * deriv_sigmoid(sum_o1)
d_ypred_d_h2 = self.w6 * deriv_sigmoid(sum_o1)
# Neuron h2
d_h2_d_w3 = x[0] * deriv_sigmoid(sum_h2)
d_h2_d_w4 = x[1] * deriv_sigmoid(sum_h2)
d_h2_d_b2 = deriv_sigmoid(sum_h2)
# Neuron h2
self.w3 -= learn_rate * d_L_d_ypred * d_ypred_d_h2 * d_h2_d_w3
self.w4 -= learn_rate * d_L_d_ypred * d_ypred_d_h2 * d_h2_d_w4
self.b2 -= learn_rate * d_L_d_ypred * d_ypred_d_h2 * d_h2_d_b2
# Neuron o1
self.w5 -= learn_rate * d_L_d_ypred * d_ypred_d_w5
self.w6 -= learn_rate * d_L_d_ypred * d_ypred_d_w6
self.b3 -= learn_rate * d_L_d_ypred * d_ypred_d_b3