Часть 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: Обучение базовой модели

Чтобы обучить базовую модель, нам нужно сообщить сети, что ей нужно сделать, чтобы узнать параметры на основе заданных данных. Шаги следующие:

  1. Инициализируйте веса сети. В данном случае с использованием инициализаций Xavier (статья ссылка).
  2. Определите, какой оптимизатор вы хотите использовать (Adam, SGD, AdaGrad и т. Д.), Вашу скорость обучения или планировщик скорости обучения, а также степень регуляризации с использованием уменьшения веса с gluon.Trainer
  3. Определите функцию потерь. В этом случае gluon.loss.SigmoidBCELoss() для двоичной перекрестной потери энтропии. MXNet имеет много предопределенных общих функций потерь, но вы также можете определить настраиваемую функцию потерь.
  4. Для каждой мини-партии:
    i). Сделайте прогноз из сети, используя текущие параметры.
    ii). Рассчитайте и распечатайте значения потерь на обучающих и проверочных наборах.
    iii). Используя правило цепочки на нашем графике вычислений, вычислите градиенты для каждого параметра.
    iv). Используя градиенты [из шага 4 (iii)], выполните один шаг обновления градиента с помощью оптимизатора, определенного на шаге 2.
  5. Выполните шаг 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 для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить модели машинного обучения.