Представляем ADA: еще одна библиотека для адаптации домена

TL, DR: ознакомьтесь с нашей новой библиотекой на Github, поиграйте и масштабируйте алгоритмы адаптации домена!

Что такое адаптация домена?

Как вы, возможно, читали в нашем недавнем сообщении в блоге, дающем понимание того, что мы делаем в Criteo AI Lab, одна из тем наших исследований - адаптация предметной области, проблема переноса опыта, приобретенного в одних ситуациях, в другую ситуацию. .

Более формально, учитывая входное пространство X для функций, выходное пространство Y для меток и распределение вероятностей в этих пространствах p, обычное предположение контролируемого обучения состоит в том, что как обучающие данные, так и тестовые данные выбираются i.i.d из p. Это означает, что если вы разделите данные обучения на набор train и проверки, обучите свою модель на наборе train и оцените на validation, вы хорошо оцениваете ошибку test. Однако на практике модель может использоваться на (тестовых) данных, которые немного отличаются от данных, на которых она была обучена.

Адаптация домена может быть определена как случай, когда обучающие данные выбираются из источника распределения pS, а тестовые данные - из другого целевого распределение pT, без маркировки целевых образцов или с несколькими маркированными образцами. Адаптация домена без учителя предполагает, что для целевого домена нет помеченных образцов. Адаптация полууправляемой области предполагает, что помечена часть целевых выборок, обычно только несколько.

Обычно изучается несколько случаев. Если pT (x) ≠ pS (x) и pT (y | x) = pS (y | x), это называется ковариатным сдвигом. Если pT (y) ≠ pS (y) и pT (x | y) = pS (x | y), это называется сдвигом метки или целевым сдвигом. В реальном мире ситуация обычно намного сложнее, сдвиг метки и ковариативный сдвиг можно смешивать вместе, что приводит к более общему понятию обобщенного сдвига цели. .

Например, популярный набор данных MNIST используется для адаптации предметной области с другими наборами данных, которые также представляют собой цифры. Мы можем сказать, что «Набор данных адаптации домена» на самом деле представляет собой семейство наборов данных, которые можно рассматривать как исходный или целевой для имитации реальных -world варианты использования. Например, вы можете обучить свой алгоритм на MNIST и оценить его на MNIST-M, модифицированной версии MNIST, или обучить свой алгоритм на SVHN (Street View House Numbers) и оценить его на MNIST.

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

Если вы хотите узнать больше и получать последние обновления по адаптации домена, я могу только порекомендовать этот потрясающий список ресурсов.

Зачем нужна еще одна библиотека для адаптации домена?

Почти год назад, когда я начал работать над адаптацией предметной области, я почти ничего не знал об этой области исследований. Раньше у меня были отлаженные модели для переноса обучения, и я слышал несколько презентаций об этом, и все. Когда я погрузился в эту тему в течение прошлого года с целью решения новых проблем в рамках обобщенного целевого сдвига, я хотел поиграть с игрушечными данными, чтобы лучше понять различные существующие алгоритмы. Проблема: все это приходилось делать вручную. Единственная библиотека для адаптации домена, которую я смог найти, - это салат, который в то время не соответствовал моим потребностям.

Когда я читал основополагающую статью Ганина и др. на предметно-состязательном обучении нейронных сетей (DANN) ¹ я хотел воспроизвести их рисунок 2:

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

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

Помимо салат, я мог найти только автономные скрипты, обычно ориентированные на набор данных Digits, или небольшие библиотеки, которые было трудно адаптировать к моему варианту использования. Конечно, никто не позволил бы мне воспроизвести такую ​​фигуру.

Поэтому я разработал ADA, еще одну библиотеку для адаптации домена, имея в виду эти 3 ключевые цели:

  • Визуализация: позволяет визуализировать алгоритмы на основе игрушечных данных,
  • Повторное использование. Простое повторное использование одного и того же кода для работы с другими наборами данных классической адаптации домена (Digits, Office31, Visda…)
  • Воспроизводимость. Создайте чистый протокол оценки, в котором по умолчанию оценивается эффективность нескольких семян.

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

После того, как я объединился с другим коллегой, чтобы усилить его, позвольте мне представить вам, как это превратилось в библиотеку для адаптации к другому домену. Не стесняйтесь попробовать!

Визуализация: игра со Streamlit

Если вы не знаете о Streamlit.io, попробуйте! Я обнаружил, что это отличный способ поиграть с игрушечными данными и создать интересные настройки задач. Алгоритмы адаптации предметной области исходят из предположений о базовых данных: включая отношения зависимости между функциями и метками, между источником и целью и т. Д. Для моделирования этих зависимостей мне нравится применять причинно-следственный подход, который вдохновил меня на создание игрушечной генерации данных. модуль. Вы можете поиграть с ним в приложении Streamlit и, конечно, вы можете воспроизвести и визуализировать пример из статьи DANN (рисунок 2, о котором я писал ранее):

Повторное использование кода: передовой опыт разработки программного обеспечения

Основная практика, реализованная в ADA, - «разделяй и властвуй»: код максимально факторизован, независимые части кода сохраняются в разных местах.

Прочитав несколько документов по адаптации предметной области и их реализации, я заметил повторяющуюся закономерность. Большинство методов нацелены на изучение общего пространства представления для исходного и целевого домена, разделяя классическую сквозную глубокую нейронную сеть на экстрактор признаков с параметрами Φ и классификатор задач с параметрами θy. Согласование между исходным и целевым распределениями функций достигается путем добавления члена согласования Ld к обычным потерям задачи Lc. Этот член выравнивания контролируется параметром λ, который увеличивается от 0 до 1 во время обучения.

В ADA реализованы три типа условий выравнивания, что дает вам доступ к 3 семействам методов:

  1. Состязательные методы, подобные DANN, используют так называемый классификатор предметной области с параметрами θd в качестве противника для выравнивания функций,
  2. Методы на основе оптимального транспорта, в которых классификатор предметной области, называемый критиком, обучается минимизировать расхождение между исходным и целевым распределениями функций,
  3. Методы на основе ядра, которые минимизируют максимальное среднее несоответствие в пространстве ядра для выравнивания функций.

На практике алгоритм адаптации предметной области будет иметь архитектуру с 2 или 3 блоками: экстрактор признаков (темно-зеленый прямоугольник), классификатор задач (синий прямоугольник) и, необязательно, критик (красный прямоугольник). Архитектура этих блоков выбирается пользователем в зависимости от набора данных (например, ResNet50, за исключением последнего слоя для экстрактора признаков и линейных классификаторов для классификаторов задач и предметных областей).

Как следствие, мы приняли следующие решения:

  • Сетевая архитектура настроена и построена с параметрами, которые зависят от набора данных (размер входов, тип сети),
  • Алгоритм адаптации домена определяет, как связаны 2 или 3 блока и как их выходы используются для вычисления функции потерь,
  • График обучения лямбда не зависит от алгоритма и может использоваться одинаково для всех методов,
  • Переместите как можно больше шаблонов за пределы определений алгоритмов: итерация по набору данных, ведение журнала, создание контрольных точек, переход от ЦП к ГП и т. Д.

На самом деле, большая часть шаблонов обрабатывается с помощью PyTorchLightning, библиотеки, разработанной специально для этого, облегченной оболочки PyTorch для исследователей машинного обучения, которую я рекомендую вам проверить, если вы хотите реализовать новые алгоритмы с использованием ADA.

ADA построена на основе PyTorch и PyTorchLightning, чтобы предоставить вам функции, наиболее полезные для адаптации домена:

  • Параллельная итерация по исходным и целевым данным, обработка неконтролируемых и частично контролируемых целевых данных,
  • Моделирование дисбаланса классов с изменением веса исходного и / или целевого класса,
  • Встроенные приемы обучения адаптации предметной области, такие как этап «разминки» источника и графики гиперпараметров.

На момент написания этой статьи реализованы методы из 3 различных семейств, а именно: DANN, CDAN, WDGRL, DAN и JAN. Для полууправляемого обучения у нас уже есть наивная адаптация DANN и MME. Пожалуйста, ознакомьтесь с документацией, если вы хотите узнать, что скрывается за этими сокращениями 😃!

Разделение задач между набором данных, сетевой архитектурой и методом адаптации домена отражается в том, как определяются параметры эксперимента, который включает 3 файла конфигурации:

  • Один для описания используемого набора данных,
  • Один для описания сетевой архитектуры и соответствующих гиперпараметров обучения со значениями по умолчанию, доступными для основных наборов данных,
  • Один для описания запускаемых методов с их параметрами.

Файлы конфигурации по умолчанию доступны для 3 семейств наборов данных:

  • Данные игрушки: либо гауссовы капли, либо 2 луны,
  • Цифры: по умолчанию MNIST → USPS, возможна любая комбинация MNIST, MNIST-M, USPS, SVHN,
  • Office31: по умолчанию Amazon → Веб-камера, возможна любая комбинация Amazon, веб-камеры, DSLR.

Воспроизводимость: встроенный протокол оценки

При чтении статей и воспроизведении экспериментов расстраивает разрыв между протоколом оценки, описанным в статье, и кодом. Например, авторский сценарий выведет одно число, но в документе указано среднее значение и доверительный интервал. Как они рассчитываются? На сколько пробежек? Эта информация редко встречается в коде.

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

  • Файл csv, записывающий каждый отдельный результат в виде строки, по одному файлу csv для каждого параметра конфигурации,
  • Файл уценки, обобщающий результаты в виде таблицы с добавлением нового результата в файл для каждой конфигурации,
  • По желанию, файлы изображений, показывающие графики PCA, TSNE, UMAP для многомерных наборов данных, и многое другое для наборов данных игрушек.

Это вид вывода, который вы получаете бесплатно: сравните свои результаты в Markdown (в качестве следующего шага вы можете запустить pandoc, чтобы преобразовать его в LaTeX и скопировать и вставить в свой документ). Мы отсылаем вас к документации за описанием всех алгоритмов, перечисленных здесь.

Звучит здорово, как мне это получить?

Проверьте это на Github и запустите:

git clone [email protected]:criteo-research/pytorch-ada.git

установите его с помощью pip install -e adalib, перейдите в каталог сценария и запустите:

  • python run_simple.py: чтобы перебрать все методы в маленьком игрушечном примере, добавьте-h, чтобы увидеть все доступные параметры, используйте -d ../configs/datasets/digits.json для запуска в MNIST → USPS.
  • pip install streamlit и streamlit run run_toys_app.py, чтобы запустить сервер с оптимизированным приложением и поиграть,
  • python run_full_options.py -h, чтобы увидеть полный набор опций.

Кроме того, вы можете ознакомиться с документацией на pytorch-ada.readthedocs.io и добавить свои собственные методы, отчеты об ошибках и т. Д. В репозиторий Github. Нам не терпится увидеть ваш вклад и отзывы!

Если эта библиотека полезна для вашего исследования, процитируйте:

@misc{adalib2020,
  title={(Yet) Another Domain Adaptation library},
  author={Tousch, Anne-Marie and Renaudin, Christophe},
  url={https://github.com/criteo-research/pytorch-ada},
  year={2020}
}

Графика сделана с помощью великолепного Excalidraw.

[1] Ганин, Ярослав и др. Предметно-состязательное обучение нейронных сетей. Журнал исследований в области машинного обучения (2016) https://arxiv.org/abs/1505.07818

Если вам понравилась эта статья, узнайте, чем занимается наша команда изо дня в день:



А если вы заинтересованы в пополнении наших библиотек, перейдите на нашу страницу карьеры или свяжитесь с нами напрямую!