Советы по обучению стабильных генеративно-состязательных сетей (GAN)

Эмпирическая эвристика, советы и хитрости, которые полезно знать для обучения стабильных генеративно-состязательных сетей (GAN).
SONY DSC

Адаптированный перевод статьи Jason Brownlee от 19 июня 2019г. в Generative Adversarial Networks

Эмпирическая эвристика, советы и хитрости, которые полезно знать для обучения стабильных генеративно-состязательных сетей (GAN).

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

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

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

В этом посте вы познакомитесь с эмпирической эвристикой для настройки и обучения стабильных моделей состязательных сетей.

Прочитав этот пост, вы узнаете:

  • Одновременное обучение моделей генератора и дискриминатора в GAN по своей природе нестабильно.
  • Выработанные с большим трудом эмпирические конфигурации для DCGAN обеспечивают надежную отправную точку для большинства приложений GAN.
  • Стабильное обучение GAN остается открытой проблемой, даже с учетом многих эмпирически полученных советов и приемов, которые могут использоваться на практике.

Давайте начнем.

How to Train Stable Generative Adversarial Networks

Как обучить стабильные генеративные состязательные сети
Снято
Крисом Стерном-Джонсоном , права защищены.

Обзор

Этот пост разделен на три части:

  1. Сложности обучения GAN
  2. Глубокий сверточный GAN
  3. Дополнительные советы и подсказки

Задача обучения генеративных состязательных сетей

GAN трудно тренировать.

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

Цель обучения двух моделей заключается в нахождении точки равновесия между двумя конкурирующими задачами.

Обучение GAN состоит в нахождении равновесия Нэша для антагонистической игры двух игроков. […] К сожалению, найти равновесия по Нэшу очень сложно. Алгоритмы существуют для специализированных случаев, но мы не знаем ни одного, который можно применить к игре GAN, где функции стоимости невыпуклы, параметры непрерывны, и пространство параметров чрезвычайно многомерно

Улучшенные методики обучения GAN , 2016.

Это также означает, что каждый раз, когда параметры одной из моделей обновляются, характер решаемой задачи оптимизации изменяется.

Это означает, что система являктся динамической.

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

– Страница 306, Глубокое обучение с Python , 2017.

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

Самая большая проблема, стоящая перед GAN, которую исследователи должны решить, – это проблема неконвергенции.

Учебное пособие NIPS 2016: Генеративные состязательные сети , 2016.

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

Обычно, режим отказа состоит в том, что вместо нахождения точки равновесия генератор зацикливается в генерации конкретных примеров из области данных задачи.

На практике GAN часто, кажется, циклятся, […] это означает, что они переходят от генерации выборки одного типа к генерации выборки другого типа, не достигая в конечном итоге равновесия.

Учебное пособие NIPS 2016: Генеративные состязательные сети , 2016.

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

Это называется «режимом коллапса» и может представлять одну из самых сложных проблем при обучении GAN.

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

Учебное пособие NIPS 2016: Генеративные состязательные сети , 2016.

Наконец, нет хороших объективных показателей для оценки того, хорошо ли работает GAN во время обучения. В частности, использование функции потерь не является достаточным.

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

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

Улучшенные методики обучения GAN , 2016.

На момент написания статьи не было хорошего теоретического обоснования того, как проектировать и обучать модели GAN, но есть устоявшаяся литература по эвристике, или « взломам », которая эмпирически продемонстрировала, что она хорошо работает на практике.

Глубокие сверточные генеративные состязательные сети

Возможно, одним из наиболее важных шагов в разработке и обучении стабильных моделей GAN стала статья Алек Рэдфорд и соавторов, опубликованная в 2015 году под названием «Репрезентативное обучение с использованием неконтролируемых генеративных состязательных сетей».

В этой статье авторы описывают подход Deep Convolutional GAN, или DCGAN, к разработке GAN, который стал стандартом де-факто.

Стабилизация обучения GAN остается открытой проблемой. К счастью, GAN-обучение хорошо работает, если тщательно подобрать архитектуру модели и гиперпараметры. Рэдфорд и соавторы (2015г) создали глубокую сверточную GAN (DCGAN), которая очень хорошо справляется с задачами синтеза изображений …

– Страница 701, Глубокое Обучение , 2016.

Example of the Generator Model Architecture for the DCGAN

Пример архитектуры модели генератора для DCGAN. Взято из презентации неконтролируемого обучения с помощью глубоких сверточных порождающих состязательных сетей, 2015.

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

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

Репрезентативное неконтролируемое обучение с использованием глубоких сверточных генеративно-состязательных сетей , 2015

Ниже приводится резюме рекомендаций по архитектуре GAN, взятое из статьи.

Summary of Architectural Guidelines for Training Stable Deep Convolutional Generative Adversarial Networks

Краткое изложение рекомендаций для устойчивого обучения глубоких сверточных генеративно-состязательных сетей. Выдержка из “Репрезентативное неконтролируемое обучение с использованием глубоких сверточных генеративно-состязательных сетей“, 2015.

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

1. Используйте пошаговую свертку

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

В GAN рекомендуется не использовать уровни пулинга, а вместо этого использовать шаг в сверточных уровнях для понижения размерности в модели дискриминатора.

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

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

Репрезентативное неконтролируемое обучение с использованием глубоких сверточных генеративно-состязательных сетей“, 2015.

2. Удалите полностью связанные слои

Общепринято в сверточных слоях использовать полностью связанные слои после слоев извлечения признаков в качестве интерпретации извлеченных элементов до выходных слоев модели.

Вместо этого в GAN полностью связанные слои не используются, в дискриминаторе и сверточных слоях признаки передаются непосредственно на выходной слой.

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

Первый слой GAN, который принимает равномерное распределение шума Z в качестве входных данных, можно назвать полностью связанным, поскольку это всего лишь матричное умножение, но результат преобразуется в 4-мерный тензор и используется в качестве начала стека свертки. Для дискриминатора последний сверточный слой выравнивается и затем подается на один сигмоидный выход.

Репрезентативное неконтролируемое обучение с использованием глубоких сверточных генеративно-состязательных сетей“, 2015.

3. Используйте пакетную нормализацию

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

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

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

Репрезентативное неконтролируемое обучение с использованием глубоких сверточных генеративно-состязательных сетей“, 2015.

4. Используйте ReLU , Leaky ReLU и Tanh

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

ReLU рекомендуется для генератора, но не для модели дискриминатора. Вместо этого в дискриминаторе предпочтительнее вариант ReLU, который допускает значения меньше нуля, называемый Leaky ReLU .

Активации ReLU используется в генераторе, за исключением выходного слоя , который использует функцию Tanh. […] В дискриминаторе мы обнаружили, что Leaky ReLU работает хорошо…

Репрезентативное неконтролируемое обучение с использованием глубоких сверточных генеративно-состязательных сетей“, 2015.

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

Для тренировочных изображений не применялась предварительная обработка, кроме масштабирования до диапазона [-1, 1] функции активации tanh.

Репрезентативное неконтролируемое обучение с использованием глубоких сверточных генеративно-состязательных сетей“, 2015.

Веса модели были инициализированы для малых гауссовских случайных значений, а наклон Leaky ReLU в дискриминаторе был инициализирован до значения 0,2.

Все веса были инициализированы из нормального распределения с нулевым средним со стандартным отклонением 0,02. В Leaky ReLU наклон был установлен на 0,2 во всех моделях.

Репрезентативное неконтролируемое обучение с использованием глубоких сверточных генеративно-состязательных сетей“, 2015.

5. Используйте Адам Оптимизацию

И генератор, и дискриминатор обучаются со стохастическим градиентным спуском на небольшом пакете из 128 изображений.

Все модели были обучены с использованием мини-пакетного стохастического градиентного спуска (SGD) с размером мини-партии 128

Репрезентативное неконтролируемое обучение с использованием глубоких сверточных генеративно-состязательных сетей“, 2015.

В частности, версия стохастического градиентного спуска по Адаму использовалась для обучения моделей со скоростью обучения 0,0002 и импульсом (бета1) 0,5.

Мы использовали оптимизатор Adam с настроенными гиперпараметрами. Мы обнаружили, что предлагаемая скорость обучения 0,001 слишком высока, вместо этого мы использовали 0,0002. Кроме того, мы обнаружили, что оставление импульса β 1 при предлагаемом значении 0,9 привело к колебаниям и нестабильности, а снижение до 0,5 помогло стабилизировать обучение.

Репрезентативное неконтролируемое обучение с использованием глубоких сверточных генеративно-состязательных сетей“, 2015.

Дополнительные советы и подсказки

Документ DCGAN является отличной отправной точкой для настройки и обучения моделей генератора и дискриминатора.

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

В этом разделе мы рассмотрим некоторые из них и приведем дополнительные советы и рекомендации.

Статья Тима Салиманса 2016 года с соавторами из OpenAI под названием « Улучшенные методы для обучения GAN » перечисляет пять методов, которые необходимо учитывать, как утверждают авторы, для улучшения конвергенции при обучении GAN.

  • Сопоставление признаков. Разрабатывайте GAN, используя полу-контролируемое обучение.
  • Мини-пакетная дискриминация. Разрабатывайте признаки для нескольких образцов в мини-пакетах.
  • Историческое усреднение. Обновляйте функцию потерь, используя предыдущие результаты.
  • Одностороннее сглаживание метки. Масштабируйте целевые значения для дискриминатора, далекие от 1.0.
  • Виртуальная пакетная нормализация. Рассчитывайте пакетные статистики с использованием эталонной партии реальных изображений.

В своем учебнике 2016 года по GAN на конференции NIPS Ян Гудфеллоу подробно останавливается на некоторых из наиболее успешных из этих предложений, написанных в сопроводительном документе под названием « Учебник. Генеративные состязательные сети» . В частности, в разделе 4 под названием « Советы и хитрости » описаны четыре метода.

1. Обучение с метками. Использование меток в GAN улучшает качество изображения.

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

Учебное пособие NIPS 2016: Генеративные состязательные сети , 2016.

2. Одностороннее сглаживание меток. Использование меток для реальных примеров в дискриминаторе со значением 0,9 или меток со стохастическим диапазоном дает лучшие результаты.

Идея одностороннего сглаживания меток заключается в замене меток для реальных примеров значением, немного меньшим единицы, например 0,9 […]. Это предотвращает экстремальное поведение при экстраполяции в дискриминаторе…

Учебное пособие NIPS 2016: Генеративные состязательные сети , 2016.

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

… Вместо этого можно использовать нормализацию виртуального пакета, в которой статистика нормализации для каждого примера вычисляется с использованием объединения этого примера и эталонного пакета

Учебное пособие NIPS 2016: Генеративные состязательные сети , 2016.

4. Можно ли уравновесить G и D? Планирование обучения генератора или дискриминатора на основе относительных изменений функции потерь является интуитивно понятным, но ненадежным.

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

Учебное пособие NIPS 2016: Генеративные состязательные сети , 2016.

Soumith Чинтала , один из соавторов статьи DCGAN, выступил с презентацией на NIPS 2016 под названием «Как обучать GAN?», обобщив множество советов и подсказок.

Видео доступно на YouTube и настоятельно рекомендуется. Сводка советов также доступна в виде репозитория GitHub под названием «How to Train a GAN? Tips and tricks to make GANs work».

Советы основаны на предложениях из документа DCGAN, а также из других источников.

Краткое изложение некоторых наиболее действенных советов приведено ниже.

  • Нормализуйте входные данные в диапазоне [-1, 1] и используйте tanh на выходе генератора.
  • Поменяйте метки при обучении и функции потерь при люучении генератора.
  • Образец гауссовских случайных чисел в качестве входных данных для генератора.
  • Используйте мини-пакеты всех реальных или всех поддельных образцов для расчета пакетных норм статистики.
  • Используйте Leaky ReLU в генераторе и дискриминаторе.
  • Используйте средний пулинг и шаг для понижения размерности; используйте ConvTranspose2D и шаг для повышения размерности.
  • Используйте сглаживание меток в дискриминаторе с небольшим случайным шумом.
  • Добавьте случайный шум к меткам в дискриминаторе.
  • Используйте архитектуру DCGAN, если у вас нет веских причин для обратного.
  • Значение функции потерь = 0.0 в дискриминаторе является режимом сбоя.
  • Если функция потерь генератора неуклонно снижается, это, вероятно, означает, что дискриминатор обманывается изображениями мусора.
  • Используйте метки, если они у вас есть.
  • Добавьте шум к входам дискриминатора и уменьшите шум с течением времени.
  • Используйте отсев 50 процентов во время обучения и генерации.

И, наконец, книга Deep Learning with Python по Keras предоставляет ряд практических советов, которые следует учитывать при обучении GAN, основываясь в основном на предложениях из документа DCGAN.

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

… Часто встречаются артефакты шахматной доски, вызванные неравномерным покрытием пространства пикселей в генераторе. Чтобы исправить это, мы используем размер ядра, который делится на размер шага всякий раз, когда мы используем расширенный Conv2DTranpose или Conv2D как в генераторе, так и в дискриминаторе.

– Страница 308, Углубленное изучение с Python , 2017.

Это то же самое предложение, представленное в статье 2016 года на distill под названием «Артефакты деконволюции и шахматной доски».

Дальнейшее чтение

Books

Papers

Articles

Videos

Резюме

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

В частности , вы узнали:

  • Одновременное обучение моделей генератора и дискриминатора в GAN по своей природе нестабильно.
  • Выработанные с большим трудом эмпирические конфигурации для DCGAN обеспечивают надежную отправную точку для большинства приложений GAN.
  • Стабильное обучение GAN остается открытой проблемой, даже с учетом многих эмпирически полученных советов и приемов, которые могут использоваться на практике.
Поделиться...
Поделиться в facebook
Поделиться в twitter
Поделиться в vk