Получите высокопроизводительные крошечные модели, используя схему обучения учитель-ученик

Тенденция в мире машинного обучения в последние несколько лет заключалась в том, чтобы получить самые большие модели, обучить их на огромных объемах данных, а затем объединить их, чтобы получить последние несколько процентов точности. Одним из недостатков этого подхода является то, что большие модели или ансамбли могут быть сложными для развертывания в реальных приложениях. Их вес может быть слишком большим или время вывода может быть слишком большим для практического использования, особенно если вы пытаетесь использовать их на встроенном устройстве или на стороне клиента веб-приложения.
Также есть активное исследование того, как создавать модели, которые достигают достойной производительности, будучи маленькими и быстрыми, путем создания пользовательских архитектур для мобильных устройств, как в MobileNets, или путем квантования веса.

В этом посте мы продемонстрируем, как мы можем повысить производительность крошечной нейронной сети с помощью дистилляции знаний (из дистилляции знаний в нейронной сети) и MixUp (из смешивания: за пределами минимизации эмпирических рисков). Основная идея дистилляции знаний заключается в том, что вы определяете Учителя (который может быть одной моделью или ансамблем) и Студента (это облегченная модель, которую вы хотите использовать в производстве), затем вы обучаете Учителя выполнению целевой задачи и пусть Ученик попытается имитировать Учителя.

Данные:

Мы будем использовать набор данных MIT-BIH, который доступен в предварительно обработанном состоянии в наборах данных Kaggle: https://www.kaggle.com/mondejar/mitbih-database. Этот набор данных содержит индивидуальные сердечные сокращения, которые классифицируются по пяти классам, связанным с нарушениями аритмии.

Модель учителя:

Модель учителя - это 1D CNN, которая имеет слои свертки с 64 фильтрами каждый и два полностью связанных слоя. Всего получается 17 221 обучаемых параметров.

Студенческая модель:

Модель ученика имеет ту же структуру, что и Учитель, но с меньшими слоями свертки. Всего получается 3 909 обучаемых параметров, что в 4 раза меньше, чем у модели учителя.

Целевая функция:

Мы обучаем модель Учителя, используя категориальную кросс-энтропию, примененную к горячим этикеткам. При применении дистилляции знаний модель ученика обучается с использованием сочетания дивергенции Кульбака-Лейблера и потери MAE на мягких метках, предсказываемых моделью Учителя в качестве цели.

Дивергенция Кульбака-Лейблера измеряет разницу между двумя распределениями вероятностей, поэтому цель здесь - сделать распределение {по классам}, предсказанное Студентом, как можно ближе к Учителю.

Полученные результаты :

Без использования какой-либо дистилляции знаний крошечная модель получила показатель F1 0,67 + - 0,02, после использования дистилляции знаний производительность крошечной модели была увеличена до 0,78 + - 0,02. Мы смогли получить 11 баллов производительности по шкале F1, используя ту же архитектуру с использованием дистилляции знаний.

Резюме результатов:

  • Модель учителя F1: 0,82 + - 0,006
  • F1 крошечный режим + дистилляция знаний: 0,78 + - 0,02
  • Крошечный режим F1 с нуля: 0,67 + - 0,02

Заключение :

В этой публикации мы смогли реализовать простую схему обучения дистилляции знаний, которая смогла повысить производительность очень маленькой модели с 0,67 F1 до 0,78 F1 с использованием точного та же архитектура. Это может быть полезно, когда, например, для целей развертывания важно иметь минимально возможную модель с приличной производительностью.
При использовании этого подхода можно многое изучить, например, использовать ансамбль в качестве учителя или как разница в размерах между Учитель и ученик влияют на качество дистилляции Знаний. Это будет сделано в следующем посте 😃.

Использованная литература :

Код:

Https://github.com/CVxTz/knowledge_distillation