Condividi tramite


Che cos'è l'apprendimento avanzato?

Il Deep Learning è un termine generico per le tecniche di Machine Learning che usano reti neurali "profonde". Oggi, l'apprendimento avanzato è una delle aree più visibili dell'apprendimento automatico grazie al successo in aree come visione artificiale, elaborazione del linguaggio naturale e, quando applicate all'apprendimento per rinforzo, scenari come gioco, processo decisionale e simulazione.

Un elemento fondamentale per il successo del Deep Learning è stato la disponibilità di dati, calcolo, framework software e runtime che facilitano la creazione di modelli di rete neurale e la loro esecuzione per l'inferenza. Esempi di tali framework includono TensorFlow, (Py)Torch e ONNX.

ML.NET fornisce l'accesso ad alcuni di questi framework. Di conseguenza, gli utenti di ML.NET possono utilizzare i modelli di deep learning senza dover iniziare da zero.

Deep learning rispetto al machine learning

Il Deep Learning si basa su algoritmi di rete neurale. Ciò è in contrasto con le tecniche di Machine Learning tradizionali o classiche, che usano una gamma più ampia di algoritmi, ad esempio modelli lineari generalizzati, alberi delle decisioni o macchine a vettori di supporto (SVM). L'implicazione più immediata e pratica di questa differenza è che i metodi di Deep Learning possono essere più adatti per alcuni tipi di dati. In alcuni casi, le tecniche classiche di machine learning, come gli alberi con boosting del gradiente (XGBoost, LightGBM e CatBoost), sembrano avere un vantaggio per i dati strutturati. Per dati meno strutturati come testo e immagini, le reti neurali tendono a ottenere prestazioni migliori. L'approccio migliore consiste sempre nell'esperimentare con la tua specifica origine dei dati e il caso d'uso per determinare da solo quali tecniche funzionano meglio per il tuo problema.

Per le attività di Machine Learning classiche, ML.NET semplifica questo processo di sperimentazione tramite Machine Learning automatizzato (AutoML). Per altre informazioni su AutoML, vedere Che cos'è Machine Learning automatizzato (AutoML)?.

Architetture di rete neurale

Una delle principali caratteristiche di differenziazione del Deep Learning è l'uso di algoritmi di rete neurale artificiale. A livello generale, è possibile considerare le reti neurali come una configurazione di "unità di elaborazione" in cui l'output di ogni unità costituisce l'input di un altro. Ognuna di queste unità può accettare uno o più input ed esegue essenzialmente una somma ponderata dei relativi input, applica un offset (o "bias") seguito da una funzione di trasformazione non lineare (chiamata "attivazione"). Sono state usate diverse disposizioni di questi componenti per descrivere i limiti delle decisioni nella classificazione, nelle funzioni di regressione e in altre strutture centrali per le attività di Machine Learning.

diagramma che rappresenta un singolo livello nella rete neurale

L'ultimo decennio ha registrato un aumento dei casi, delle applicazioni e delle tecniche di Deep Learning. Questo aumento è determinato in parte da un'ampia gamma di operazioni che possono essere incorporate nelle reti neurali, un set più completo di disposizioni in cui è possibile configurare queste operazioni e migliorare il supporto computazionale per questi miglioramenti. In generale, le architetture di rete neurale possono essere raggruppate nelle categorie seguenti:

  • Rete neurale feed-forward
  • Rete neurale convoluzionale
  • Rete neurale ricorrente
  • Rete antagonista generativa
  • Trasformatori

Per altri dettagli, vedere la guida alle reti neurali artificiali .

Cosa è possibile usare l'apprendimento avanzato per?

Le architetture di Deep Learning hanno mostrato buone prestazioni nelle attività che coinvolgono dati non strutturati, ad esempio immagini, audio e testo in formato libero. Di conseguenza, il Deep Learning è stato usato per risolvere problemi come:

  • Classificazione delle immagini
  • Classificazione audio
  • Traduzione
  • Generazione di testo
  • Classificazione del testo

Deep learning in ML.NET

Il training di un modello di Deep Learning da zero richiede l'impostazione di diversi parametri, una grande quantità di dati di training etichettati e una grande quantità di risorse di calcolo (centinaia di ore GPU). ML.NET consente di accelerare questo processo usando modelli preaddestrati e tecniche di trasferimento delle conoscenze, ad esempio l'apprendimento trasferibile e l'affinamento.

ML.NET consente anche di importare modelli sottoposti a training in altri framework e di utilizzarli all'interno delle applicazioni .NET.

A seconda dello scenario, è possibile usare la GPU locale e le risorse di calcolo GPU di Azure per eseguire il training e l'utilizzo di modelli di Deep Learning.

Addestrare modelli personalizzati

ML.NET fornisce API per eseguire il training di modelli di Deep Learning personalizzati e usarli per eseguire stime all'interno dell'applicazione .NET.

Queste API sono basate su TorchSharp e TensorFlow.NET.

Classificazione delle immagini

In ML.NET è possibile usare il set di API ImageClassification per eseguire il training di modelli di classificazione delle immagini personalizzati.

Una pipeline di addestramento per la classificazione delle immagini in ML.NET potrebbe essere simile alla seguente:

//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");

Per iniziare a eseguire il training di modelli di classificazione delle immagini personalizzati in ML.NET, vedere Eseguire il training di un modello di classificazione delle immagini in Azure usando Model Builder.

Rilevamento oggetti

ML.NET consente di eseguire il training di modelli di rilevamento oggetti personalizzati in Model Builder usando Azure Machine Learning. Tutto ciò di cui hai bisogno è un set di dati etichettato contenente informazioni sui riquadri di delimitazione e le categorie a cui appartengono gli oggetti nei riquadri di delimitazione.

Il risultato del processo di training è un modello ONNX che può quindi essere usato con la trasformazione ApplyOnnxModel per eseguire stime.

Al momento, non è disponibile alcun supporto locale per il rilevamento degli oggetti in ML.NET.

Per eseguire il training di modelli di rilevamento oggetti personalizzati con ML.NET, vedere Rilevare segnali di stop nelle immagini con l'esercitazione di Model Builder.

Classificazione del testo

La classificazione di testo in formato libero, indipendentemente dal fatto che si tratti di recensioni dei clienti o note aziendali è una parte importante di molti processi.

In ML.NET è possibile usare il set di API TextClassificationTrainer per eseguire il training di modelli di classificazione del testo personalizzati. La tecnica usata per eseguire il training di modelli di classificazione del testo personalizzati in ML.NET è nota come ottimizzazione. La messa a punto ti consente di acquisire un modello già preaddestrato e riaddestrare gli strati specifici del tuo dominio o problema usando i tuoi dati. Ciò offre il vantaggio di avere un modello più personalizzato per risolvere il problema senza dover eseguire il training dell'intero modello da zero. Il modello pre-addestrato usato dall'API di classificazione del testo è un'implementazione di TorchSharp di NAS-BERT.

Una pipeline di addestramento della classificazione del testo in ML.NET può assomigliare a quanto segue:

// 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");

Per iniziare a eseguire il training dei modelli di classificazione del testo con ML.NET, consulta l'esercitazione "Analizzare il sentiment dei commenti di un website in un'applicazione web usando ML.NET Model Builder".

Somiglianza di frasi

Le attività come la ricerca semantica si basano sulla determinazione della somiglianza tra due frasi o passaggi di testo.

ML.NET fornisce il set di API SentenceSimilarityTrainer che usano le stesse tecniche di ottimizzazione e modello sottostante del TextClassificationTrainer. Tuttavia, invece di produrre una categoria come output, produce un valore numerico che rappresenta quanto siano simili due passaggi.

Una pipeline di addestramento e inferenza per la somiglianza delle frasi in ML.NET potrebbe apparire come segue:

// 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");

Per iniziare a usare la somiglianza tra frasi, consultare gli esempi nel repository dotnet/machinelearning-samples .

Utilizzare modelli preaddestrati

ML.NET fornisce API per usare modelli in altri formati, ad esempio TensorFlow e ONNX, e usarli per eseguire stime all'interno dell'applicazione .NET.

Queste API sono basate su TensorFlow.NET e sul runtime ONNX .

TensorFlow

TensorFlow è un framework di Deep Learning con un ecosistema avanzato e un'ampia gamma di modelli con training preliminare disponibili nell'hub TensorFlow.

Con ML.NET, è possibile utilizzare questi modelli TensorFlow preaddestrati per l'inferenza all'interno delle applicazioni .NET.

Una pipeline di inferenza che utilizza un modello TensorFlow preaddestrato potrebbe presentarsi come segue:

// 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");

Per iniziare a utilizzare modelli TensorFlow preaddestrati con ML.NET, vedere il tutorial sull'analisi del sentiment delle recensioni dei film usando un modello TensorFlow preaddestrato nell'esercitazione ML.NET.

ONNX

Il Open Neural Network Exchange (ONNX) è un formato open source progettato per abilitare l'interoperabilità tra framework di Machine Learning e Deep Learning. Ciò significa che è possibile eseguire il training di un modello in uno dei numerosi framework di Machine Learning più diffusi, ad esempio PyTorch, convertirlo in formato ONNX e usare il modello ONNX in un framework diverso, ad esempio ML.NET.

Il repository di modelli ONNX ospita diversi modelli ONNX preaddestrati che è possibile utilizzare per l'inferenza in una vasta gamma di attività.

Con ML.NET, puoi utilizzare questi modelli ONNX preaddestrati per eseguire inferenze all'interno delle tue applicazioni .NET.

Una pipeline di inferenza che utilizza un modello ONNX pre-addestrato potrebbe essere simile alla seguente:

// 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);

Per iniziare a utilizzare modelli ONNX pre-addestrati con ML.NET, vedere l'esercitazione sul rilevamento di oggetti utilizzando ONNX in ML.NET.