Académique Documents
Professionnel Documents
Culture Documents
Samuel AGNINDE
Ecole Hassania des Travaux Publics
21/06/2019
ARTIFICIAL NEURAL NETWORK
Définition
L'apprentissage automatique est une technique de modélisation impliquant des données. Cette
définition peut être trop courte pour que les débutants comprennent parfaitement le sens de
l'apprentissage par machine. Laissez-nous élaborer la définition. L’apprentissage automatique est
une technique qui définit le « modèle » à partir d’une vaste collection de « données ».
1
Types de machine learning
2
L'apprentissage en profondeur (Depp Learning) a été appliqué avec succès dans de nombreux
contextes d'apprentissage supervisé. Les réseaux de neurones traditionnels sont appliqués à des fins
de publicité en ligne. Les réseaux de neurones convolutifs (CNN) sont parfaits pour le marquage de
photos et les réseaux de neurones récurrents (RNN) sont utilisés pour la reconnaissance de la parole
ou la traduction automatique.
Apprentissage supervisé
Essentiellement, une stratégie impliquant un enseignant plus intelligent que le réseau lui-même.
Par exemple, prenons l’exemple de reconnaissance faciale. L'enseignant montre au réseau une
multitude de visages et il connaît déjà le nom associé à chaque visage. Le réseau fait ses
suppositions, puis l'enseignant fournit au réseau les réponses. Le réseau peut ensuite comparer ses
réponses aux réponses « correctes » connues et procéder à des ajustements en fonction de ses
erreurs. Notre premier réseau de neurones dans la section suivante suivra ce modèle.
Processus global
Gardons à l’esprit la démarche globale du machine Learning :
3. Une fois la sortie obtenue, nous pouvons la comparer à la sortie voulue et donc calculer
une erreur.
4. On ajuste les paramètres du modèle pour diminuer l’erreur précédemment calculée. Pour
cela on soustrait à chaque paramètre la dérivée de l’erreur par rapport à lui-même (gradient
descendant).
5. On recommence à l’étape 1.
3
L’étape la plus importante est la 4ième. Nous voulons être capable de créer autant de couches que
l’on veut, de n’importe quel type, et d’utiliser n’importe quelle fonction d’activation. Seulement, en
changeant l’architecture du réseau de neurones, on change également la formule littérale du calcul
de la dérivée de l’erreur par rapport aux paramètres.
Cette partie est ce qu’on appelle la passe avant (forward propagation) : on propage
l’entrée X (image, son, texte, etc.) dans le réseau de neurones jusqu’à obtenir la sortie Y. Puis, on
observe une erreur E qu’il faut maintenant diminuer.
4
il existe un paramètre supplémentaire dans backward_propagation, c’est le Learning rate. Ce
paramètre est un optimiseur qui apparait dans la méthode la descente de gradient. Voici à quoi
ressemble en général le réseau :
5
Forward Propagation
La valeur de chaque neurone de sortie peut être calculée comme suit :
Fonction d’activation
Les fonctions de seuillage présentent généralement trois intervalles :
en dessous du seuil, le neurone est non-actif (souvent dans ce cas, sa sortie vaut 0 ou -1) ;
aux alentours du seuil, une phase de transition ;
au-dessus du seuil, le neurone est actif (souvent dans ce cas, sa sortie vaut 1).
La fonction sigmoïde.
6
La fonction de Heaviside.
Apprentissage
Programme
Classe Layer
La classe abstraite Layer, dont les autres couches hériteront, contient les caractéristiques communes
à toutes les couches : une entrée, une sortie, une fonction qui fait la passe avant, et une pour la
passe arrière.
class Layer:
def __init__(self):
self.input = None
self.output = None
raise NotImplementedError
def __init__(self):
self.input = None
self.output = None
raise NotImplementedError
7
# computes dE/dX for a given dE/dY (and update parameters if any)
raise NotImplementedError
Coder la couche FC
from layer import Layer
import numpy as np
class FCLayer(Layer):
self.input = input_data
return self.output
# dBias = output_error
# update parameters
return input_error
8
Couche d’activation
from layer import Layer
class ActivationLayer(Layer):
self.activation = activation
self.activation_prime = activation_prime
self.input = input_data
self.output = self.activation(self.input)
return self.output
Fonction d’activation
import numpy as np
def tanh(x):
return np.tanh(x);
def tanh_prime(x):
return 1-np.tanh(x)**2;
Fonction perte :
import numpy as np
9
return np.mean(np.power(y_true-y_pred, 2));
return 2*(y_pred-y_true)/y_true.size;
import xlrd
loc =(r'C:\Users\O\Desktop\BASE\TRAINING.xlsx')
loc1 =(r'C:\Users\O\Desktop\BASE\OUTPUT.xlsx')
# To open Workbook
wb = xlrd.open_workbook(loc)
wb1 = xlrd.open_workbook(loc1)
sheet = wb.sheet_by_index(0)
sheet1 = wb1.sheet_by_index(0)
x=[]
x_train=[]
10
for i in range(70):
x.append(sheet.row_values(i))
x_train.append(x)
x=[]
z=[]
y_train=[]
for i in range(70):
z.append(sheet1.row_values(i))
y_train.append(z)
z=[]
#print(y_train)
# training data
x_train = np.array(x_train)
y_train = np.array(y_train)
# network
net = Network()
net.add(FCLayer(312,313))
net.add(ActivationLayer(tanh, tanh_prime))
net.add(FCLayer(313, 1))
net.add(ActivationLayer(tanh, tanh_prime))
# train
net.use(mse, mse_prime)
# test
m=[]
11
x_test=[]
m.append(sheet.row_values(50))
x_test.append(m)
x_test = np.array(x_test)
out = net.predict(x_test)
print(out)
Le XOR :
import numpy as np
# training data
# network
net = Network()
net.add(FCLayer(2, 3))
net.add(ActivationLayer(tanh, tanh_prime))
net.add(FCLayer(3, 1))
net.add(ActivationLayer(tanh, tanh_prime))
# train
net.use(mse, mse_prime)
12
# test
x_test = np.array([[[1,0]])
out = net.predict(x_test)
print(out)
Conclusion :
Les réseaux de neurones sont utilisés dans plusieurs domaines notamment :
Les réseaux de neurones sont puissants : on peut presque toujours baisser l’erreur en augmentant le
nombre d’itérations (epoch) et |ou en diminuant le Learning rate.
13