Часть 1/7. Введение
Часть 2/7. Sklearn Data Transformations
Часть 3/7. Набор данных MXNet и загрузчики данных
Часть 4/7. Пользовательские сети MXNet
Часть 5/7. Модель тренировочной базы
Часть 6/7. Извлечение вложений из сети
Часть 7/7. Перенести обучение на другой набор данных
Вы также можете прочитать версию этой серии для одного сообщения на страницах GitHub.
Что мы уже рассмотрели
В последней части мы определили настраиваемую сеть в структуре MXNet. Задача этой определенной сети состоит в том, чтобы взять на вход обзор фильма, представленный в виде списка кодировок слов, и вывести оценку тональности от 0 до 1.
Проще говоря, оценка тональности - это вероятность того, что данный отзыв будет положительным или отрицательным. Сетевая архитектура состоит из встраиваемого слоя, слоев GRU и полностью связанного плотного слоя (вернитесь к четвертой части серии, если вы это пропустили).
В частях 5 и 6 мы рассмотрим, как узнать веса сети на основе имеющихся данных. Вдобавок мы узнаем, как визуализировать, какие типы паттернов изучает сеть, проецируя многомерные встраиваемые векторы в двумерное пространство.
Часть 5: Обучение базовой модели
Чтобы обучить базовую модель, нам нужно сообщить сети, что ей нужно сделать, чтобы узнать параметры на основе заданных данных. Шаги следующие:
- Инициализируйте веса сети. В данном случае с использованием инициализаций Xavier (статья ссылка).
- Определите, какой оптимизатор вы хотите использовать (Adam, SGD, AdaGrad и т. Д.), Вашу скорость обучения или планировщик скорости обучения, а также степень регуляризации с использованием уменьшения веса с
gluon.Trainer
- Определите функцию потерь. В этом случае
gluon.loss.SigmoidBCELoss()
для двоичной перекрестной потери энтропии. MXNet имеет много предопределенных общих функций потерь, но вы также можете определить настраиваемую функцию потерь. - Для каждой мини-партии:
i). Сделайте прогноз из сети, используя текущие параметры.
ii). Рассчитайте и распечатайте значения потерь на обучающих и проверочных наборах.
iii). Используя правило цепочки на нашем графике вычислений, вычислите градиенты для каждого параметра.
iv). Используя градиенты [из шага 4 (iii)], выполните один шаг обновления градиента с помощью оптимизатора, определенного на шаге 2. - Выполните шаг 4 несколько раз, пока не заметите, что потеря валидации больше не уменьшается или не начинает увеличиваться.
Ниже приведен код для выполнения шагов, как определено выше. Примечание: перейдите в блокнот для функции util evaluate_network
, которая дает нам значение потерь, AUC и прогноз для данной мини-партии.
Инициализируйте сеть и вызовите функцию train
:
# 1. Xavier initialization.
net1.initialize(mx.init.Xavier(), ctx=ctx, force_reinit=True)
# 3. Binary cross entropy loss for two class classification
loss = gluon.loss.SigmoidBCELoss()
train(
net1,
imdb_train_dataloader,
imdb_valid_dataloader,
loss,
epochs=5,
lr=lr,
wd=wd,
optimizer=optimizer,
ctx=ctx)
После обучения всего 5 эпох сеть довольно хорошо различает положительные и отрицательные настроения. Ниже показано, как разделение выглядит на данных проверки. Оценка AUC при валидации составляет ›95%. Более низкий балл означает положительное мнение, а отметка «0» означает чисто положительное мнение.
Часть 6: Извлечение вложений из сети
Вышеупомянутая сеть научилась многим вещам, в том числе тому, как представлять каждое английское слово в многомерном векторе (через слой встраивания), как составлять предложения на английском языке (через GRU) и как классифицировать данный ввод просмотр как положительный или отрицательный (через последний плотный слой).
Используя t-SNE, мы можем визуализировать многомерные векторы в 2D / 3D пространстве. Давайте посмотрим, какие вложения наша сеть выучила для английских слов, чтобы определить, есть ли в словах какой-либо шаблон, который позже помог сети классифицировать предложения как положительные или отрицательные.
Наша сеть изучила 64-мерные представления встраивания (из слоя встраивания) для 63 167 уникальных слов. Будет очень сложно визуализировать вложения для всех слов. Давайте посмотрим на 100 примеров слов и их отображение t-SNE из 64D в 2D.
Из сюжета ясно видно, что на самом слое встраивания сеть начала учиться отличать отрицательные слова от положительных. Положительные слова сгруппированы вместе в области зеленого круга (отлично, любимый, веселый, идеальный, замечательный, удивительный и т. Д.), А отрицательные слова сгруппированы вместе в области красного круга (плохо, беспорядок, бессмысленно, разочарование, плохо , ужасно и т. д.).
Код для генерации t-SNE довольно прост, с использованием модуля sklearn.manifold
:
Что дальше
Далее будет последняя и самая важная часть этой серии руководств. На данный момент мы выполнили все необходимые шаги для обучения нейронной сети на наборе данных обзоров фильмов IMDB. Мы также довольны производительностью нашей сети, и векторные представления слов также имеют смысл для решения поставленной задачи.
Теперь последняя задача в этой серии руководств - использовать обученные веса сети и использовать их для аналогичной задачи в другом домене. Вопрос, на который мы пытаемся ответить здесь, заключается в том, можно ли перенести знания, полученные при чтении обзоров фильмов, на обзоры в других областях, таких как отели, продукты Amazon и т. Д. Такая передача знаний может сэкономить часы обучения и может быть очень полезна для предприятия, у которых отсутствуют маркированные данные.
Примечание редактора: Heartbeat - это онлайн-публикация и сообщество, созданное авторами и посвященное предоставлению первоклассных образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.
Независимая редакция, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по обработке данных и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.
Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить модели машинного обучения.