Réseau de neurones
L'idée du réseau de neurones informatique - neural network - est de s'inspirer du fonctionnement d'un cerveau humain. Il s'agit d'une technique statistique conceptualisée fin des années 50 dans le cadre d'un algorithme d'apprentissage supervisé de classement binaire, et qui a connu diverses évolutions dans les années suivantes ( modèle de réseau de neurones récurrents, le perceptron à multicouche,...).
Le réseau de neurones est une technique fortement utilisée fin des années et début des années de par sa particularité de pouvoir utiliser entre autre des données non-structurées - à ce moment-là, la reconnaissance manuscrite ; Son utilité a été démontrée à cette époque-là, dans le tri de courrier des services postaux et l'identification des symboles monétaires sur les chèques.
Malgré ses prouesses dans la matière, ce n'est qu'à partir des années 2000 à 2010, que cette technique - rebaptisée Deep learning - a ressurgit et démontré de hautes capacités dans des concepts révolutionnaires tels que la reconnaissance d'images ou la reconnaissance vocale. Cette résurgence est liée entre autre à deux facteurs : d'une part, l'évolution hardware et la capacité des ordinateurs à atteindre des performances considérables grâce notamment à l'utilisation de GPU (Graphic Process Unit) - particulièrement puissant pour les calculs vectoriels - et, d'autre part, également par l'accessibilité à des quantités de données de plus en plus importantes. Les chercheurs dans le domaine se sont en effet rendu compte qu'au plus ils nourrissaient un modèle de données, et au plus, ils définissaient une architecture large grâce aux capacités de calcul, au plus les performances étaient considérables.
L'appellation Deep learning ( apprentissage profond ) - apparue autour de l'année 2005 - est principalement liée à la particularité du fonctionnement de l'architecture des réseaux de neurones ; la « boite noire des couches cachées ».
Pour comprendre un réseau de neurones informatique, il est important de comprendre les fondements d'un réseau de neurones biologique.
Certains schémas et concepts présentés ici sont inspirés du cours Machine Learning d'Andrew Ng, programme créé en collaboration entre Stanford university Online Education et DeepLearning.AI disponible sur Coursera. Retrouvez le cours original ici : Machine Learning by Andrew Ng.
Représentation d'un neurone :
Représentation d'un neurone informatique :
Un humain possède environs à milliards de neurones dans son cerveau. Le rôle d'un neurone - cellule du cerveau - est de transmettre des informations et permettre les activités motrices et cognitives. Concrètement, si au tournant d'un coin de rue, nous nous retrouvons face à un lion échappé d'un zoo, nos neurones vont agir : identification et compréhension du danger ; association avec des nombreuses informations de la situation et des possibilités de recours ; accélération cardiaque pour augmenter le flux sanguin vers les membres et préparer une éventuelle fuite motrice ( malgré qu'il est recommandé de ne pas bouger ! ) etc.
Les neurones communiquent entre eux par des signaux électriques ( influx nerveux ) et sont connectés de part et d'autre grâce aux dendrites et axones. Un neurone reçoit donc une information d'un autre neurone par signal électrique en entrée via les dendrites. Le signal se propage le long de l'axone du neurone pour être renvoyé ensuite à un autre neurone qui s'activera à son tour. Les axones sont composés d'une gaine myéline dans le but d'accélérer la conduction de l'influx nerveux et au plus la fréquence du signal électrique est importante, au plus le neurone va produire des substances chimiques, à savoir les neurotransmetteurs qui permettent la transmission d'information aux autres neurones par les synapses. L'environnement des neurones, dans le système nerveux, est composé de cellule gliales ( 50 % du volume cérébral ) dont le rôle est d'apporter des nutriments et de l'oxygène mais également d'éliminer les cellules mortes.
L'Homme ( avec un grand H ) s'est toujours inspiré de la nature pour de nombreuses évolutions. Nous verrons par la suite la puissance de cette technique statistique, mais il est fondamental de mettre en évidence une chose importante : si nous voulons être capable de créer des intelligences artificielles aussi fortes que celle de l'homme - ( et notons que l'intelligence prend des formes variées telles que la logique, la conscience de soi, l'apprentissage, la créativité, l'émotion,...) - nous devrions être capable de comprendre parfaitement le fonctionnement d'un cerveau humain, ce qui n'est pas encore entièrement le cas. Par exemple, les dernières recherches mettent de plus en plus en évidence les rôles importants - non reproductibles d'un point de vue informatique - des cellules gliales et de la myéline.
Toutefois, si nous nous référons au fonctionnement basique d'un neurone, il pourrait être vulgarisé comme suit : une couche d'entrée reçoit une ou plusieurs informations via les dendrites sous forme de flux électrique ; les flux électriques sont activés dans une certaine densité à travers l'axone pour produire une information de sortie ( flux électrique ) qui servira d'information d'entrée à un autre neurone.
Il est intéressant de faire le parallèle avec le fonction d'un ordinateur qui en réalité est composé de nombreux transistors orchestrés via le Central Processing Unit ( CPU ) et dont le rôle est de contrôler l'intensité d'un signal électrique permettant d'utiliser trois opérateurs : AND, OR et NOT. Ces conditions sont représentées par le passage d’un courant électrique ou le blocage de ce courant qui est au final exprimé en tant que 1 ou 0.
Réseau de Neurones & Régression linéaire/logistique
Le processus d'un réseau de neurone informatique est également relativement simpliste, à savoir : nous avons une ou des données en entrée, cette donnée ou ces données sont traité(es) dans une couche sur base de fonctions d'activation et nous obtenons en sortie une valeur.
En appliquant un zoom sur un neurone informatique, nous découvrons qu'une régression logistique ou une régression linéaire ( selon la fonction d'activation ) est en réalité un modèle simplifié d'un neurone :
= valeurs de la variable explicative ( prédicteur )
= fonction d'activation ( mesure d'élévation de la valeur de sortie ) = probabilité ou estimation
Un réseau de neurones informatique pourrait être considéré comme étant le réseau d'un ensemble de régressions linéaires et/ou logistiques ; les techniques étant définies sur base d'une fonction d'activation par couche (Linéaire, Logistique, Tahn, ReLu, Softmax).
Pour illustrer le fonctionnement d'un réseau de neurones, prenons le cas de la prédiction suivante : un commerçant qui vend des chaussures fait appel à nos services et aimerait que nous l'aidions à prédire si un nouveau modèle de sneakers sera une top ventes ou non afin de s'assurer une gestion des stocks optimale et également savoir s'il doit inclure ces sneakers dans son folder publicitaire du prochain mois.
correspond donc à Top ventes ou pas Top ventes . Il s'agit donc d'une technique supervisée de classement. Si nous disposons d'un seul prédicteur prix ; Nous pourrions définir que le meilleur modèle à utiliser est une régression logistique simple et nous pourrions faire le rapprochement suivant entre un neurone ( une unité d'un réseau de neurones ) et notre régression logistique :
Dans le cas où nous aurions de nombreux prédicteurs, nous appliquerions la fonction suivante de la régression logistique à prédicteurs multiples : . Concrètement, cela signifie qu'un réseau de neurones va estimer des valeurs de paramètres et pour chaque neurones de chaque couche du réseau.
Si nous décidons d'utiliser un réseau de neurones et que nous disposons de plusieurs prédicteurs :
Prix | Coût livraison | Frais marketing | Matière (qualité) | Top Seller |
---|---|---|---|---|
80 € | 5 € | 10 € | 9 | 1 |
50 € | 2 € | 8 € | 6 | 0 |
120 € | 8 € | 15 € | 9 | 1 |
65 € | 3 € | 6 € | 4 | 0 |
... | ... | ... | ... | ... |
95 € | 7 € | 12 € | 3 | 1 |
Architecture d'un réseau de neurones
La particularité d'un réseau de neurones - son architecture -, c'est que l'on va disposer de ce que l'on appelle une couche d'entrée, d'une ou plusieurs couches cachées et d'une couche de sortie. La couche d'entrée et la couche de sortie sont visibles car il s'agit respectivement des valeurs des prédicteurs et de la variable prédite .
Il est par contre impossible en tant que data scientist de savoir ce qui se passe dans une couche cachée. On appelle cela « la boîte noire ». Il ne s'agit aucunement d'une intelligence quelconque de la machine qui - nous l'abordons plus loin - définit les couches cachées en fonctionnant par rétropropagation du gradient de l'erreur.
Bien que toutes les valeurs des soient utilisées comme valeurs d'entrée dans chaque neurone de la couche cachées dans l'exemple ci-dessus, il est important de tenir compte du fait que dans le cadre de son apprentissage, le modèle peut potentiellement annuler des variables ou réduire l'impact de certaines variables sur base de la définition des poids .
Si nous avions accès dans notre exemple à la manière dont le modèle procède dans la couche cachée, nous découvririons peut-être qu'il utilise et regroupe les variables d'entrées selon trois critères ( neurones ), à savoir : le prix abordable, la notoriété et la qualité perçue. Pour la notoriété, bien que le neurone reçoit les informations des coûts de livraison, ces derniers n'ont peut-être pas d'incidence réelle sur la notoriété et sont quasi annulés par le poids ; alors que le prix et les effort marketing ont un impact conséquent. Et finalement que les valeurs de ces trois neurones sont réutilisées en entrée pour le dernier neurone qui sur base de ces informations définit la probabilité d'être un top ventes.
Un réseau de neurones peut avoir de nombreuses couches cachées, on parle alors d'un MLP pour Multi-Layer Perceptron. En tant que data scientist, nous devons d'ailleurs prendre une décision importante : celle d'initier différentes architectures de réseaux de neurones qui seront évaluées pour pouvoir identifier la plus efficiente.
Un réseau de neurones peut être utilisé pour faire un classement ou une estimation, et demande comme prédicteurs, des variables quantitatives ou des variables qualitatives qui ont été transformées soit dans le cadre d'un encodage one-hot soit par le processus de numérisation de variables discrètes. Pour assurer une certain efficience, les données doivent être normalisées avant d'être séparées dans un set d'entrainement et un set de validation.
En tant que data scientist, nous devons définir l'architecture de notre réseau de neurones, c'est à dire le nombre de couches cachées et le nombre de neurones par couches. En réalité, plusieurs architectures sont évaluées. Par exemple, si nous avons variables , nous pourrions définir trois architectures comme suit :
- Input layer = 8 ; Layer_1 = 16 ; Layer_2 = 32 ; Layer_3 = 16 ; output layer = 1
- Input layer = 8 ; Layer_1 = 32 ; Layer_2 = 16 ; output layer = 1
- Input layer = 8 ; Layer_1 = 64 ; Layer_2 = 32 ; Layer_3 = 16 ; Layer_4 = 4 ; output layer = 1
Et même éventuellement tester pour ces trois architectures, des fonctions d'activation différentes entre les couches ( logistic, linear , relu, tahn - voir section fonctions d'activation - ) ainsi que différents taux d'apprentissage et différentes tailles de batch (découpage de sous-ensemble de données pour la mise à jour des paramètres).
Chaque configuration sera lancée et entrainée et le modèle final présentant la meilleure efficience sera sélectionné.
Construction d'une couche
Comme nous l'avons abordé précédemment, une couche - un layer - regroupe un ensemble de neurones et chaque neurone peut être considéré comme étant une régression linéaire et/ou logistique selon la fonction d'activation. En tant que data scientist, nous devons donc identifier l'architecture la plus performante, ce qui signifie le nombre de couche et, par couche, le nombre de neurones.
La différence entre une régression logistique/linéaire et un neurone est que la valeur finale obtenue par un neurone - l'output - est considéré comme la résultat de la fonction d'activation ( qui est égale à la fonction logistique ou linéaire ( des dérivées Tahn, ReLu ou Softmax)).
Le résultat de la couche est un vecteur comprenant chacune des valeurs sortante de chaque neurone. Dans notre exemple ci-dessus, nous constatons que l'input layer correspond à un vecteur ( ), c'est à dire des valeurs pour chaque prédicteur ( prix , frais de livraison , coûts marketing et qualité ). Le résultat correspond à un vecteur ( ) reprenant des valeurs sortantes de chaque neurone à savoir , qui à leur tour deviendront des valeurs d'entrée pour la prochaine couche et ainsi de suite jusqu'à la couche finale.
Si nous avons une seconde couche cachée, il est important de considérer la particularité des annotations de la formule en ce qui concerne les données entrantes qui proviennent de la couche précédente :