Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le Deep Learning est un terme générique pour les techniques d’apprentissage automatique qui utilisent des réseaux neuronaux « profonds ». Aujourd’hui, le Deep Learning est l’un des domaines les plus visibles du Machine Learning en raison de son succès dans des domaines tels que la vision par ordinateur, le traitement du langage naturel et, lorsqu’il est appliqué à l’apprentissage par renforcement, des scénarios tels que le jeu, la prise de décision et la simulation.
Un élément crucial pour le succès du deep learning a été la disponibilité des données, des infrastructures de calcul, des infrastructures logicielles et des runtimes qui facilitent la création de modèles de réseau neuronal et leur exécution pour l’inférence. Parmi ces frameworks, citons TensorFlow, (Py)Torch et ONNX.
ML.NET permet d’accéder à certaines de ces infrastructures. Par conséquent, ML.NET utilisateurs peuvent tirer parti des modèles d’apprentissage profond sans avoir à commencer à partir de zéro.
Deep Learning et Machine Learning
Le Deep Learning s’appuie sur des algorithmes de réseau neuronal. Cela contraste avec les techniques d’apprentissage automatique traditionnelles ou classiques, qui utilisent un plus large éventail d’algorithmes tels que des modèles linéaires généralisés, des arbres de décision ou des machines à vecteurs de support (SVM). L’implication la plus immédiate et pratique de cette différence est que les méthodes d’apprentissage profond peuvent être mieux adaptées à certains types de données. Dans certains cas, les techniques d’apprentissage automatique classiques telles que les arbres à gradient renforcé (XGBoost, LightGBM et CatBoost) semblent avoir un avantage en ce qui concerne les données tabulaires. Pour les données moins structurées telles que le texte et les images, les réseaux neuronaux ont tendance à mieux fonctionner. La meilleure approche consiste toujours à expérimenter votre source de données et votre cas d’usage particuliers pour déterminer pour vous-même quelles techniques fonctionnent le mieux pour votre problème.
Pour les tâches de Machine Learning classiques, ML.NET simplifie ce processus d’expérimentation via Le Machine Learning automatisé (AutoML). Pour plus d’informations sur AutoML, consultez Qu’est-ce que le Machine Learning automatisé (AutoML) ?.
Architectures de réseau neuronal
L’une des principales caractéristiques de l’apprentissage profond est l’utilisation d’algorithmes de réseau neuronal artificiel. À un niveau élevé, vous pouvez considérer les réseaux neuronaux comme une configuration d'« unités de traitement » où la sortie de chaque unité constitue l’entrée d’une autre. Chacune de ces unités peut prendre une ou plusieurs entrées, et effectue essentiellement une somme pondérée de ses entrées, applique un décalage (ou un « biais ») suivi d’une fonction de transformation non linéaire (appelée « activation »). Différentes dispositions de ces composants ont été utilisées pour décrire les limites de décision dans la classification, les fonctions de régression et d’autres structures centrales aux tâches de Machine Learning.
La dernière décennie a connu une augmentation des cas, des applications et des techniques d’apprentissage profond. Cette augmentation est pilotée en partie par une variété croissante d’opérations qui peuvent être incorporées dans des réseaux neuronaux, un ensemble plus riche de dispositions dans laquelle ces opérations peuvent être configurées et une prise en charge améliorée des calculs pour ces améliorations. En général, les architectures de réseau neuronal peuvent être regroupées dans les catégories suivantes :
- Réseau de neurones à propagation directe
- Réseau neuronal convolutionnel
- Réseau neuronal récurrent
- Réseau adversaire dégénératif
- Transformateurs
Pour plus d’informations, consultez le guide réseaux neuronaux artificiels.
Que puis-je utiliser l’apprentissage profond pour ?
Les architectures d’apprentissage profond ont montré de bonnes performances dans les tâches impliquant des données non structurées, telles que des images, de l’audio et du texte de forme libre. Par conséquent, l’apprentissage profond a été utilisé pour résoudre des problèmes tels que :
- Classification d’images
- Classification audio
- Traduction
- Génération de texte
- Classification de texte
Apprentissage profond dans ML.NET
L’apprentissage d’un modèle d’apprentissage profond à partir de zéro nécessite la définition de plusieurs paramètres, une grande quantité de données d’apprentissage étiquetées et une grande quantité de ressources de calcul (centaines d’heures GPU). ML.NET vous permet de raccourcir ce processus à l’aide de modèles préentraînés et de techniques de transfert de connaissances telles que l’apprentissage de transfert et le réglage précis.
ML.NET vous permet également d’importer des modèles entraînés dans d’autres frameworks et de les consommer dans vos applications .NET.
Selon le scénario, vous pouvez utiliser le GPU local ainsi que les ressources de calcul Azure GPU pour entraîner et utiliser des modèles d’apprentissage profond.
Effectuer l'apprentissage des modèles personnalisés
ML.NET fournit des API pour entraîner des modèles d’apprentissage profond personnalisés et les utiliser pour effectuer des prédictions à l’intérieur de votre application .NET.
Ces API sont alimentées par TorchSharp et TensorFlow.NET.
Classification d’images
Dans ML.NET vous pouvez utiliser l’ensemble ImageClassification d’API pour entraîner des modèles de classification d’images personnalisés.
Un pipeline d’apprentissage de classification d’images dans ML.NET peut ressembler à ce qui suit :
//Append ImageClassification trainer to the pipeline containing any preprocessing transforms.
pipeline
.Append(mlContext.MulticlassClassification.Trainers.ImageClassification(featureColumnName: "Image")
.Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel");
// Train the model.
var model = pipeline.Fit(trainingData);
// Use the model for inferencing.
var predictedData = model.Transform(newData).GetColumn<string>("PredictedLabel");
Pour commencer à entraîner des modèles de classification d’images personnalisés dans ML.NET, consultez Entraîner un modèle de classification d’images dans Azure à l’aide de Model Builder.
Détection d’objets
ML.NET vous permet d’entraîner des modèles de détection d’objets personnalisés dans Model Builder à l’aide d’Azure Machine Learning. Tout ce dont vous avez besoin est un jeu de données étiqueté contenant des informations de cadre englobant et les catégories auxquelles appartiennent les objets dans ces cadres englobants.
Le résultat du processus d’apprentissage est un modèle ONNX qui peut ensuite être utilisé avec la transformation ApplyOnnxModel pour effectuer des prédictions.
À ce stade, il n’existe aucune prise en charge locale de la détection d’objets dans ML.NET.
Pour entraîner des modèles de détection d’objets personnalisés avec ML.NET, consultez Détecter des panneaux stop dans les images avec le didacticiel Model Builder.
Classification de texte
La classification du texte de forme libre, que ce soit les avis des clients ou les mémo d’entreprise est une partie importante de nombreux processus.
Dans ML.NET, vous pouvez utiliser l’ensemble TextClassificationTrainer d’API pour entraîner des modèles de classification de texte personnalisés. La technique utilisée pour entraîner des modèles de classification de texte personnalisés dans ML.NET est appelée réglage précis. Le réglage précis vous permet de prendre un modèle préentraîné et de réentraîner les couches spécifiques à votre domaine ou problème à l’aide de vos propres données. Cela vous donne l’avantage d’avoir un modèle plus adapté pour résoudre votre problème sans avoir à passer par le processus d’entraînement de l’ensemble du modèle à partir de zéro. Le modèle préentraîné utilisé par l’API Classification de texte est une implémentation TorchSharp de NAS-BERT.
Un pipeline d’apprentissage de classification de texte dans ML.NET peut ressembler à ce qui suit :
// Define training pipeline using TextClassification trainer
var pipeline =
mlContext.Transforms.Conversion.MapValueToKey("Label","Sentiment")
.Append(mlContext.MulticlassClassification.Trainers.TextClassification(sentence1ColumnName: "Text"))
.Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel"));
// Train the model
var model = pipeline.Fit(trainingData);
// Use your model to make predictions
var predictedData = model.Transform(newData).GetColumn<string>("PredictedLabel");
Pour commencer à entraîner des modèles de classification de texte avec ML.NET, consultez le tutoriel Analyser le sentiment des commentaires sur un site internet dans une application internet à l’aide de Model Builder de ML.NET.
Similarité de phrase
Les tâches telles que la recherche sémantique s’appuient sur la détermination de la façon dont deux phrases ou passages de texte similaires sont entre elles.
ML.NET fournit l’ensemble SentenceSimilarityTrainer d’API qui utilisent le même modèle sous-jacent et les techniques de réglage précis que le TextClassificationTrainer. Toutefois, au lieu de produire une catégorie comme sortie, elle produit une valeur numérique représentant le degré de similitude entre deux passages.
Un pipeline d’apprentissage et d’inférence pour la similarité des phrases dans ML.NET peut ressembler à ce qui suit :
// Define the pipeline.
var pipeline = mlContext.Regression.Trainers.SentenceSimilarity(sentence1ColumnName: "Sentence", sentence2ColumnName: "Sentence2");
// Train the model
var model = pipeline.Fit(trainingData);
// Use the model to make predictions and extract their similarity values.
var score = model.Transform(newData).GetColumn<float>("Score");
Pour commencer à utiliser la similarité des phrases, consultez les exemples dans le dépôt dotnet/machinelearning-samples .
Consommer des modèles préentraînés
ML.NET fournit des API pour consommer des modèles dans d’autres formats tels que TensorFlow et ONNX et les utiliser pour effectuer des prédictions dans votre application .NET.
Ces API sont alimentées par TensorFlow.NET et le Runtime ONNX .
TensorFlow
TensorFlow est une infrastructure d’apprentissage profond avec un écosystème riche et une variété de modèles préentraînés disponibles dans le TensorFlow Hub.
Avec ML.NET, vous pouvez prendre ces modèles TensorFlow préentraînés et les utiliser pour inférer à l’intérieur de vos applications .NET.
Un pipeline d’inférence utilisant un modèle TensorFlow préentraîné peut ressembler à ce qui suit :
// Load TensorFlow model
TensorFlowModel tensorFlowModel = mlContext.Model.LoadTensorFlowModel(_modelPath);
//Append ScoreTensorFlowModel transform to your pipeline containing any preprocessing transforms
pipeline.Append(tensorFlowModel.ScoreTensorFlowModel(outputColumnName: "Prediction/Softmax", inputColumnName:"Features"))
// Create ML.NET model from pipeline
ITransformer model = pipeline.Fit(dataView);
var predictions = model.Transform(dataView).GetColumn<float>("Prediction/Softmax");
Pour commencer à utiliser des modèles TensorFlow préentraînés avec ML.NET, consultez le tutoriel sur l'analyse des sentiments de critiques de films à l'aide d'un modèle TensorFlow préentraîné dans ML.NET.
ONNX
L'Open Neural Network Exchange (ONNX) est un format open source conçu pour permettre l’interopérabilité entre le Machine Learning et les infrastructures d’apprentissage profond. Cela signifie que vous pouvez entraîner un modèle dans l’un des nombreux frameworks machine-learning populaires comme PyTorch, le convertir au format ONNX et consommer le modèle ONNX dans un autre framework comme ML.NET.
Le référentiel de modèles ONNX héberge plusieurs modèles ONNX préentraînés que vous pouvez utiliser pour inférer dans un large éventail de tâches.
Avec ML.NET, vous pouvez prendre ces modèles ONNX préentraînés et les utiliser pour l’inférence à l’intérieur de vos applications .NET.
Un pipeline d’inférence utilisant un modèle ONNX préentraîné peut ressembler à ce qui suit :
// Append ApplyOnnxModel transform to pipeline containing any preprocessing transforms
pipeline.Append((modelFile: modelLocation, outputColumnNames: new[] { TinyYoloModelSettings.ModelOutput }, inputColumnNames: new[] { TinyYoloModelSettings.ModelInput })
// Create ML.NET model from pipeline
var model = pipeline.Fit(data);
// Use the model to make predictions
var predictions = pipeline.Fit(data).GetColumn<float[]>(TinyYoloModelSettings.ModelOutput);
Pour commencer à utiliser des modèles ONNX préentraînés avec ML.NET, consultez le didacticiel sur la détection d’objets à l’aide d’ONNX dans ML.NET.
