Partager via


Qu’est-ce que le deep learning ?

Le Deep Learning est un terme générique désignant les techniques de Machine Learning 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, quand il est appliqué à l’apprentissage par renforcement, des scénarios tels que le jeu, la prise de décision et la simulation.

La disponibilité des données, du calcul, des frameworks logiciels et des runtimes qui facilitent la création de modèles de réseaux neuronaux ainsi que leur exécution à des fins d’inférence est un élément crucial du succès du deep learning. Parmi ces frameworks, citons TensorFlow, (Py)Torch et ONNX.

ML.NET permet d’accéder à certains de ces frameworks. Ainsi, les utilisateurs de ML.NET peuvent tirer parti des modèles de deep learning sans avoir à partir de zéro.

Deep Learning et Machine Learning

Le deep learning repose sur des algorithmes de réseaux neuronaux. Il contraste avec les techniques de machine learning traditionnelles ou classiques qui utilisent une plus grande variété d’algorithmes tels que les modèles linéaires généralisés, les arbres de décision ou les machines à vecteurs de support (SVM). L’implication pratique la plus immédiate de cette différence est une meilleure adaptation des méthodes de deep learning à certains genres de données. Dans certains cas, les techniques de machine learning classiques telles que les arborescences reposant sur le boosting de gradient (XGBoost, LightGBM et CatBoost) semblent présenter un avantage pour les données tabulaires. Pour les données moins structurées, par exemple le texte et les images, les réseaux neuronaux ont tendance à être plus performants. La meilleure approche consiste toujours à effectuer des expériences avec votre source de données et votre cas d’usage spécifiques pour déterminer vous-même les techniques qui conviennent le mieux à votre problème.

Pour les tâches de machine learning classiques, ML.NET simplifie ce processus d’expérimentation via AutoML (machine learning automatisé). Pour plus d’informations sur AutoML, consultez l’article Qu’est-ce que le machine learning automatisé (AutoML) ?.

Architectures de réseaux neuronaux

L’une des principales caractéristiques de différenciation du deep learning est l’utilisation d’algorithmes de réseaux neuronaux artificiels. De manière générale, vous pouvez voir 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 accepter une ou plusieurs entrées, et effectue essentiellement une somme pondérée de ses entrées, applique un décalage (ou « biais »), puis 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 au cœur des tâches de machine learning.

Diagramme représentant une seule couche dans un réseau neuronal

La dernière décennie a vu une augmentation des cas, des applications et des techniques de deep learning. Cette augmentation est due en partie à une variété croissante d’opérations qui peuvent être incorporées dans des réseaux neuronaux, à un ensemble plus riche de situations dans lesquelles ces opérations peuvent être configurées et à une meilleure prise en charge des calculs liés à ces améliorations. En règle générale, les architectures de réseaux neuronaux peuvent être regroupées au sein des catégories suivantes :

  • Réseau neuronal à propagation avant
  • Réseau neuronal convolutif
  • Réseau neuronal récurrent
  • Réseau antagoniste génératif
  • Transformateurs

Pour plus d’informations, consultez le guide des réseaux neuronaux artificiels.

À quelle fin puis-je utiliser le deep learning ?

Les architectures de deep learning ont montré de bonnes performances dans les tâches impliquant des « données non structurées » telles que les images, l’audio et le texte de forme libre. Ainsi, le deep learning est utilisé pour résoudre les problèmes suivants :

  • Classification d’images
  • Classification audio
  • Traduction
  • Génération de texte
  • Classification de texte

Deep learning dans ML.NET

L’entraînement d’un modèle de deep learning à partir de zéro nécessite la définition de plusieurs paramètres, une grande quantité de données d’entraînement étiquetées et une grande quantité de ressources de calcul (des centaines d’heures de GPU). ML.NET vous permet de raccourcir ce processus en utilisant des modèles préentraînés et des techniques de transfert de connaissances telles que le transfer learning 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 les ressources de calcul du GPU local ainsi que celles du GPU Azure pour entraîner et consommer des modèles de deep learning.

Effectuer l'apprentissage des modèles personnalisés

ML.NET fournit des API pour entraîner des modèles de deep learning personnalisés et les utiliser afin d’effectuer des prédictions dans votre application .NET.

Ces API reposent sur TorchSharp et TensorFlow.NET.

Classification d’images

Dans ML.NET, vous pouvez utiliser l’ensemble d’API de ImageClassification pour entraîner des modèles de classification d’images personnalisés.

Un pipeline d’entraînement à la classification d’images dans ML.NET peut ressembler à ce qui suit :

//Append ImageClassification trainer to your pipeline containing any preprocessing transforms
pipeline
    .Append(mlContext.MulticlassClassification.Trainers.ImageClassification(featureColumnName: "Image")
    .Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel");

// Train your model
var model = pipeline.Fit(trainingData);

// Use your 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’objet personnalisés dans Model Builder à l’aide d’Azure Machine Learning. Il vous suffit d’un jeu de données étiqueté contenant des informations sur les rectangles englobants et les catégories auxquelles appartiennent les objets situés dans les rectangles englobants.

Le résultat du processus d’entraînement est un modèle ONNX qui peut ensuite être utilisé avec la transformation ApplyOnnxModel pour effectuer des prédictions.

Pour le moment, il n’existe aucune prise en charge locale de la détection d’objet dans ML.NET.

Pour entraîner des modèles de détection d’objet personnalisés avec ML.NET, consultez le tutoriel sur la détection des panneaux stop dans les images avec Model Builder

Classification de texte

La classification du texte de forme libre, qu’il s’agisse d’avis de clients ou de mémos en entreprise, est une partie importante de nombreux processus.

Dans ML.NET, vous pouvez utiliser l’ensemble d’API de TextClassificationTrainer pour entraîner des modèles de classification de texte personnalisés. La technique utilisée pour entraîner les modèles de classification de texte personnalisés dans ML.NET s’appelle le réglage précis. Le réglage précis vous permet d’utiliser un modèle préentraîné et de réentraîner les couches spécifiques à votre domaine ou votre problème à l’aide de vos propres données. Cela vous permet de disposer d’un modèle mieux adapté pour résoudre votre problème sans avoir à suivre 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 de classification de texte est une implémentation TorchSharp de NAS-BERT.

Un pipeline d’entraînement à la 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 your 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 sur l’analyse des sentiments des commentaires de sites web dans une application web à l’aide de ML.NET Model Builder.

Similitudes de phrases

Les tâches telles que la recherche sémantique reposent sur la détermination du degré de similitude entre deux phrases ou passages de texte.

ML.NET fournit l’ensemble d’API de SentenceSimilarityTrainer, qui utilise le même modèle sous-jacent et les mêmes techniques de réglage précis que TextClassificationTrainer. Toutefois, au lieu de produire une catégorie en sortie, il produit une valeur numérique qui représente le degré de similitude entre deux passages.

Un pipeline d’entraînement et d’inférence pour la similitude des phrases dans ML.NET peut ressembler à ce qui suit :

// Define your pipeline
var pipeline = mlContext.Regression.Trainers.SentenceSimilarity(sentence1ColumnName: "Sentence", sentence2ColumnName: "Sentence2");

// Train your 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 bien démarrer avec la similitude des phrases, consultez les exemples situés 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, par exemple TensorFlow et ONNX, et les utiliser afin d’effectuer des prédictions dans votre application .NET.

Ces API sont basées sur TensorFlow.NET et le runtime ONNX.

TensorFlow

TensorFlow est un framework de Deep Learning doté d’un riche écosystème et d’une variété de modèles préentraînés disponibles dans le hub TensorFlow.

Avec ML.NET, vous pouvez utiliser ces modèles TensorFlow préentraînés, et les utiliser à des fins d’inférence dans 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 à consommer des modèles TensorFlow préentraînés avec ML.NET, consultez le tutoriel sur l’analyse des sentiments des critiques de film à l’aide d’un modèle TensorFlow préentraîné dans ML.NET

ONNX

ONNX (Open Neural Network Exchange) est un format open source conçu pour permettre l’interopérabilité entre les frameworks de Machine Learning et de Deep Learning. Cela signifie que vous pouvez entraîner un modèle dans l’un des nombreux frameworks de Machine Learning connus tels que 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 à des fins d’inférence dans une grande variété de tâches.

Avec ML.NET, vous pouvez utiliser ces modèles ONNX préentraînés, et les utiliser à des fins d’inférence dans 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 à consommer des modèles ONNX préentraînés avec ML.NET, consultez le tutoriel sur la détection d’objet à l’aide d’ONNX dans ML.NET.