deepNeural

dnnTrain

##ai ##deeplearning ##set_deepneural

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 !

Syntaxe Officielle
proc cas;
deepNeural.dnnTrain /
table={name="nom_table", caslib="nom_caslib"}
inputs={"var1", "var2", ...}
target="var_cible"
nominals={"var_cible", "var_cat1", ...}
hiddens={n1, n2, ...} /* Définit implicitement un MLP */
modelTable={name="nom_modele_existant"} /* Optionnel si hiddens est utilisé */
modelWeights={name="poids_sortie", replace=true}
optimizer={algorithm={method="ADAM"}, maxEpochs=100, miniBatchSize=32}
gpu={devices={1}, precision="FP32"};
quit;

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.

1DATA 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;
9RUN;
10PROC CAS;
11 TABLE.promote / TABLE="xor_data" caslib="casuser";
12QUIT;

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.

1PROC 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};
10QUIT;
Résultat Attendu :
Le journal (log) SAS affichera le résumé de l'entraînement (nombre d'observations lues, temps d'exécution) et créera une table 'poids_simples' contenant les paramètres appris du réseau.
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.

1PROC 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};
22QUIT;
Résultat Attendu :
Un tableau détaillant l'historique d'optimisation époque par époque s'affichera, montrant la baisse de la fonction de perte ('Loss'). L'entraînement s'arrêtera avant les 150 époques si le score de validation stagne pendant 10 époques. Deux tables seront générées : 'poids_finaux' et 'meilleurs_poids'.