Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El aprendizaje profundo es un término paraguas para las técnicas de aprendizaje automático que usan redes neuronales "profundas". En la actualidad, el aprendizaje profundo es una de las áreas más visibles del aprendizaje automático debido a su éxito en áreas como computer vision, procesamiento de lenguaje natural y, cuando se aplica al aprendizaje de refuerzo, escenarios como juego, toma de decisiones y simulación.
Un elemento fundamental para el éxito del aprendizaje profundo ha sido la disponibilidad de datos, procesos, marcos de software y entornos de ejecución que facilitan la creación de modelos de red neuronal y su ejecución para la inferencia. Algunos ejemplos de estos marcos son TensorFlow, (Py)Torch y ONNX.
ML.NET proporciona acceso a algunos de estos marcos. Como resultado, ML.NET los usuarios pueden aprovechar los modelos de aprendizaje profundo sin tener que empezar desde cero.
Aprendizaje profundo frente al aprendizaje automático
El aprendizaje profundo se basa en algoritmos de red neuronal. Esto contrasta con las técnicas de aprendizaje automático tradicionales o clásicas, que usan una variedad más amplia de algoritmos, como modelos lineales generalizados, árboles de decisión o máquinas de vectores de soporte (SVM). La implicación práctica más inmediata de esta diferencia es que los métodos de aprendizaje profundo pueden ser más adecuados para algunos tipos de datos. En algunos casos, las técnicas clásicas de aprendizaje automático, como los árboles de decisión potenciados por gradiente (XGBoost, LightGBM y CatBoost) parecen tener ventaja para los datos tabulares. Para datos menos estructurados como texto e imágenes, las redes neuronales tienden a mejorar el rendimiento. El mejor enfoque es experimentar siempre con el origen de datos y el caso de uso concretos para determinar qué técnicas funcionan mejor para su problema.
En el caso de las tareas clásicas de aprendizaje automático, ML.NET simplifica este proceso de experimentación a través de Machine Learning automatizado (AutoML). Para obtener más información sobre AutoML, consulte ¿Qué es El aprendizaje automático automatizado (AutoML)?.
Arquitecturas de red neuronal
Una de las principales características diferenciadoras del aprendizaje profundo es el uso de algoritmos de red neuronal artificial. En un nivel alto, puede considerar las redes neuronales como una configuración de "unidades de procesamiento" donde la salida de cada unidad constituye la entrada de otra. Cada una de estas unidades puede tomar una o varias entradas y, básicamente, realiza una suma ponderada de sus entradas, aplica una compensación (o "sesgo") y, seguidamente, una función de transformación no lineal (denominada "activación"). Se han utilizado diferentes arreglos de estos componentes para describir los límites de decisión en la clasificación, las funciones de regresión y otras estructuras fundamentales para las tareas de aprendizaje automático.
La última década ha visto un aumento en los casos, las aplicaciones y las técnicas de aprendizaje profundo. Este aumento se basa en parte en una variedad creciente de operaciones que se pueden incorporar en redes neuronales, un conjunto más completo de arreglos en los que se pueden configurar estas operaciones y mejorar la compatibilidad computacional con estas mejoras. En general, las arquitecturas de red neuronal se pueden agrupar en las siguientes categorías:
- Red neuronal de reenvío de fuentes
- Red neuronal convolucional
- Redes neuronales recurrentes
- Red generativa adversaria
- Transformadores
Para obtener más información, consulte la guía redes neuronales artificiales.
¿Para qué puedo usar el aprendizaje profundo?
Las arquitecturas de aprendizaje profundo han mostrado un buen rendimiento en tareas que implican datos no estructurados, como imágenes, audio y texto de forma libre. Como resultado, se ha usado el aprendizaje profundo para resolver problemas como:
- Clasificación de imágenes
- Clasificación de audio
- Traducción
- Generación de texto
- Clasificación de texto
Aprendizaje profundo en ML.NET
El entrenamiento de un modelo de aprendizaje profundo desde cero requiere establecer varios parámetros, una gran cantidad de datos de entrenamiento etiquetados y una gran cantidad de recursos de proceso (cientos de horas de GPU). ML.NET le permite acortar este proceso utilizando modelos previamente entrenados y técnicas de transferencia de conocimiento, como el aprendizaje por transferencia y el ajuste fino.
ML.NET también permite importar modelos entrenados en otros marcos y consumirlos dentro de las aplicaciones .NET.
En función del escenario, puede usar la GPU local, así como los recursos de proceso de AZURE GPU para entrenar y consumir modelos de aprendizaje profundo.
Entrenamiento de modelos personalizados
ML.NET proporciona API para entrenar modelos de aprendizaje profundo personalizados y usarlos para realizar predicciones dentro de la aplicación .NET.
Estas APIs están basadas en TorchSharp y TensorFlow.NET.
Clasificación de imágenes
En ML.NET puede usar el conjunto ImageClassification de API para entrenar modelos de clasificación de imágenes personalizados.
Una canalización de entrenamiento de clasificación de imágenes en ML.NET podría tener un aspecto similar al siguiente:
//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");
Para empezar a entrenar modelos de clasificación de imágenes personalizadas en ML.NET, consulte Entrenamiento de un modelo de clasificación de imágenes en Azure mediante Model Builder.
Detección de objetos
ML.NET permite entrenar modelos de detección de objetos personalizados en Model Builder mediante Azure Machine Learning. Todo lo que necesita es un conjunto de datos etiquetado que contiene información de cuadros delimitadores y las categorías a las que pertenecen los objetos de dichos cuadros.
El resultado del proceso de entrenamiento es un modelo ONNX que luego se puede usar con la transformación ApplyOnnxModel para realizar predicciones.
En este momento, no hay compatibilidad local con la detección de objetos en ML.NET.
Para entrenar modelos de detección de objetos personalizados con ML.NET, consulte el tutorial Detección de señales de detención en imágenes con Model Builder.
Clasificación de texto
Clasificar texto de formato libre, ya sean opiniones de clientes o memorandos empresariales, es una parte importante de muchos procesos.
En ML.NET, puede usar el conjunto TextClassificationTrainer de API para entrenar modelos de clasificación de texto personalizados. La técnica que se usa para entrenar modelos de clasificación de texto personalizados en ML.NET se conoce como ajuste preciso. El ajuste preciso le permite tomar un modelo entrenado previamente y volver a entrenar las capas específicas de su dominio o problema mediante sus propios datos. Esto le ofrece la ventaja de tener un modelo más adaptado para resolver el problema sin tener que pasar por el proceso de entrenamiento del modelo completo desde cero. El modelo entrenado previamente usado por la API de clasificación de texto es una implementación de TorchSharp de NAS-BERT.
Una canalización de entrenamiento de clasificación de texto en ML.NET podría ser similar a la siguiente:
// 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");
Para empezar a entrenar modelos de clasificación de texto con ML.NET, consulte el tutorial Análisis de opiniones de sitios web en una aplicación web mediante ML.NET Generador de modelos.
Similitud de oraciones
Las tareas como la búsqueda semántica se basan en la determinación de la similitud de dos oraciones o pasajes de texto entre sí.
ML.NET proporciona el conjunto SentenceSimilarityTrainer de API que usan el mismo modelo subyacente y técnicas de ajuste preciso que el TextClassificationTrainer. Sin embargo, en lugar de generar una categoría como salida, genera un valor numérico que representa la similitud de dos pasajes.
Una canalización de entrenamiento e inferencia para la similitud de oraciones en ML.NET podría ser similar a la siguiente:
// 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");
Para comenzar con la similitud entre oraciones, consulte los ejemplos en el repositorio dotnet/machinelearning-samples.
Consumo de modelos previamente entrenados
ML.NET proporciona API para consumir modelos en otros formatos, como TensorFlow y ONNX, y usarlos para realizar predicciones dentro de la aplicación .NET.
Estas API se basan en TensorFlow.NET y en el entorno de ejecución de ONNX.
TensorFlow
TensorFlow es un framework de aprendizaje profundo con un ecosistema enriquecido y una variedad de modelos preentrenados disponibles en la TensorFlow Hub.
Con ML.NET, puede tomar estos modelos tensorFlow previamente entrenados y usarlos para la inferencia dentro de las aplicaciones .NET.
Una canalización de inferencia con un modelo de TensorFlow previamente entrenado podría ser similar al siguiente:
// 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");
Para empezar a consumir modelos de TensorFlow previamente entrenados con ML.NET, consulte el tutorial Análisis de opiniones de películas usando un modelo TensorFlow entrenado previamente en ML.NET.
ONNX
El Open Neural Network Exchange (ONNX) es un formato de código abierto diseñado para habilitar la interoperabilidad entre el aprendizaje automático y los marcos de aprendizaje profundo. Esto significa que puede entrenar un modelo en uno de los muchos marcos de aprendizaje automático populares, como PyTorch, convertirlo en formato ONNX y consumir el modelo ONNX en un marco diferente, como ML.NET.
El repositorio de modelos ONNX hospeda varios modelos ONNX previamente entrenados que puede usar para la inferencia en una amplia variedad de tareas.
Con ML.NET, puede tomar estos modelos ONNX previamente entrenados y usarlos para la inferencia dentro de las aplicaciones .NET.
Una canalización de inferencia con un modelo ONNX previamente entrenado podría ser similar al siguiente:
// 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);
Para empezar a consumir modelos ONNX previamente entrenados con ML.NET, consulte el tutorial Detección de objetos mediante ONNX en ML.NET.