Дистилляция данных (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): 11 комментариев

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  3. Добрый день!
    Спасибо за интересную статью. К ссылкам можно добавить ещё статью ‘Less Than One’-Shot Learning: Learning N Classes From M<N Samples [https://arxiv.org/abs/2009.08449], где авторы работы [3] на примере kNN исследуют теоретические возможности разделения пространства на неограниченное количество классов используя только два искусственных примера.
    Было бы интересно почитать ещё обзоры исследований в этой области

  4. Добрый день и спасибо за мастер-класс! Вы рассматриваете дистилляцию, как процесс формирования искусственных данных существенно меньшего объема, чем исходный набор. Насколько я понимаю, к задаче дистилляции примыкает задача сэмплирования, то есть выбора из исходного множества объектов подмножества реальных репрезентативных объектов. Почему Вы решили не рассматривать такой подход? Если считаете задачу сэмплирования отдельной от задачи дистилляции, то нет ли в Ваших планах рассмотреть сэмплирование, или более широко проблему выбора репрезентативных объектов? P.S. Мои коллеги пытались решать эту задачу в рамках проверки статистических гипотез [ https://link.springer.com/chapter/10.1007/978-3-319-52277-7_58 ]

    • Здравствуйте! Я представил обзор по теме, которая слабо охвачена в других источниках Про выбор объектов (Instance Selection) есть много работ… я про это написал в начале. Здесь нас интересовал принципиально новый подход.

  5. А можно как то это применить что бы объекты заданного вида на пример треугольник «находились» для данных моделей очень быстро причём процесс дисталяции сделать более эффективным по времени для заданного класса «простых» моделей.
    А какие классы действительно можно считать простейшими в рамка той или иной модели ?
    Возможно данный метод поможет сделать лучше понимание этого вопроса ?

    Если я правильно понимаю не есть ли все это попытка говорить с моделями на их языке ?
    Нет ли более менее универсального языка для моделей данного вида?
    Как я понял для в статье говорится что для разных моделей нужен разный «язык»
    возможно модели можно как то различать по степени похожести «языков»

    Есть ли методы хирургии (сшивания) что бы собирать «буквы» в слова?
    Когда говорят что подобное происходит в «глубоком» обучении мне не очень верится.

    Можно же на задачу посмотреть как метод оценки сложности или естественности дисталяции для разных моделей.

    Если что то не так простите )))
    Как говорил Ленин один дурак может задать столько вопросов что и …)

Оставьте комментарий