Les réseaux de neurones et la data augmentation

Les réseaux de neurones et la data augmentation appliqués à la métallurgie.

Les réseaux de neurones et la data augmentation appliqués à la métallurgie.

Les réseaux de neurones permettent de faire du Machine Learning (traitement de données numériques, analyse d’images ou de séries temporelles). Dans un article précédent, nous abordions les différents algorithmes (KNN, RandomForest, …) de Machine Learning en nous appuyant sur les librairies de Scikit-Learn au travers d’un exemple de Data Set sur des éprouvettes en aluminium de CTIF. Tout d’abord, en reprenant le même Data Set, nous illustrerons à présent le fonctionnement d’un réseau de neurones avec Scikit-Learn. Puis, nous montrerons comment faire du ML avec un Data Set réduit grâce à la Data Augmentation.

L’histoire des réseaux de neurones

On peut distinguer plusieurs dates clefs dans la progression du concept de réseaux de neurones. En 1881 tout d’abord, le terme « neurone » fut introduit dans le vocabulaire médical par l’anatomiste allemand Heinrich Wilhelm Waldeyer. Puis les neurologues Warren McCulloch et Walter Pitts publièrent, dès la fin des années 1950, les premiers travaux sur les réseaux de neurones, avec un article fondateur « What the frog’s eye tells the frog’s brain » (ce que l’œil d’une grenouille dit à son cerveau). Ils proposèrent ensuite un modèle simplifié de neurone biologique (dit neurone formel) et montrèrent que ces réseaux de neurones formels simples peuvent théoriquement réaliser des fonctions logiques, arithmétiques et symboliques complexes. En 1957, le modèle du Perceptron (premier neurone virtuel) – inventé par Frank Rosenblatt – est capable d’apprendre par l’expérience, mais c’est modèle linéaire très limité.

Le développement des réseaux de neurones - GPU open source et data en grand nombre.
Le développement des réseaux de neurones – GPU open source et data en grand nombre.

Puis, en 1986, est inventé le perceptron multi-couches (MLP pour Multi-Layer Perceptron) avec l’algorithme de rétro propagation du gradient de l’erreur (Paul Werbos et Yann Le Cun). Enfin, en 2012, lors d’une compétition organisée par ImageNet, un réseau de neurones parvint pour la première fois à surpasser un humain (taux d’erreur plus réduit) dans la reconnaissance d’images, ce qui déclencha la ruée vers l’IA, enfin crédible aux yeux des industriels. Après être longtemps restée la spécialité de quelques chercheurs, l’IA aura enfin des applications et sera largement connu du grand public. En particulier, la conjonction de 3 facteurs a permis l’émergence de réseaux de neurones de grande taille (Deep Learning) : la mise à disposition d’algorithmes en open-source par les GAFAM, des données numérisées en grand nombre pour l’apprentissage et enfin l’amélioration de la puissance de calcul issue des cartes graphiques (GPU) .

Le fonctionnement d’un réseau de neurones

Réseau de neurones pour faire du Machine Learning.
Réseau de neurones pour faire du Machine Learning.

Un réseau de neurones est constitué de couches de neurones virtuels connectés entre elles. On parle de neurones « fully connected » dans le sens ou chaque neurone d’une couche est connecté avec tous les neurones de la couche précédente et de la couche suivante. Les neurones entre la couche d’entrée (où l’on injecte les variables) et la couche de sortie (résultat à prédire) sont appelés des couches cachées (hidden layers).

La fonction de combinaison et la fonction d’activation

Fonctionnement d'un neurone - fonction de combinaison et d'activation.
Fonctionnement d’un neurone – fonction de combinaison et d’activation.

Chaque neurone est caractérisé par une fonction de combinaison et une fonction d’activation. La fonction de combinaison réalise une combinaison linaire du signal (Xi) des neurones de la couche précédente par un vecteur de poids (Wi).

Fonction d'activation d'un réseau de neurone - sigmoid et tangente hyperbolique.
Fonction d’activation d’un réseau de neurone – sigmoid et tangente hyperbolique.

Alors que la fonction de combinaison est entièrement linéaire, la fonction d’activation -identique pour tout le réseau – introduit une non-linéarité dans la réponse, ce qui reproduit en partie le principe de fonctionnement du neurone biologique. En fonction des résultats de la fonction d’activation, le neurone peut être dans 3 états: inactif (fonction d’activation à zéro), partiellement actif (entre 0 et 1) ou complètement actif (fonction d’activation à 1). Ces paramètres (poids et fonction d’activation) permettent de transformer un signal d’entrée (de la couche de neurones précédents) en un signal de sortie (alimentant les neurones de la couche suivante). Un grand nombre de neurones va augmenter le nombre de poids à calculer et donc le temps de calcul en phase d’apprentissage.

La rétropropagation du gradient de l’erreur

Stochastic Gradient Descent - modification des poids des neurones fonction de l'erreur sur la prédiction.
Stochastic Gradient Descent – modification des poids des neurones fonction de l’erreur sur la prédiction.

Les poids respectifs de chaque neurone sont configurés pendant la phase d’apprentissage avec l’algorithme de rétropropagation du gradient de l’erreur (SGD pour Stochastic Gradient Descent). L’erreur est l’écart entre la valeur de sortie attendue et la valeur prédite. Elle est très grande en début d’apprentissage car les poids des neurones ont été générés aléatoirement (distribution gaussienne), puis elle diminue progressivement. Ainsi, les poids des neurones qui contribuent à engendrer une erreur importante se verront modifiés de manière plus importante que les poids qui contribuent à une erreur marginale. Cette phase d’apprentissage est relativement longue et consommatrice de temps de calcul pour les réseaux importants. Le calcul peut nécessiter un accès au cloud. Par contre, une fois le réseau de neurones entrainé et validé, son utilisation ne nécessite pas de performance particulière en puissance de calcul.

Les réseaux de neurones avec Scikit-Learn

Hyperparamètres du modèle MLPRegressor de Scikit Learn.
Hyperparamètres du modèle MLPRegressor de Scikit Learn.

Dans cet article, nous avons utilisé le modèle du Multi-Layer Perceptron (MLP Regressor) de Scikit-Learn pour entrainer un réseau de neurones. Bien que plus simple d’utilisation, Scikit-Learn offre cependant un potentiel de développement moindre que des outils comme Keras et TensorFlow. Comme dans le cas des autres types d’algorithmes de ML (KNeighborsRegressor, DecisionTreeRegressor, …) évoqués dans l’article précédent, il faut préparer les données (preprocessing) et en particulier enlever les valeurs aberrantes. Dans le cas des réseaux de neurones, l’opération de normalisation des données est obligatoire. Le nombre d’hyperparamètres du modèle MLPRegressor est au nombre de 23, ce qui est beaucoup plus important que dans le cas des autres modèles de ML de Scikit-Learn qui en comptent en général beaucoup moins. Les hyperparamètres à configurer sont en particulier le nombre de couches de neurone, le nombre de neurones par couche, le type de fonction d’activation (sigmoïde, tangente hyperbolique, …) ou le solveur utilisé pour la retro-propagation (« sgd » pour Stochastic Gradient Descent, adam ou lbfgs).

Le nombre de couches de neurones

Score d'un réseau de neurones à 2 couches et optimal a 15 et 8 neurones.
Score d’un réseau de neurones à 2 couches et optimal a 15 et 8 neurones.

L’un des points importants des réseaux de neurones est de configurer le nombre de couches de neurones et le nombre de neurones par couche pour optimiser le score. Pour un Data Set de 1396 données, nous avons évalué un réseau de neurones à 2 couches en faisant varier le nombre de neurones dans chaque couche ; entre 10 et 20 dans la première couche et entre 1 et 10 dans le deuxième couche. La cartographie ci-dessus montre les lignes de score pour la target dureté. On s’aperçoit que le score est faible (<0.70) lorsque le nombre de neurones est trop réduit (< 2) dans la deuxième couche et qu’il existe  un « ilot » optimal pour des couches proches de 15-8 (15 neurones dans la première couche et 8 dans la seconde) où le score est supérieur à 0.90.

La Data Augmentation

Les réseaux de neurones sont réputés pour nécessiter plusieurs centaines (ou milliers de données) pour être pertinent, ce dont ne dispose pas toujours l’utilisateur dans le monde industriel. La Data Augmentation (DA) permet, dans certains cas, de passer outre ce verrou et de multiplier les données à partir d’un Data Set initial limité avant la phase d’apprentissage du modèle. Nous sommes ainsi parti, à dessein, d’un Data Set très réduit comportant quelques alliages de fonderie sous pression et leur tenue respective (Rm) pour 5 températures (20°C, 150°C, 250°C et 300°C) et avons testé deux modèles (KNeighborsRegressor et le réseau de neurones MPLRegressor) du point de vue de leur score et leur potentiel de prédictibilité sur des données non connues.

Augmenter un Data Set très réduit

Data Set augmenté par ajout de bruit aux données initiales.
Data Set augmenté par ajout de bruit aux données initiales.

Le Data Set initial, volontairement sous-dimensionné, est clairement trop réduit pour entraîner un modèle de ML. On réalise la DA en ajoutant aux données initiales les mêmes valeurs bruitées avec un bruit généré aléatoirement. Ce bruit suit une distribution Gaussienne (moyenne 0, écart-type 1) afin de ne pas modifier le résultat global du modèle.

Capacité à prédire des données non connues

Prédiction du réseau de neurones pour des températures élevées non connues.
Prédiction du réseau de neurones pour des températures élevées non connues.

Le réseau de neurones a été entrainé uniquement sur des températures de 20°C à 300°C. Cependant, il s’avère être capable (figure ci-contre) de prédire des points au-delà de 300°C avec une tendance à la diminution du Rm lorsque la température augmente. Même si les valeurs ne sont pas exactes (car dépassant la zone « apprise »), la tendance est intéressante et traduit un comportement bien réel.

A contrario, le modèle des K-plus proches voisins, s’il prédit bien les points entre 20°C et 300°C (en bleu) ne s’avère pas capable de faire des prévisions au-delà de 300°C. En effet, pour la prédiction du Rm d’un point à 400°C, le KNeighbors Regressor va se caler sur le comportement du point le plus proche (ici 300°C) et donc afficher une valeur identique alors que le réseau de neurones va poursuivre la tendance à la baisse du Rm lorsque la température augmente.

Comparatif de prédiction du modèle K-plus proche voisins et réseau de neurones MLPRegressor.
Comparatif de prédiction du modèle K-plus proche voisins et réseau de neurones MLPRegressor.

Prédiction du Rm pour des valeurs de cuivre plus basse

Prédiction du Rm pour des faibles valeurs de cuivre de l'alliage AlSi9Cu3Fe.
Prédiction du Rm pour des faibles valeurs de cuivre de l’alliage AlSi9Cu3Fe.

Lorsque l’on diminue la teneur en cuivre de l’AlSiCu3(Fe) de 3% à 0 %, le réseau de neurones va prédire un abaissement du Rm car les autres alliages du Data Set qui ont une teneur très faible en cuivre possède un Rm plus réduit. Cette diminution est davantage marquée à faible température et devient très réduite à plus haute température. A contrario, le modèle ne sait pas prévoir l’impact d’une augmentation du cuivre car dans la base d’apprentissage, aucun alliage n’avait une composition chimique avec des valeurs de cuivre supérieures à 3 %.

Le réglage des paramètres de la Data Augmentation

Influence du nombre de duplication du Data Set initial sur l'erreur commise sur la prédiction du Rm.
Influence du nombre de duplication du Data Set initial sur l’erreur commise sur la prédiction du Rm.

La Data Augmentation reposant sur l’ajout d’une matrice de bruit et la duplication du Data Set initial un grand nombre de fois, nous avons étudié l’impact de ces 2 paramètres sur l’erreur commise (en % du Rm aux 5 températures) pour l’AlSi9Cu3Fe. Nous avons fait varier tout d’abord le nombre de duplication du Data Set initial entre 0 et 60. On s’aperçoit (figure ci-dessus) que lorsque le nombre de duplication est très réduit (< 10) avec donc avec un nombre de données dans le Data Set final lui aussi réduit, l’erreur commise sur la prédiction est très importante (20 % à 60%). Cette erreur absolue moyenne diminue et devient très réduite (< 5 %) à partir d’un taux de duplication de 30 pour rester quasiment stable ensuite. Cette valeur sera à ajuster en fonction du Data Set initial (très réduit ou plus important).

Valeur du coefficient de bruit pour générer les données synthétiques.
Valeur du coefficient de bruit pour générer les données synthétiques.

La matrice de bruit est ajoutée au Data Set avec un coefficient multiplicateur selon la formule Data Set Augmenté = Data Set Initial + Coeff * Matrice de bruit). Ce coefficient multiplicateur va modifier la dispersion des données du Data Set Augmenté et les résultats de prédiction du réseau de neurones. La figure ci-dessus montre que si le bruit est trop faible (coefficient multiplicateur entre 10-3 et 10-2), l’erreur de prédiction est importante (> 30%). En effet, les données sont alors trop semblables au Data Set initial et ne permettent pas un apprentissage correct. A contrario, lorsque le bruit devient trop important (coefficient entre 10 et 100), il génère des données trop « déformées » par rapport aux données initiales et augmente alors l’erreur. Il existe donc une plage de bruit optimale qui correspondant à un coefficient entre 1 et 10.

Conclusions

Pour les calculs de régression, le Machine Learning avec les réseaux de neurones donne en général de meilleurs résultats que les autres algorithmes (régression, k-plus proches voisins, arbres de décision). En particulier, les réseaux de neurones permettent de prédire des tendances sur les paramètres sortant sensiblement du domaine d’apprentissage, ce que peuvent réaliser plus difficilement les autres algorithmes. Enfin, les réseaux de neurones nécessitent généralement une base d’apprentissage importante, ce qui peut être un frein à leur déploiement industriel. Mais comme présenté sur un exemple un peu extrême (un très faible Data Set) la Data Augmentation s’avère être une technique intéressante utilisable pour un grand nombre de type de données (données numériques, images, …).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *