dnnTrain
Description
L'action dnnTrain permet d'entraîner un réseau de neuronesUn réseau de neurones est un modèle d'IA bio-inspiré composé de couches de nœuds interconnectés, capable d'apprendre des relations complexes dans les données pour prédire ou classifier avec précision. profond (DNNRéseau de neurones profond (Deep Neural Network) comprenant plusieurs couches cachées entre l'entrée et la sortie. Il modélise des relations non linéaires complexes à partir de grands volumes de données. - Deep Neural Network) sur vos données. Elle configure et exécute le processus d'optimisation mathématique (descente de gradient, ADAM, L-BFGS, etc.) pour ajuster les poids du modèleReprésentation mathématique entraînée sur des données pour capturer des tendances, prédire des résultats ou classifier des observations via des algorithmes (Régression, Forêt aléatoire, Gradient Boosting). en minimisant la fonction de perte. Que ce soit pour de la régression ou de la classification, cette action est le cœur battant de votre apprentissage profondL'apprentissage profond (Deep Learning) est une branche de l'IA utilisant des réseaux de neurones multicouches pour modéliser des données complexes et automatiser l'extraction de caractéristiques.. Petite astuce : attention à ne pas faire fondre votre processeur en mettant maxEpochs à un million sans utiliser de GPU !
Paramètres Clés
| Nom du paramètre | Description |
|---|---|
| table | Spécifie la table en mémoire contenant les données d'entraînement (paramètre requis). |
| inputs | Liste des variables d'entrée (features) à utiliser pour l'entraînement (paramètre requis). |
| modelWeights | Table CAS de sortie dans laquelle les poids finaux du modèle seront sauvegardés (paramètre requis). |
| target | Spécifie la variable cible (réponse) que le modèle doit apprendre à prédire. |
| hiddens | Liste d'entiers définissant le nombre de neurones pour chaque couche cachée. Son utilisation définit par défaut une architecture Perceptron Multicouche (MLP). |
| acts | Fonctions d'activation (ex: RELU, TANH, LOGISTIC, AUTO) à appliquer aux couches cachées. |
| optimizer | Dictionnaire massif d'options pour l'algorithme d'optimisation (SGD, ADAM, LBFGS), le taux d'apprentissage (learningRate), le nombre d'époques (maxEpochs), etc. |
| gpu | Permet d'accélérer drastiquement l'entraînement en exploitant les cartes graphiques (ex: gpu={devices={1}}). |
| validTable | Table de validation pour évaluer les performances du modèle à chaque époque et, optionnellement, déclencher un arrêt précoce (early stopping). |
Préparation des données
Création d'un jeu de données factice (XOR non linéaire)
Nous allons créer une table contenant un problème de classification non linéaire simple (type XOR) pour démontrer la capacité du réseau de neurones à apprendre des frontières complexes.
| 1 | DATA casuser.xor_data; |
| 2 | call streaminit(12345); |
| 3 | DO i = 1 to 2000; |
| 4 | x1 = rand("Uniform"); |
| 5 | x2 = rand("Uniform"); |
| 6 | IF (x1 > 0.5 and x2 < 0.5) or (x1 < 0.5 and x2 > 0.5) THEN y = 1; ELSE y = 0; |
| 7 | OUTPUT; |
| 8 | END; |
| 9 | RUN; |
| 10 | PROC CAS; |
| 11 | TABLE.promote / TABLE="xor_data" caslib="casuser"; |
| 12 | QUIT; |
Exemples d'utilisation
Entraînement d'un perceptron multicouche (MLP) basique
Cet exemple entraîne un réseau de neurones avec deux couches cachées de 5 neurones chacune, en utilisant la fonction d'activation RELU par défaut. La table des poids est sauvegardée.
| 1 | PROC CAS; |
| 2 | deepNeural.dnnTrain / |
| 3 | TABLE={name="xor_data", caslib="casuser"} |
| 4 | inputs={"x1", "x2"} |
| 5 | target="y" |
| 6 | nominals={"y"} |
| 7 | hiddens={5, 5} |
| 8 | acts={"RELU", "RELU"} |
| 9 | modelWeights={name="poids_simples", caslib="casuser", replace=true}; |
| 10 | QUIT; |
Résultat Attendu :
Entraînement avancé avec Optimiseur ADAM, Dropout et Arrêt précoce
Dans cet exemple, nous poussons les réglages : utilisation de l'optimiseur ADAM, ajout de régularisation par 'dropout' (pour éviter le surapprentissage), suivi de la stagnation sur une table de validation, et sauvegarde des meilleurs poids ('bestWeights') rencontrés pendant l'entraînement.
| 1 | PROC CAS; |
| 2 | deepNeural.dnnTrain / |
| 3 | TABLE={name="xor_data", caslib="casuser"} |
| 4 | validTable={name="xor_data", caslib="casuser"} /* Souvent, on utilise une table séparée pour validation */ |
| 5 | inputs={"x1", "x2"} |
| 6 | target="y" |
| 7 | nominals={"y"} |
| 8 | hiddens={16, 8} |
| 9 | acts={"RELU", "RELU"} |
| 10 | targetAct="SOFTMAX" |
| 11 | errorFunc="ENTROPY" |
| 12 | optimizer={ |
| 13 | algorithm={method="ADAM", learningRate=0.01, beta1=0.9, beta2=0.999}, |
| 14 | maxEpochs=150, |
| 15 | miniBatchSize=64, |
| 16 | dropout=0.1, |
| 17 | stagnation=10 /* Arrêt si pas d'amélioration sur 10 époques consécutives */ |
| 18 | } |
| 19 | seed=42 |
| 20 | modelWeights={name="poids_finaux", caslib="casuser", replace=true} |
| 21 | bestWeights={name="meilleurs_poids", caslib="casuser", replace=true}; |
| 22 | QUIT; |