Поделиться через


Что такое глубокое обучение?

Глубокое обучение — это общий термин для методов машинного обучения, которые используют глубокие нейронные сети. Сегодня глубокое обучение является одной из наиболее видимых областей машинного обучения благодаря своему успеху в таких сферах, как компьютерное зрение, обработка естественного языка и, в применении к обучению с подкреплением, таких как игры, принятие решений и моделирование.

Важным элементом для успешного глубокого обучения является доступность данных, вычислений, программных платформ и сред выполнения, которые упрощают создание моделей нейронной сети и их выполнение для вывода. Примерами таких платформ являются TensorFlow, (Py)Torch и ONNX.

ML.NET предоставляет доступ к некоторым из этих платформ. В результате ML.NET пользователи могут воспользоваться преимуществами моделей глубокого обучения без необходимости начинать с нуля.

Глубокое обучение и машинное обучение

Глубокое обучение основано на алгоритмах нейронной сети. Это отличается от традиционных или классических методов машинного обучения, которые используют более широкий спектр алгоритмов, таких как обобщенные линейные модели, деревья принятия решений или поддержка векторных машин (SVM). Наиболее непосредственное, практические последствия этой разницы заключается в том, что методы глубокого обучения лучше подходят для некоторых видов данных. В некоторых случаях классические методы машинного обучения, такие как деревья с градиентным бустингом (XGBoost, LightGBM и CatBoost), как представляется, имеют преимущество для табличных данных. Для менее структурированных данных, таких как текст и изображения, нейронные сети, как правило, работают лучше. Лучший подход — это всегда экспериментировать с определенным источником данных и вариантом использования, чтобы определить для себя, какие методы лучше всего подходит для вашей проблемы.

Для классических задач машинного обучения ML.NET упрощает этот процесс экспериментирования с помощью автоматизированного машинного обучения (AutoML). Дополнительные сведения об AutoML см. в разделе Что такое автоматизированное машинное обучение (AutoML)?.

Архитектуры нейронной сети

Одной из основных характеристик глубокого обучения является использование алгоритмов искусственной нейронной сети. На высоком уровне нейронные сети можно рассматривать как конфигурацию "единиц обработки", где выходные данные каждого блока представляют собой входные данные другого. Каждый из этих единиц может принимать один или несколько входных данных, и, по сути, выполняет взвешенную сумму входных данных, применяет смещение (или предвзятость), за которым следует нелинейная функция преобразования (называется "активация"). Различные механизмы этих компонентов использовались для описания границ принятия решений в классификации, регрессии функций и других структур, центральных для задач машинного обучения.

схема , представляющая один слой в нейронной сети

За последнее десятилетие наблюдается увеличение случаев, приложений и методов глубокого обучения. Это увеличение обусловлено увеличением различных операций, которые могут быть включены в нейронные сети, более широкий набор договоренностей, в которые можно настроить эти операции, и улучшенную поддержку вычислений для этих улучшений. Как правило, архитектуры нейронной сети можно сгруппировать в следующие категории:

  • Нейронная сеть прямого распространения
  • Сверточная нейронная сеть
  • Повторяющаяся нейронная сеть
  • Генеративная состязательная сеть
  • Трансформаторы

Для получения дополнительных сведений см. руководствопо искусственным нейронным сетям .

Что можно использовать для глубокого обучения?

Архитектура глубокого обучения показала хорошую производительность в задачах, связанных с неструктурированными данными, такими как изображения, аудио и текст свободной формы. В результате глубокое обучение использовалось для решения таких проблем, как:

  • Классификация изображений
  • Классификация звука
  • Перевод
  • Создание текста
  • Классификация текста

Глубокое обучение в ML.NET

Для обучения модели глубокого обучения с нуля требуется задание нескольких параметров, большое количество помеченных обучающих данных и огромное количество вычислительных ресурсов (сотни часов GPU). ML.NET позволяет ускорить этот процесс, используя предварительно обученные модели и методы передачи знаний, такие как трансферное обучение и тонкая настройка.

ML.NET также позволяет импортировать модели, обученные в других платформах, и использовать их в приложениях .NET.

В зависимости от сценария можно использовать локальный GPU, а также вычислительные ресурсы Azure GPU для обучения и использования моделей глубокого обучения.

Обучение пользовательских моделей

ML.NET предоставляет API для обучения пользовательских моделей глубокого обучения и их использования для прогнозирования в приложении .NET.

Эти API работают на основе TorchSharp и TensorFlow.NET.

Классификация изображений

В ML.NET можно использовать ImageClassification набор API для обучения пользовательских моделей классификации изображений.

Конвейер обучения классификации изображений в ML.NET может выглядеть следующим образом:

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

Сведения о начале обучения пользовательских моделей классификации изображений в ML.NET см. в статье Обучение модели классификации изображений в Azure с помощью конструктора моделей.

Обнаружение объектов

ML.NET позволяет обучать пользовательские модели обнаружения объектов в Конструкторе моделей с помощью Машинного обучения Azure. Все, что вам нужно, — это помеченный набор данных, содержащий сведения о ограничивающем поле, и категории, к которым относятся объекты в ограничивающих полях.

Результатом процесса обучения является модель ONNX, которую затем можно использовать с преобразованием ApplyOnnxModel для прогнозирования.

В настоящее время в ML.NET отсутствует локальная поддержка обнаружения объектов.

Чтобы обучить пользовательские модели обнаружения объектов с помощью ML.NET, см. руководстве по обнаружению дорожных знаков остановки на изображениях с помощью конструктора моделей .

Классификация текста

Классификация текста свободной формы, будь то отзывы клиентов или бизнес-заметки является важной частью многих процессов.

В ML.NET можно использовать TextClassificationTrainer набор API для обучения пользовательских моделей классификации текста. Метод, используемый для обучения пользовательских моделей классификации текста в ML.NET, называется тонкой настройкой. Тонкая настройка позволяет взять предварительно обученную модель и переобучить слои, относящиеся к вашему домену или задаче, используя собственные данные. Это дает вам преимущество иметь модель, которая более адаптирована для решения вашей проблемы без необходимости пройти процесс обучения всей модели с нуля. Предварительно обученная модель, используемая в API для классификации текста, является реализацией TorchSharp NAS-BERT.

Конвейер обучения классификации текста в ML.NET может выглядеть следующим образом:

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

Для начала обучения моделей классификации текста с ML.NET ознакомьтесь с руководством Анализ комментариев веб-сайта на предмет тональности в веб-приложении с помощью ML.NET Model Builder.

Сходство предложений

Такие задачи, как семантический поиск, зависят от определения того, как похожи два предложения или фрагменты текста друг к другу.

ML.NET предоставляет SentenceSimilarityTrainer набор API, которые используют ту же базовую модель и методы точной настройки, что и TextClassificationTrainer. Однако вместо создания категории в качестве выходных данных он создает числовое значение, представляющее, насколько похожи два отрывка.

Конвейер обучения и вывода для сходства предложений в ML.NET может выглядеть следующим образом:

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

Чтобы приступить к работе с сходством предложений, см. примеры в репозитории dotnet/machinelearning-samples.

Использование предварительно обученных моделей

ML.NET предоставляет API-интерфейсы для использования моделей в других форматах, таких как TensorFlow и ONNX, и использовать их для прогнозирования в приложении .NET.

Эти API работают с помощью TensorFlow.NET и ONNX Runtime.

TensorFlow

TensorFlow — это платформа глубокого обучения с богатой экосистемой и множество предварительно обученных моделей, доступных в TensorFlow Hub.

С помощью ML.NET можно использовать эти предварительно обученные модели TensorFlow и использовать их для вывода в приложениях .NET.

Конвейер вывода с помощью предварительно обученной модели TensorFlow может выглядеть следующим образом:

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

Чтобы приступить к использованию предварительно обученных моделей TensorFlow с ML.NET, ознакомьтесь с анализом тональности видео с помощью предварительно обученной модели TensorFlow в ML.NET руководстве.

ONNX

Open Neural Network Exchange (ONNX) — это формат с открытым исходным кодом, предназначенный для обеспечения взаимодействия между платформами машинного обучения и глубокого обучения. Это означает, что вы можете обучить модель в одной из многих популярных платформ машинного обучения, таких как PyTorch, преобразовать ее в формат ONNX и использовать модель ONNX в другой платформе, например ML.NET.

Репозиторий моделей ONNX размещает несколько предварительно обученных моделей ONNX, которые можно использовать для вывода в различных задачах.

С помощью ML.NET можно использовать эти предобученные модели ONNX для выполнения выводов в приложениях .NET.

Конвейер вывода с помощью предварительно обученной модели ONNX может выглядеть следующим образом:

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

Чтобы начать использовать предварительно обученные модели ONNX в ML.NET, см. руководство по обнаружению объектов с помощью ONNX.