Partilhar via


O que é a aprendizagem profunda?

Deep learning é um termo abrangente para técnicas de aprendizado de máquina que fazem uso de redes neurais "profundas". Hoje, o deep learning é uma das áreas mais visíveis do aprendizado de máquina por causa de seu sucesso em áreas como visão computacional, processamento de linguagem natural e, quando aplicado à aprendizagem por reforço, cenários como jogos, tomada de decisões e simulação.

Um elemento crucial para o sucesso da aprendizagem profunda tem sido a disponibilidade de dados, computação, estruturas de software e tempos de execução que facilitam a criação de modelos de redes neurais e sua execução para inferência. Exemplos de tais estruturas incluem TensorFlow, (Py)Torch e ONNX.

ML.NET fornece acesso a algumas dessas estruturas. Como resultado, ML.NET usuários podem tirar proveito de modelos de aprendizagem profunda sem ter que começar do zero.

Aprendizagem profunda vs aprendizagem automática

A aprendizagem profunda depende de algoritmos de redes neurais. Isso contrasta com técnicas tradicionais ou clássicas de aprendizado de máquina que usam uma variedade maior de algoritmos, como modelos lineares generalizados, árvores de decisão ou máquinas vetoriais de suporte (SVM). A implicação mais imediata e prática dessa diferença é que os métodos de aprendizagem profunda podem ser mais adequados para algum tipo de dados. Em alguns casos, técnicas clássicas de aprendizado de máquina, como árvores impulsionadas 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 melhor desempenho. A melhor abordagem é sempre experimentar com sua fonte de dados específica e caso de uso para determinar por si mesmo quais técnicas funcionam melhor para o seu problema.

Para tarefas clássicas de aprendizado de máquina, o ML.NET simplifica esse processo de experimentação por meio do Automated Machine Learning (AutoML). Para obter mais informações sobre AutoML, consulte o artigo O que é Automated Machine Learning (AutoML)?.

Arquiteturas de redes neurais

Uma das principais características diferenciadoras da aprendizagem profunda é o uso de algoritmos de redes neurais artificiais. Em um alto nível, você pode pensar em redes neurais como uma configuração de "unidades de processamento", onde a saída de cada unidade constitui a entrada de outra. Cada uma dessas unidades pode tomar uma ou várias entradas, e essencialmente realiza uma soma ponderada de suas entradas, aplica um deslocamento (ou "viés") e, em seguida, uma função de transformação não linear (chamada "ativação"). Diferentes arranjos desses componentes têm sido usados para descrever limites de decisão na classificação, funções de regressão e outras estruturas centrais para tarefas de aprendizado de máquina.

Diagrama que representa uma única camada na rede neural

Na última década assistiu-se a um aumento de casos, aplicações e técnicas de aprendizagem profunda. Esse aumento é impulsionado em parte por uma variedade crescente de operações que podem ser incorporadas em redes neurais, um conjunto mais rico de arranjos em que essas operações podem ser configuradas e suporte computacional aprimorado para essas melhorias. Em geral, as arquiteturas de redes neurais podem ser agrupadas nas seguintes categorias:

  • Rede Neural Feed-forward
  • Rede Neural Convolucional
  • Rede Neural Recorrente
  • Rede Generativa Adversarial
  • Transformadores

Para obter mais detalhes, consulte o guia de redes neurais artificiais.

Para que posso usar o deep learning?

As arquiteturas de aprendizagem profunda têm mostrado bom desempenho em tarefas que envolvem "dados não estruturados", como imagens, áudio e texto de forma livre. Como resultado, a aprendizagem profunda tem sido usada para resolver problemas como:

  • Classificação de imagens
  • Classificação de áudio
  • Tradução
  • Geração de texto
  • Classificação de textos

Aprendizagem profunda em ML.NET

Treinar um modelo de aprendizagem profunda a partir do zero requer a definição de vários parâmetros, uma grande quantidade de dados de treinamento rotulados e uma vasta quantidade de recursos de computação (centenas de horas de GPU). ML.NET permite que você atalho esse processo usando modelos pré-treinados e técnicas de transferência de conhecimento, como aprendizagem de 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 da GPU do Azure para treinar e consumir modelos de aprendizado profundo.

Treinar modelos personalizados

ML.NET fornece APIs para treinar modelos personalizados de aprendizado profundo 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 imagens

Além ML.NET você pode usar o ImageClassification conjunto de APIs para treinar modelos de classificação de imagem personalizados.

Um pipeline de treinamento de classificação de imagem no ML.NET pode ter a seguinte aparência:

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

Para começar a treinar modelos de classificação de imagem personalizados no ML.NET, consulte Treinar um modelo de classificação de imagem no Azure usando o Construtor de Modelos

Deteção de objetos

ML.NET permite treinar modelos de deteção de objetos personalizados no Construtor de Modelos usando o Aprendizado de Máquina do Azure. Tudo o que você precisa é de 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 ApplyOnnxModel transformação para fazer previsões.

No momento, não há suporte local para deteção de objetos no ML.NET.

Para treinar modelos de deteção de objetos personalizados com o ML.NET, consulte o tutorial Detetar sinais de parada em imagens com o Construtor de modelos

Classificação de textos

Classificar o texto de forma livre, quer se trate de comentários de clientes ou notas comerciais, é uma parte importante de muitos processos.

No ML.NET, você pode usar o TextClassificationTrainer conjunto de APIs para treinar modelos de classificação de texto personalizados. A técnica usada para treinar modelos personalizados de classificação de texto 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 do seu domínio ou problema usando seus próprios dados. Isto dá-lhe a vantagem de ter um modelo mais adaptado para resolver o seu problema sem ter de passar pelo processo de treinar todo o modelo a partir 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 ter a seguinte aparência:

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

Para começar a treinar modelos de classificação de texto com o ML.NET, consulte o tutorial Analisar o sentimento dos comentários do site em um aplicativo Web usando ML.NET Construtor de Modelos.

Semelhança de frases

Tarefas como a pesquisa semântica dependem da determinação de quão semelhantes duas frases ou passagens de texto são uma para a outra.

ML.NET fornece o SentenceSimilarityTrainer conjunto 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, produz um valor numérico que representa o quão semelhantes são duas passagens.

Um pipeline de treinamento e inferência para semelhança de frases em ML.NET pode ter a seguinte aparência:

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

Para começar com a semelhança de frases, consulte os exemplos no repositório dotnet/machinelearning-samples.

Consuma 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 pelo TensorFlow.NET e pelo ONNX Runtime.

TensorFlow

O TensorFlow é uma estrutura de aprendizagem profunda com um ecossistema rico e uma variedade de modelos pré-treinados disponíveis no TensorFlow Hub.

Com ML.NET, você pode usar esses modelos TensorFlow pré-treinados e usá-los para inferência dentro de seus aplicativos .NET.

Um pipeline de inferência usando um modelo TensorFlow pré-treinado pode ter a seguinte aparência:

// 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 o ML.NET, consulte a análise de sentimento das análises de filmes usando um modelo do TensorFlow pré-treinado em ML.NET tutorial

ONNX

O Open Neural Network Exchange (ONNX) é um formato de código aberto projetado para permitir a interoperabilidade entre estruturas de aprendizado de máquina e aprendizado profundo. Isso significa que você pode treinar um modelo em uma das muitas estruturas populares de aprendizado de máquina como o PyTorch, convertê-lo no 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 dentro de seus aplicativos .NET.

Um pipeline de inferência usando um modelo ONNX pré-treinado pode ter a seguinte aparência:

// 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 consumir modelos ONNX pré-treinados com ML.NET, consulte a deteção de objetos usando ONNX em ML.NET tutorial.