==== Mon premier réseau de neurones from scratch ====
//Prérequis : Base en Programmation Orientée Objets (POO) en Python//
=== Qu'est ce qu'un réseau de neurones ? ===
La plupart des articles compare ce concept à celui du cerveau humain. Cette image, bien que parlante, est assez éloignée de la réalité.
Il est plus facile de décrire un réseau de neurones comme une fonction mathématique qui à partir d'un élément initialement donné (input) renvoie un élément (output) désiré.
-
Ainsi un réseau de neurones est constitués des composants suivants :
* Une couche d'entrée (**input layer**), **x**
* Un nombre arbitraire de couches cachées (**hidden layers**)
* Une couche de sortie (**output layer**), **ŷ**
* Un set de poids (**weights**) et de préjugés (**biases**) entre chaque couche, **W** et **b**
* Le choix d'une fonction d'activation (**activation function**) pour chaque couche cachée, **σ**
//Nous choisirons ici la fonction [[https://fr.wikipedia.org/wiki/Sigmo%C3%AFde_(math%C3%A9matiques)|Sigmoïde]] en tant que fonction d'activation.//
-
Le graphique suivant nous montre l'architecture d'un 2-layer Neural Network
(N.B: on exclut l'input layer lorsque l'on compte le nombre de couche dans un réseau de neurones).
{{ :projets:first_example.png?nolink&600 |}}
=== Création de l'objet réseau de neurones ===
Commençons par importer les librairies dont nous aurons besoin :
import numpy as np
Puis créons la classe selon les composants dont nous avons parlé plus tôt :
class NeuralNetwork:
def __init__(self,x,y):
self.input = x
self.weights1 = np.random.rand(self.input.shape[1],4)
self.weights2 = np.random.rand(4,1)
self.y = y
self.output = np.zeros(y.shape)
----
=== Entraînement de notre réseau de neurones ===
L'output **ŷ** d'un 1-layer Neural Network est **ŷ = σ(W1x + b1)**
L'output **ŷ** d'un 2-layer Neural Network est donc **ŷ = σ(W2σ(W1x + b1) + b2)**
On remarque dans les équations ci-dessus que les poids **W** et les préjugés **b** sont les seules variables dont dépend **ŷ**.
Naturellement, trouver les bonnes valeurs pour les poids et les préjugés feront la force de prédiction de votre réseau. Le procédé d'ajustement de ces valeurs à partir des données de départ est appelé **entraînement du réseau de neurones**.