10 / 33 · GAN
GAN Вассерштейна и ограничение Липшица
Почему расстояние Вассерштейна-1 даёт генератору полезный градиент там, где JS насыщается, функции потерь критика и генератора в WGAN и два стандартных способа сохранить критика 1-липшицевым — штраф на градиент (WGAN-GP) и спектральная нормализация (SN-GAN).
Генеративно-состязательные сети · Дивергенция Йенсена–Шеннона
На этой странице 8
Заметка о GAN закончилась проблемой. При оптимальном дискриминаторе генератор минимизирует , а когда носители (supports) настоящего распределения и распределения генератора не пересекаются, , где бы ни находилось . Тогда (почти) оптимальный дискриминатор постоянен вокруг сгенерированных сэмплов, поэтому минимаксная функция потерь генератора не получает градиента, а ненасыщающаяся (non-saturating) даёт неустойчивые обновления (Arjovsky and Bottou, 2017, теоремы 2.1–2.2, 2.4 и 2.6; см. заметку о GAN). GAN Вассерштейна (Wasserstein GAN; Arjovsky, Chintala and Bottou, 2017) заменяет дивергенцию Йенсена–Шеннона (Jensen–Shannon divergence) расстоянием Вассерштейна-1 (Wasserstein-1 distance), которое продолжает уменьшаться по мере того, как движется к , даже когда они не перекрываются. Цена — ограничение на дискриминатор: он должен быть 1-липшицевым. Дальше в заметке разобраны функции потерь и два стандартных способа выполнить это ограничение.
Обозначения. — распределение настоящих данных, — распределение генератора ( с шумом , как в заметке о GAN), — критик (critic): так в WGAN называется дискриминатор, сеть с вещественным выходом и без сигмоиды. Его функция потерь сохраняет обозначение функции потерь дискриминатора, . Настоящие сэмплы — , подделки — . — евклидова норма.
Расстояние Вассерштейна-1#
Представим и как две кучи земли одинаковой массы. Транспортный план (transport plan) показывает, сколько массы перемещается из в ; его маргинальные распределения должны совпадать с и , а — множество всех таких планов (Peyré and Cuturi, 2019, глава 2). Перемещение массы на расстояние стоит , и , которое также называют расстоянием перемещения земли (earth mover’s distance), — наименьшая суммарная стоимость:
Сеть не может оптимизировать напрямую по всем транспортным планам. Для распределений на с конечными первыми моментами, для обоих, конечно, и двойственность Канторовича–Рубинштейна (Kantorovich–Rubinstein duality; Villani, 2009, замечание 6.5) переписывает инфимум как супремум по функциям:
где ( является 1-липшицевой) означает для всех . Отсюда и берутся критик и его ограничение: критик играет роль функции под знаком супремума. Он ставит настоящим сэмплам высокие оценки, а подделкам — низкие, но не может меняться быстрее расстояния. Без ограничения и при супремум был бы равен , поскольку любую разделяющую можно было бы умножить на сколь угодно большое число.
Почему это помогает. Возьмём две точечные массы: (данные) и (модель). При любом носители не пересекаются. Смесь помещает массу в каждый атом, поэтому каждое слагаемое KL в сравнивает массу с массой в одном атоме:
Единственный план перемещает всю массу на расстояние . не зависит от , поэтому её производная равна ; у наклон , и это расстояние всегда указывает модели направление к данным. Это вариант примера с параллельными прямыми из статьи о WGAN, записанный для точечных масс (Arjovsky, Chintala and Bottou, 2017, пример 1). В общем случае обозначим через распределение . Если данные лежат в компактном множестве, как везде предполагает статья, и непрерывна по , то непрерывно и . На неограниченном пространстве одной непрерывности мало, нужно ещё условие интегрируемости. Если — сеть прямого распространения (feedforward network), а априорное распределение удовлетворяет условию , которое и даёт такое условие, то непрерывно и ещё и дифференцируемо по почти всюду. Ни одно из этих утверждений не верно для или KL, которые могут меняться скачком (Arjovsky, Chintala and Bottou, 2017, теорема 1 и следствие 1).
D_JS постоянна при непересекающихся носителях; у W₁ остаётся наклон
Функции потерь WGAN#
Критик максимизирует двойственную целевую функцию, поэтому его функция потерь — она же со знаком минус. Генератор входит только во второе математическое ожидание и стремится к тому, чтобы значения критика на подделках были высокими:
Что измеряет ? Семейство сетей содержит лишь часть -липшицевых функций, поэтому даже его лучший представитель даёт — нижнюю оценку, которая становится точной, когда семейство содержит оптимального 1-липшицева критика, умноженного на ( для 1-липшицева семейства). При обучении — оценка этой величины по мини-батчу. В отличие от дискриминатора GAN, критика следует обучать почти до оптимума: чем лучше критик, тем надёжнее градиент , тогда как более сильный дискриминатор GAN насыщается. Поэтому критика обновляют несколько раз на каждый шаг генератора, в исходном алгоритме (Arjovsky, Chintala and Bottou, 2017, раздел 3 и алгоритм 1).
Если на критика наложено ограничение Липшица и он обучен почти до оптимума, в ходе одного запуска коррелирует с качеством сэмплов, чего нельзя сказать о функции потерь дискриминатора GAN (раздел 4.2, рисунки 3–4). Константа зависит от архитектуры критика, поэтому это число трудно сравнивать между моделями с разными критиками, и авторы не предлагают его в качестве метрики качества.
Сами по себе функции потерь не делают липшицевой. Исходный WGAN после каждого шага обрезал каждый вес критика до отрезка ; такая обрезка весов (weight clipping) делает критика -липшицевым для некоторого , которое зависит от и архитектуры. Авторы назвали это «откровенно ужасным способом» (a clearly terrible way) обеспечить ограничение: при большом критик медленно обучается до оптимума, а при малом градиенты могут затухать (Arjovsky, Chintala and Bottou, 2017, раздел 3). Статья о WGAN-GP показала, кроме того, что обрезка смещает критика в сторону слишком простых функций и что без тщательного подбора градиенты взрываются или затухают (Gulrajani et al., 2017, разделы 3.1–3.2). Два метода ниже заменяют обрезку.
WGAN-GP: штраф на градиент#
WGAN-GP (Gulrajani et al., 2017) сохраняет функции потерь WGAN и добавляет к функции потерь критика штраф на градиент (gradient penalty):
Первые два слагаемых — функция потерь критика WGAN, записанная в обратном порядке, а функция потерь генератора не меняется. Символ теперь включает штраф, поэтому уже не является оценкой нижней границы из предыдущего раздела: это та оценка минус , умноженное на штраф. Для наблюдения за обучением стоит записывать разность оценок на настоящих и поддельных данных и штраф по отдельности. Разность читается с прежними оговорками и ещё одной: мягкое ограничение делает критика лишь приближённо 1-липшицевым, так что разность не обязана быть нижней оценкой .
Почему норма градиента. Для дифференцируемой на быть 1-липшицевой — то же самое, что иметь всюду (одна импликация следует из определения производной, другая — из теоремы о среднем на отрезке). Поэтому, подталкивая к , мы сохраняем приблизительно 1-липшицевой. Буквальному ограничению соответствовал бы односторонний штраф . WGAN-GP использует двусторонний штраф , который не исключает оптимального критика. На компактном пространстве, если оптимальный критик дифференцируем, а оптимальный транспортный план (optimal coupling) перемещает каждую точку (), то норма градиента равна на отрезках между точками, которые этот план связывает друг с другом, а также почти всюду по мере и (Gulrajani et al., 2017, предложение 1 и следствие 1). В экспериментах авторов двусторонний штраф к тому же работал немного лучше (раздел 4 и приложение C). Ограничение мягкое: оно проверяется только в сэмплированных точках .
Откуда берётся . Сопоставим каждому настоящему сэмплу подделку, сэмплируем и возьмём случайную точку на отрезке между ними:
Предложение 1 говорит о парах, взятых из оптимального транспортного плана, а он неизвестен. Вместо этого WGAN-GP составляет пары из настоящих сэмплов и подделок случайным образом. Это эвристика, мотивированная предложением: обеспечить единичную норму всюду вычислительно неразрешимо (intractable), а требовать её только вдоль этих отрезков на практике достаточно (Gulrajani et al., 2017, раздел 4). В коде сэмплируется один раз на изображение и распространяется на все пиксели (broadcasting). Градиент выхода критика по вычисляется с помощью torch.autograd.grad(..., create_graph=True), чтобы через сам штраф тоже можно было выполнить обратное распространение ошибки. Затем для каждого сэмпла градиент вытягивается в вектор , и его норма входит в штраф . Во всех экспериментах статьи (раздел 4).
Штраф на градиент вычисляется между настоящими сэмплами и подделками
Без батч-нормализации в критике. Штраф рассматривает критика как функцию одного изображения: он ограничивает для каждого по отдельности. С батч-нормализацией (batch normalization) критик отображает целый мини-батч входов в мини-батч выходов, и штраф на градиент по каждому входу уже не описывает ту функцию, которую ограничивают. Поэтому WGAN-GP исключает батч-нормализацию из критика и допускает только нормализации, которые не смешивают примеры; авторы рекомендуют нормализацию слоя (layer normalization; Gulrajani et al., 2017, раздел 4). Подходит и нормализация по экземпляру (instance normalization), которая нормализует каждый канал каждого изображения по его пространственным позициям.
SN-GAN: спектральная нормализация#
Второй подход ограничивает не градиенты, а веса (Miyato et al., 2018). Авторы обучали свои SN-GAN со стандартной функцией потерь GAN и с кусочно-линейной функцией потерь (hinge loss), а не с функцией потерь Вассерштейна; WGAN-GP служил им базой для сравнения (раздел 4, формулы 15–17). Сама нормализация — это ограничение Липшица, и она так же применима к критику WGAN. Матрица весов каждого слоя делится на свою спектральную норму (spectral norm) — наибольшее сингулярное число:
Что такое сингулярное число. Линейное отображение растягивает пространство. Оно переводит единичную окружность в эллипс, а сингулярные числа говорят, насколько сильно отображение растягивает пространство в каждом направлении: правые сингулярные векторы переходят в — полуоси эллипса. Наибольшее из них, , — наибольший коэффициент, с которым может растянуться какой-либо вектор, поэтому оно равно константе Липшица отображения . После деления на него ни одно направление не растягивается больше чем в раз.
Матрица растягивает единичную окружность в эллипс; её наибольшее сингулярное число — самая длинная полуось
Для сети, в которой линейные слои чередуются с 1-липшицевыми активациями (ReLU, LeakyReLU), константы Липшица при композиции перемножаются, поэтому (Miyato et al., 2018, формула 7)
а после нормализации это произведение не превосходит .
В отличие от штрафа на градиент, ограничение накладывается на веса, а не проверяется в сэмплированных точках, и настраивать не нужно. В PyTorch это обёртка torch.nn.utils.spectral_norm(nn.Conv2d(...)) (в новом API — torch.nn.utils.parametrizations.spectral_norm), которая вместо полного SVD оценивает одним шагом степенного метода (power iteration) на каждый прямой проход в режиме обучения. На практике эта граница выполняется лишь приближённо, и тому есть три причины. Степенной метод даёт лишь приближённое значение . Для свёртки обёртка нормализует ядро, развёрнутое в матрицу, а это лишь суррогат операторной нормы свёртки, не равный ей; истинная норма зависит ещё и от шага (stride) и дополнения (padding) (Gouk et al., 2021, раздел 3.2; Miyato et al., 2018, сноска 3). Наконец, слои нормализации, стоящие между свёртками, в общем случае не 1-липшицевы. Поэтому спектральная нормализация держит константу Липшица критика под контролем, но не гарантирует, что она не превосходит . Кроме того, граница через произведение не обязана быть точной, так что нормализованный критик -липшицев для некоторого , которое может быть заметно меньше ; тогда критик WGAN со спектральной нормализацией оценивает нижнюю границу для , а не само .
Два двойственных взгляда#
И f-GAN из заметки о GAN, и WGAN обучают дискриминатор как функцию под знаком супремума. f-GAN использует оценку f-дивергенции (f-divergence) через сопряжённую по Фенхелю функцию (convex conjugate); f-дивергенция сравнивает отношения плотностей и поэтому наследует проблему носителей, присущую и KL. WGAN использует двойственную форму Канторовича–Рубинштейна для транспортной стоимости, которая сравнивает положения и остаётся информативной, когда носители не пересекаются. Ограничение Липшица — цена второго взгляда: именно оно связывает критика с геометрией пространства данных.
Ноутбук#
Ноутбук о WGAN из репозитория HSE-LAMBDA Deep Generative Models (закреплённый коммит; ячейки нумеруются с 1, считая все ячейки подряд, включая текстовые) реализует все три варианта на CelebA с разрешением . Все три функции обучения используют Adam с шагом обучения (learning rate) и betas и шагов критика на шаг генератора; в статье о WGAN-GP шаг обучения равен , а betas — (Gulrajani et al., 2017, алгоритм 1). Базовый запуск и запуск WGAN-GP рассчитаны на 2 эпохи, запуск со спектральной нормализацией — на 20.
- Ячейки 1–5: введение, расстояние перемещения земли и его двойственная форма Канторовича–Рубинштейна, а также целевая функция WGAN с критиком, выдающим вещественное число.
- Ячейки 6–9: данные. CelebA: 202 599 выровненных и обрезанных изображений лиц размером 178 × 218 пикселей (ширина × высота), принадлежащих 10 177 людям; каждое размечено 40 бинарными атрибутами, например «улыбается» или «в очках». Класс набора данных из курса возвращает атрибуты, а этот ноутбук их не использует. Изображения приводятся к размеру и масштабируются в , размер батча 1024 с
drop_last=True(197 батчей за эпоху), а ячейка 9 показывает сетку настоящих изображений. Ячейка 7 выбирает устройство (CUDA, Apple MPS или CPU).Resize((64, 64))с парой размеров масштабирует две стороны независимо, поэтому соотношение сторон меняется с 178 : 218 на 1 : 1, и лица становятся примерно на 22% шире относительно своей высоты;Resize(64)с последующимCenterCrop(64)сохраняет пропорции. - Ячейки 10–16: базовый WGAN. Ячейка 12 определяет сети. Генератор следует рекомендациям DCGAN: проходит через линейный слой без смещения с выходами,
BatchNorm1dи ReLU, переформируется в , и четыре транспонированные свёртки (transposed convolutions) с ядром 5, шагом 2, дополнением 2 и выходным дополнением (output padding), равным 1, проводят его через 256, 128 и 64 канала к , с батч-нормализацией и ReLU после первых трёх и Tanh после последней. Ядро 5 не делится на шаг 2, поэтому эти слои могут давать шахматные артефакты (checkerboard artifacts). Критик применяет четыре свёртки с шагом 2 и ядром 5, каналов, после каждой — LeakyReLU(0.2), сInstanceNorm2d(affine=True)после последних трёх и без нормализации на входе, а затем свёртку , дающую одно значение без сигмоиды.train_wgan(ячейка 14) используетd_loss = -mean(real_score) + mean(fake_score)иg_loss = -mean(fake_score). Базовый вариант не накладывает никакого ограничения Липшица — ни обрезки, ни штрафа (ячейка 11). Поэтому целевая функция его критика не ограничена (супремум выше равен ), его выходы иD_lossмогут неограниченно дрейфовать, а функция потерь не оценивает . Ячейка 13 отмечает, что обрезку весов можно добавить, обрезая веса критика до отрезка (clamp) после каждого обновления. Каждая функция обучения один раз сэмплирует 16 латентных векторов (fixed_noise, ячейки 14, 19 и 24) и после каждой эпохи декодирует их генератором в режиме инференса (evaluation mode), так что сетки прослеживают одни и те же коды на протяжении обучения. - Ячейки 17–21: WGAN-GP.
gradient_penalty(ячейка 18) сэмплирует отдельно для каждого элемента батча, интерполирует, дифференцирует сcreate_graph=Trueи штрафует норму каждого элемента;lambda_gp = 10. Критик — та же сеть, а еёInstanceNorm2dнормализует каждый сэмпл отдельно, поэтому штраф по отдельным сэмплам остаётся корректным (см. «Без батч-нормализации в критике»). Вtrain_wgan_gp(ячейка 19) штраф получаетfake_imgsбезdetach(), поэтому каждый шаг критика выполняет обратное распространение и через генератор. Эти градиенты обнуляются перед шагом генератора, так что на результаты это не влияет, но вычисления тратятся впустую. - Ячейки 22–27: спектральная нормализация.
DiscriminatorSNоборачивает каждую свёртку вspectral_norm; во внутренних блоках за нормализованной свёрткой следуютInstanceNorm2d(affine=True)и LeakyReLU, поэтому неравенство выше выполняется лишь приближённо. Обучение использует обычные функции потерь WGAN. - Ячейка 28: итоги.
Сохранённые выходы есть только у ячеек 7, 9, 26 и 27: устройство (mps), сетка настоящих изображений, индикаторы прогресса запуска со спектральной нормализацией, прерванного на 11-й эпохе из 20, и сэмплы из этого частично обученного генератора. Значения функций потерь не сохранены. У ячеек обучения и сэмплирования базового варианта и WGAN-GP нет сохранённых выходов, поэтому для этих вариантов ноутбук документирует только процедуры.
Дальше#
WGAN дал генератору полезный градиент, а спектральная нормализация удержала критика под контролем. Но встреченные до сих пор GAN всё ещё порождают маленькие изображения одного вида: лица 64×64, цифры, спальни. Следующая заметка прослеживает, что понадобилось, чтобы дойти до больших, разнообразных изображений высокого разрешения: постепенное наращивание сетей, self-attention для структуры, охватывающей всё изображение, и BigGAN, который масштабирует тот же рецепт на весь ImageNet.
Литература#
- M. Arjovsky, S. Chintala, L. Bottou. Wasserstein GAN. arXiv:1701.07875, 2017; опубликована на ICML 2017 под названием «Wasserstein generative adversarial networks». Номера разделов относятся к версии arXiv.
- M. Arjovsky, L. Bottou. Towards principled methods for training generative adversarial networks. ICLR, 2017.
- I. Gulrajani, F. Ahmed, M. Arjovsky, V. Dumoulin, A. Courville. Improved training of Wasserstein GANs. NeurIPS, 2017.
- T. Miyato, T. Kataoka, M. Koyama, Y. Yoshida. Spectral normalization for generative adversarial networks. ICLR, 2018.
- C. Villani. Optimal Transport: Old and New. Springer, 2009. Главы 5–6: двойственность Канторовича и расстояния Вассерштейна.
- G. Peyré, M. Cuturi. Computational optimal transport. Foundations and Trends in Machine Learning, 11(5–6), 2019.
- H. Gouk, E. Frank, B. Pfahringer, M. J. Cree. Regularisation of neural networks by enforcing Lipschitz continuity. Machine Learning, 110, 2021.
- HSE-LAMBDA, репозиторий курса Deep Generative Models:
WGAN.ipynb.