Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O aprendizado profundo é um termo guarda-chuva para técnicas de aprendizado de máquina que usam redes neurais "profundas". Hoje, o aprendizado profundo é uma das áreas mais visíveis do aprendizado de máquina devido ao seu sucesso em áreas como pesquisa visual computacional, processamento de linguagem natural e, quando aplicado ao aprendizado de reforço, cenários como jogo, tomada de decisão e simulação.
Um elemento crucial para o sucesso do aprendizado profundo tem sido a disponibilidade de dados, computação, estruturas de software e runtimes que facilitam a criação de modelos de rede neural e sua execução por inferência. Exemplos dessas estruturas incluem TensorFlow, (Py)Torch e ONNX.
ML.NET fornece acesso a algumas dessas estruturas. Como resultado, ML.NET usuários podem aproveitar os modelos de aprendizado profundo sem precisar começar do zero.
Aprendizado profundo versus aprendizado de máquina
O aprendizado profundo depende de algoritmos de rede neural. Isso contrasta com técnicas de aprendizado de máquina tradicionais ou clássicas, que usam uma variedade maior de algoritmos, como modelos lineares generalizados, árvores de decisão ou SVM (Máquinas vetoriais de suporte). A implicação prática mais imediata dessa diferença é que métodos de aprendizado profundo podem ser mais adequados para alguns tipos de dados. Em alguns casos, técnicas clássicas de aprendizado de máquina, como árvores aumentadas por gradiente (XGBoost, LightGBM e CatBoost), parecem ter uma vantagem para dados tabulares. Para dados menos estruturados, como texto e imagens, as redes neurais tendem a ter um desempenho melhor. A melhor abordagem é sempre experimentar sua fonte de dados específica e usar o caso para determinar para si mesmo quais técnicas funcionam melhor para o seu problema.
Para tarefas clássicas de machine learning, ML.NET simplifica esse processo de experimentação por meio do AutoML (Machine Learning Automatizado). Para obter mais informações sobre AutoML, consulte O que é o AutoML (Machine Learning Automatizado)?.
Arquiteturas de rede neural
Uma das principais características diferenciais do aprendizado profundo é o uso de algoritmos de rede neural artificial. Em um alto nível, você pode pensar em redes neurais como uma configuração de "unidades de processamento" em que a saída de cada unidade constitui a entrada de outra. Cada uma dessas unidades pode usar uma ou muitas entradas e, essencialmente, executa uma soma ponderada de suas entradas, aplica um deslocamento (ou "desvio"), seguido de uma função de transformação não linear (chamada de "ativação"). Diferentes arranjos desses componentes foram usados para descrever os limites de decisão em classificação, funções de regressão e outras estruturas centrais para tarefas de aprendizado de máquina.
Na última década, houve um aumento de casos, aplicativos e técnicas de aprendizado profundo. Esse aumento é impulsionado, em parte, por uma variedade crescente de operações que podem ser incorporadas a redes neurais, um conjunto mais rico de arranjos em que essas operações podem ser configuradas e melhor suporte computacional para essas melhorias. Em geral, as arquiteturas de rede neural podem ser agrupadas nas seguintes categorias:
- Rede neural de avanço de feed
- Rede neural convolucional
- Rede neural recorrente
- Rede de adversários generativos
- Transformadores
Para obter mais detalhes, consulte o guia de redes neurais artificiais .
Para que posso usar o aprendizado profundo?
As arquiteturas de aprendizado profundo têm mostrado um bom desempenho em tarefas que envolvem dados não estruturados, como imagens, áudio e texto de forma livre. Como resultado, o aprendizado profundo tem sido usado para resolver problemas como:
- Classificação de imagem
- Classificação de áudio
- Tradução
- Geração de texto
- Classificação de texto
Aprendizado profundo em ML.NET
Treinar um modelo de aprendizado profundo do zero requer a definição de vários parâmetros, uma grande quantidade de dados de treinamento rotulados e uma grande quantidade de recursos de computação (centenas de horas de GPU). ML.NET permite que você encurte esse processo usando modelos pré-treinados e técnicas de transferência de conhecimento, como aprendizado por transferência e ajuste fino.
ML.NET também permite importar modelos treinados em outras estruturas e consumi-los em seus aplicativos .NET.
Dependendo do cenário, você pode usar a GPU local, bem como recursos de computação de GPU do Azure para treinar e consumir modelos de aprendizado profundo.
Treinar modelos personalizados
ML.NET fornece APIs para treinar modelos de aprendizado profundo personalizados e usá-los para fazer previsões dentro de seu aplicativo .NET.
Essas APIs são alimentadas por torchSharp e TensorFlow.NET.
Classificação de imagem
Em ML.NET você pode usar o conjunto ImageClassification de APIs para treinar modelos de classificação de imagem personalizados.
Um pipeline de treinamento de classificação de imagem no ML.NET pode ser semelhante ao seguinte:
//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 começar a treinar modelos de classificação de imagem personalizados em ML.NET, consulte Treinar um modelo de classificação de imagem no Azure usando o Model Builder.
Detecção de objetos
ML.NET permite treinar modelos de detecção de objetos personalizados no Construtor de Modelos usando o Azure Machine Learning. É necessário apenas um conjunto de dados rotulado contendo informações de caixa delimitadora e as categorias às quais os objetos nas caixas delimitadoras pertencem.
O resultado do processo de treinamento é um modelo ONNX que pode ser usado com a transformação ApplyOnnxModel para fazer previsões.
No momento, não há suporte local para detecção de objetos em ML.NET.
Para treinar modelos de detecção de objetos personalizados com ML.NET, consulte Detectar sinais de parada em imagens com o tutorial do Construtor de Modelos.
Classificação de texto
Classificar texto de forma livre, seja revisões de clientes ou memorandos de negócios, é uma parte importante de muitos processos.
Em ML.NET, você pode usar o conjunto TextClassificationTrainer de APIs para treinar modelos de classificação de texto personalizados. A técnica usada para treinar modelos de classificação de texto personalizados em ML.NET é conhecida como ajuste fino. O ajuste fino permite que você pegue um modelo pré-treinado e treine novamente as camadas específicas para seu domínio ou problema usando seus próprios dados. Isso oferece o benefício de ter um modelo mais personalizado para resolver o problema sem precisar passar pelo processo de treinamento de todo o modelo do zero. O modelo pré-treinado usado pela API de Classificação de Texto é uma implementação TorchSharp do NAS-BERT .
Um pipeline de treinamento de classificação de texto no ML.NET pode ser semelhante ao seguinte:
// 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 começar a treinar modelos de classificação de texto com ML.NET, consulte o tutorial Analisar o sentimento dos comentários de sites em um aplicativo web usando o Model Builder do ML.NET.
Similaridade de frase
Tarefas como a pesquisa semântica dependem da determinação de como duas frases ou passagens de texto são semelhantes umas às outras.
ML.NET fornece o conjunto SentenceSimilarityTrainer de APIs que usam o mesmo modelo subjacente e técnicas de ajuste fino que o TextClassificationTrainer. No entanto, em vez de produzir uma categoria como saída, ela produz um valor numérico que representa o quão semelhantes são duas passagens.
Um pipeline de treinamento e inferência para similaridade de sentenças em ML.NET pode ter o seguinte formato:
// 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 começar a usar a similaridade de frase, consulte os exemplos no repositório dotnet/machinelearning-samples.
Consumir modelos pré-treinados
ML.NET fornece APIs para consumir modelos em outros formatos, como TensorFlow e ONNX, e usá-los para fazer previsões dentro de seu aplicativo .NET.
Essas APIs são alimentadas por TensorFlow.NET e pelo ONNX Runtime.
TensorFlow
TensorFlow é uma estrutura de aprendizado profundo com um ecossistema avançado e uma variedade de modelos pré-treinados disponíveis no TensorFlow Hub.
Com ML.NET, você pode pegar esses modelos pré-treinados do TensorFlow e usá-los para inferência dentro de seus aplicativos .NET.
Um pipeline de inferência usando um modelo TensorFlow pré-treinado pode se assemelhar ao seguinte:
// 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 começar a consumir modelos pré-treinados do TensorFlow com ML.NET, confira o Tutorial de análise de sentimento de resenhas de filme usando um modelo pré-treinado do TensorFlow no ML.NET
ONNX
O Open Neural Network Exchange (ONNX) é um formato de software livre projetado para habilitar a interoperabilidade entre estruturas de aprendizado de máquina e de aprendizado profundo. Isso significa que você pode treinar um modelo em uma das muitas estruturas populares de machine learning, como pyTorch, convertê-lo em formato ONNX e consumir o modelo ONNX em uma estrutura diferente, como ML.NET.
O repositório de modelos ONNX hospeda vários modelos ONNX pré-treinados que você pode usar para inferência em uma ampla variedade de tarefas.
Com ML.NET, você pode usar esses modelos ONNX pré-treinados e usá-los para inferência em seus aplicativos .NET.
Um pipeline de inferência usando um modelo ONNX pré-treinado pode ser semelhante ao seguinte:
// 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 começar a usar modelos ONNX pré-treinados com ML.NET, consulte o tutorial de Detecção de Objetos usando ONNX no ML.NET.