Дистилляция данных (Data Distillation)

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

История и термины

Дистилляция данных (Data Distillation) – это существенное уменьшение выборки, путём создания искусственных объектов (синтетических данных), которые агрегируют полезную информацию, хранящуюся в данных, и позволяют настраивать алгоритмы машинного обучения не менее эффективно, чем на всех данных.

Изначально термин «дистилляция» появился в работе [1] Хинтона, потом утвердился термин «дистилляция модели / знаний» (Knowledge Distillation) – это построение простой модели на основе сложной / нескольких моделей, но эта заметка, как Вы поняли, совсем про другую задачу, хотя и со схожим названием.

Есть много классических методов по выбору объектов (Instance Selection), начиная от выбора т.н. эталонов в метрических алгоритмах, заканчивая выбором опорных объектов в SVM. Но дистилляция это не выбор, а синтез объектов (разница примерно такая же как между селекцией признаков и снижением размерности признакового пространства, только речь в данном случае не о признаках, а о объектах). В эпоху глубокого обучения появилась возможность делать синтетические данные с помощью единой оптимизационной техники, именно синтезируя объекты (а не переборно). Ниже расскажем о некоторых работах в этом направлении. Заметим, что дистилляция данных нужна для

• ускорения обучения / тестирования (желательно для целого класса моделей),

• сокращения объёма данных для хранения (замена старому выбору объектов),

• ответа на научный вопрос: сколько информации содержится в данных (насколько сможем их «сжать»).

Метод дистилляции

Идея DL-дистилляции данных предложена в работе [2], в которой MNIST-датасет из 60 000 изображений сокращён до 10, т.е. в синтетическом обучении находилось по одному изображению-представителю для каждого класса! При этом сеть архитектуры LeNet обучалась на синтетических данных примерно до такого же качества, что и на всей выборке (естественно, существенно быстрее) и сходилась за несколько шагов. Однако обучение по-другому инициализированной сети уже ухудшало качество решения. На рис. 1 из работы [2] показан основной результат и полученные синтетические данные в задачах MNIST и CIFAR10, можно обратить внимание, что для датасета MNIST они совсем не похожи на реальные числа, хотя логично ожидать, что синтетический представитель класса «ноль» это что-то похожее на ноль, см. также рис. 2.

Рис. 1 из работы [2].
Рис. 2 из работы [2].

Опишем базовую идею предложенного в [2] метода, мы хотим, чтобы синтетические данные были такими, чтобы при использовании градиентного спуска на них мы попали в минимум функции ошибки, т.е. надо решить такую задачу оптимизации

здесь θt – вектор параметров сети на t-й итерации, на нулевой итерации они берутся из распределения p(•), x «с волной» – синтетические данные, x (без волны) – обучающая выборка, l(x, θ) – функция ошибки нейронной сети на всей обучающей выборке. Заметим, что в формуле используется лишь один шаг градиентной настройки исходной нейросети, дальше мы обобщим это. Здесь же возникает центральная проблема: если предложенную задачу оптимизации решать градиентным методом ,то мы должны брать градиент от градиента.

В более общем случае мы отказываемся от надежды свалиться в минимум за один шаг градиентного спуска и используем несколько шагов. Более того, можно задаваться несколькими наборами параметров из распределения p(.) и, таким образом, синтетические данные будут подходить для нескольких нейронных сетей с разными параметрами. Ниже показан алгоритм для поиска синтетических данных в общем случае. Кстати, это обобщение позволяет получить синтетические данные, которые больше похожи на исходные, см. рис. 3.

Рис. 3 из работы [2].

Развитие метода

Статья [2] дала толчок новому направлению исследований, например в [3] показали, как улучшить сжатие данных при дистилляции, используя «нечётко (мягко) размеченные» данные, т.е. в задаче MNIST представитель искусственных данных мог принадлежать сразу нескольким классам с разными вероятностями. Неформально говоря, дистиллировались не только данные, но и метки. В результате обучаясь на выборке только из 5 дистиллированных изображений, можно получить точность около 92% (это, правда, хуже 96%, полученных в предыдущей работе). Конечно, чем больше синтетических данных, тем качество на них лучше, см. рис. 5. Более того, в [3] дистилляцию данных применили для текстов (правда, немного искусственно – обрезав или дополнив тексты до фиксированной длины).

Рис. 4 из работы [3].
Рис. 5 из работы [3].

Авторские эксперименты

Когда автор откопал статью [2], показалось, что она сильно недооценена. Конечно, у неё близкая к нулю практическая важность, но

1) предложен «регулярный» и очень логичный метод агрегации данных, заточенный «под модель»,

2) есть много открытых проблем, например, получение синтетических данных, похожих на оригинальные,

3) любопытно, как это всё работает для табличных данных (удивительно, что это сразу не сделали),

4) есть чисто инженерный вызов создания «более эффективного синтеза» искусственных данных.

Магистр автора на факультете ВМК МГУ Дмитрий Медведев заинтересовался дистилляцией данных и сделал часть напрашивающихся экспериментов (другую часть мы пока не доделали, ибо описанная двухуровневая оптимизация производится очень медленно, а сверхмощностей гугла у нас сейчас нет). Мы решили посмотреть, как метод работает на табличных данных. Ниже приведены картинки для классической модельной задачи «два полумесяца» и нескольких простых нейросетей: однослойной, 2-слойной и 4-слойной. Заметим, что даже для такой простой задачи и простых моделей общее время дистилляции достигает 4 часов.

Мы исследовали, как качество на тесте зависит от числа эпох при решении задачи минимизации для построения синтетических данных (это не эпохи обучения НС), числа шагов в этой же задаче, числа нейронных сетей для которых синтезируются данных (число начальных параметров), см. рис. 6.

Рис. 6. Качество на тесте от (слева направо) числа эпох, числа шагов и числа сетей при дистилляции.

На рис. 7 показана синтетическая выборка (крупным), получаемая на разных шагах метода для разных архитектур. Проблемы, которые были для данных другой природы, здесь, конечно, остались: синтетические объекты не похожи на объекты выборки. И с этой проблемой нам предстоит ещё побороться.

Рис. 7. Синтетические данные на фоне обучающих.

На рис. 8 показано, как работают модели, настроенные на синтетических данных.

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

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

Табл. Качество моделей на разных данных: от оригинальных до дистиллированных, заточенных под конкретную архитектуру.

Наши исследования дистилляции продолжаются, пока подготовлена работа [4], её откорректированная версия представлена на недавней конференции AIST-2020, а также выложен код [5]. Параллельно ещё несколько научных групп делают что-то подобное (если будет интерес, то автор представит обзор их исследований в этом блоге).

Ссылки

[1] Hinton, G., Vinyals, O., Dean, J.: Distilling the Knowledge in a Neural Network // NIPS (2015)

[2] Wang, T., Zhu, J., Torralba, A. and Efros, A. Dataset Distillation, 2018.

[3] Sucholutsky, I., Schonlau M. «Soft-Label Dataset Distillation and Text Dataset Distillation»

[4] Medvedev D., D’yakonov А. «New Properties of the Data Distillation MethodWhen Working With Tabular Data», 2020.

[5] https://github.com/dm-medvedev/dataset-distillation

Дистилляция данных (Data Distillation): 6 комментариев

  1. Спасибо большое за интересную статью и ссылки!

    Действительно, недооцененная тематика.

  2. А в чем видите практическое применение дистилляции на табличных данных?

    Если в табличных данных было необходимо ужать датасет — обычно использовали что-то типа PCA

      • Александр, я понимаю о чем статья. Внимательно её прочитал. Потому и спрашиваю, в чем видите практическое применение.

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

        Но это и так делает PCA и т.д.

        Какое еще применение может быть у дистилляции табличных данных?

      • Ну так вот же в статье:

        дистилляция данных нужна для

        • ускорения обучения / тестирования (желательно для целого класса моделей),

        • сокращения объёма данных для хранения (замена старому выбору объектов),

        • ответа на научный вопрос: сколько информации содержится в данных (насколько сможем их «сжать»).

        А ещё признание:
        «Конечно, у неё близкая к нулю практическая важность»

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s