В предыдущей статье на примере игрушечных моделей я попытался проанализировать почему же, собственно, у нас получается достаточно эффективно обучать GAN’ы. Сейчас же мы попробуем обобщить некоторые результаты и, самое главное, попробуем проанализировать как влияет архитектура нейронных сетей на устойчивость процесса обучения.
Введение
На процесс обучения GAN можно смотреть как на процесс минимизации нижней грани дивергенции или как на динамическую систему состоящую из дискриминатора и генератора. Первый подход очень хорошо проработан, если кому интересно может найти очень много интересных работ на эту тему, приведу лишь самые значительные на мой взгляд: f-GAN, WGAN. С другой стороны The Numerics of GANs, Lars Mescheder et al, 2017 показали что на GAN нельзя смотреть только с позиции минимизации дивергенции (хотя это и является основной целью), но еще нужно учитывать свойства динамической системы. Наша цель объединить эти два подхода и посмотреть какими же теоретическими свойствами будут обладать траектории такой динамической системы.
Далее мы будем рассматривать достаточно общую форму функционала GAN (GAN objective).
где — параметры дискриминатора, — параметры генератора. А также предполагаем что генератор и дискриминатор дважды дифференцируемые функции.
Процесс обучения математически можно сформулировать как:
Точка покоя
Несмотря на огромное количество работ по GAN вопрос о существовании точки покоя остается открытым. Сейчас мы попробуем ответить на этот вопрос.
Предположим, (Предположение 1) что для любого генератора существует дискриминатор максимизирующий
Т.е функция
определена при любых значениях . Хотя возможно и многозначная — т.е существует множество различных оптимальных дискриминаторов. Мы будем называть все множество таких оптимальных дискриминаторов «репараметризацией», а множество множеством репараметризации дискриминатора. Сделаем небольшое уточнение — под максимумом мы понимаем не только глобальный максимум, а любой локальный.
Математически определяется системой уравнений:
Хотя в случае если генератор и дискриминатор нейронные сети, а обучаем мы генератор картинок, это предположение не выполняется. В следующих статьях я покажу как этого можно достичь с помощью простого регуляризатора, пока же придется поверить в это.
Второе предположение (Предположение 2) заключается в том, что для любого бесконечно малого изменения параметров генератора, существует оптимальный дискриминатор бесконечно близко к текущему. Можно попробовать выяснить когда это выполняется для нейронных сетей, но мне кажется это интуитивно понятное требование и с большой вероятностью оно выполняется для достаточно гибких сетей.
Математически это требование можно сформулировать так: система уравнений
имеет решения при любых .
Это условие легко получается из разложения в ряд Тейлора.
Сейчас мы покажем, что при выполнении предположения 2 градиент генератора не меняется если мы двигаемся вдоль множества репараметризации дискриминатора. Двигаться вдоль множества репараметризации математически означает что принадлежит ядру т.е:
Разложим в ряд Тейлора:
Откуда, для того чтобы градиент не менялся, необходимо чтобы принадлежал ядру . Но если принадлежит ядру и выполняется (1), то принадлежит ядру . Это легко показать умножив (1) на и учитывая что может быть любым:
Только что мы доказали замечательный факт, что градиент независит от того какой выбран из множества репараметризации дискриминатора, а значит является дифференцируемой функцией от и мы можем ее минимизировать используя градиентные методы оптимизации.
Что же можно сказать о минимуме этой функции? К сожалению, сделать каких либо самых общих выводов пока не получается. Нам приходится сделать еще одно предположение (Предположение 3) о свойствах дискриминатора, а именно . Из мат-анализа мы знаем что непрерывная функция ограниченная снизу либо достигает своего минимального значения, либо существуют монотонно убывающие последовательности точек (т.е функция достигает своего минимума на бесконечности).
Предположение 3 утверждает что независимо от из какой точки мы начали тренировать дискриминатор (инициализации нейросети), оптимальный дискриминатор всегда присваивает данным более высокое (либо равное) значение (в среднем), чем семплам из генератора и любой дискриминатор делающий наоборот не может быть оптимальным. На мой взгляд это предположение очень логично внутренне и достаточно гибкие нейронные сети должны ему удовлетворять. Кстати, несложно показать что линейный дискриминатор удовлетворяет этому предположению.
«Оптимальная траектория»
Мы только что выяснили, что при если дискриминатор удовлетворяет достаточно «мягким» предположениям, то либо точка покоя существует, либо она распололожена на бесконечности и мы можем ассимптотически к ней приближаться.
Для этого предположим, что и текущие параметры, причем дискриминатор натренирован до сходимости. Теперь мы немножко меняем генератор (), так что уменьшается — например делаем один шаг градиентного спуска. Как мы должны обновить дискриминатор? Ответ дает формула (1):
где — псевдообратная матрица.
Если быть математически строгим — то формула (2) определяет касательную гиперплоскость к поверхности в пространстве параметров на которой «живут» оптимальные дискриминаторы. Будем называть эту поверхность «оптимальной».
Но что будет, если мы начали из очень близкой точки, но все же дискриминатор там не был оптимальный. Очевидно, что наша формула описывает абсолютно непредсказуемые траектории, т.к. она была получена только для оптимальных дискриминаторов. Давайте попробуем исправить эту ситуацию. В этом случае логично было бы двигаться не только параллельно «оптимальной» поверхности, но и еще по направлению к ней. Очевидно, что шаг в направлении указываемом методом Ньютона вполне подходит для этого. Конечная наша формула будет выглядеть так:
Что же мы только что сделали? Во-первых заметим, что на оптимальной поверхности , т.е. если если был натренированный до сходимости дискриминатор, то мы не поменяли траекторию. С другой стороны если мы начали где то возле «оптимальной» точки, то добавочный член будет «тянуть» нас на «оптимальную» траекторию. Т.е мы сделали «оптимальную» траекторию устойчивой к шуму.
К сожалению, математически это доказать у меня не получается. Но это нам и не понадобится. Давайте присмотримся более внимательно к формуле (3), ее можно переписать в виде:
Ничего не напоминает? Выглядит почти как метод Ньютона. Это говорит о том что поочередные (в англ. язычной литературе используют alternating) обновления параметров генератора и дискриминатора, где дискриминатор обновляется методом Ньютона (на самом деле нам не обязательно делать полный Ньютоновский шаг, а можно сделать небольшой шажок в направлении указываемом методом Ньютона), а генератор вообще говоря может делать шаг в любом направлении, главное чтобы уменьшалась , является хорошим приближением движения вдоль оптимальной траектории.
Кстати, возможно именно в этом кроется такая успешность Adam'a в обучении GAN. Ведь хорошо известно что Adam пытается аппроксимировать Гессиан и использует эту информацию для градиентного шага (аппроксимирует метод Ньютона).
Устойчивость траекторий
Для анализа устойчивости траекторий мы будем использовать такие же инструменты как использовали парни в Which Training Methods for GANs do actually Converge?. У кого есть время рекомендую хорошо разобраться в этой работе, она того стоит.
Я считаю, что самый главный недостаток этой статьи — авторы анализируют устойчивость системы в точке покоя, которой просто не существует для большинства реальных GAN (для игрушечных 2D или 3D примеров конечно такое возможно). Я имею ввиду не вообще точки покоя не существует, а точки в которой генератор имеет такое же распределение как данные, а дискриминатор тождественный 0. Поэтому мы не будем анализировать устойчивость системы в точке покоя, мы пойдем немножко другим путем — мы попытаемся проанализировать устойчивость траекторий системы. Хотя этот анализ можно легко перенести и на точку покоя, ведь точка покоя это тоже траектория.
В качестве исследуемых траекторий выберем траектории получающиеся при обучении градиентным спуском. Почему это важно? Во-первых ранее мы выяснили что же представляет из себя «оптимальная» траектория и обнаружили что она может быть хорошо аппроксимирована обновлениями дискриминатора в направлении указываемом методом Ньютона. А метод Ньютона самый что ни на есть градиентный метод, использующий информацию от вторых производных для того чтобы скорректировать направление. Ну а главная причина, почему мы делаем именно это очень проста — потому что можем. Любое отклонение от этого приводит к таким сумасшедшим формулам, что понять что-либо там просто невозможно.
Стандартный способ анализа устойчивости траекторий — анализ линеаризованных моделей. Аналогично авторам Which Training Methods for GANs do actually Converge? мы будем исследовать Якобиан траекторий:
где — единичная матрица.
Мы предположим что дискриминатор, хоть и не оптимальный, но достаточно близок к оптимальному чтобы выполнялось . А также что регуляризатор (я уже упоминал что в реальных GAN дискриминатор не имеет оптимальной точки и что мы должны создать эту точку с помощью регуляризатора) не завист от генератора. Забегу немного вперед — самый лучший регуляризатор который мы нашли на практике зависит, но для наших теоретических исследований это предположение не так уж сильно нас ограничивает.
Для дальнейшего нам понадобится один элементарный факт о матрицах: если и , то существует такое что спектральная норма матрицы будет меньше либо равна 1.
Доказательство элементарно — запишем :
но:
Отсюда в силу непрерывности собственных чисел, очевидно что можно подобрать такое что собственные числа будут меньше либо равны 1. Отсюда следует нужный нам факт что .
Мы знаем что на нашей траектории выполняется (поскольку траектория «оптимальная») и если бы было то любая бы траектория (в том числе точка покоя «equilibrium point») была устойчивой — т.е при небольшом отклонении от траектории система стремилась бы на нее вернутся. Это очевидно потому что любую дискретную траекторию можно представить как произведение якобианов, а произведение матриц с нормой меньше либо равной 1 не может иметь нормы больше 1.
Но огромное множество фактов говорят что для GAN это не всегда так. Яркие пример — мод коллапс, который к тому же происходит не всегда и не для всех моделей. Я утверждаю что сложность обучения GAN связана с двумя фактами: не существует оптимального дискриминатора (лечится регуляризатором) и якобиан генератора не является неотрицательно определенной матрицей. Сейчас мы попробуем понять как если не полностью избавиться от второй проблемы, то хотя бы минимизировать ее влияние на устойчивость.
Для этого выпишем якобиан генератора. Он будет состоять из трех слагаемых:
Поскольку выражения для якобиана очень сложные и не получается увидеть какой то структуры все наши действия будут направлены на то чтобы эти матрицы были как можно ближе к 0.
видно что это слагаемое очень легко обнулить — достаточно либо выбрать функцию такую чтобы либо чтобы «рабочая точка» была в области где вторая производная близка к 0. Кстати, выбор функции соответствует WGAN. Связано ли с этим что WGAN известна своей стабильностью?
На два других слагаемых можно влиять только архитектурой нейронных сетей. Например, они обнуляются в случае линейных генератора и дискриминатора (вторые производные нулевые). Кстати, на ум приходят ReLU активации — к сожалению этот анализ не применим для таких сетей, потому что нарушается предположение о дифференцируемости. Но из практики известно что действительно GAN с нейросетями с кусочно линейными активациями обучаются гораздо стабильнее, чем например с гиперболическими тангенсами. Связано ли это с якобианом или есть другая более важная причина остается гадать, но в будущем я планирую немного исследовать этот вопрос.
Еще можно сделать вывод что GAN «предпочитает» широкие сети. И действительно мы знаем что GAN с глубокими сетями более часто коллапсится.
Заключение
В этой статье я попробовал дать ответы на долгоиграющие вопросы в теории GAN. Мы с вами увидели что для того чтобы существовала точка покоя, достаточно чтобы дискриминатор обладал достаточно простыми свойствами. Так же мы увидели что вероятностная (минимизация дивергенции) трактовка GAN имеет все права на жизнь и что достаточно простым алгоритмом мы можем очень хорошо аппроксимировать «оптимальные» траектории. А также что алгоритм Adam уже это делает и в теории должен стабилизировать обучение GAN, что кстати было отмечено во многих работах.
Еще, что немало важно, мы увидели что эмпирические рекомендации по выбору архитектуры нейронных сетей и функции потерь вполне согласуются с теорией. А самое главное все проблемы в обучении из-за нелинейностей — линейные модели обучаются очень стабильно.
Что осталось вне статьи? Практика. В следующей статье я опишу регуляризатор, который я использую для того чтобы обеспечить точку покоя дискриминатору и еще кучу трюков улучшающих стабильность процесса обучения GAN (кстати некоторые из них мотивированы этим анализом).
И как пример глубокая сеть (50 слоев генератор и 50 слоев дискриминатор) натренированная на LSUN bedroom датасете (всего 100 тыс. итераций и мы не использовали усреднение генератора)