Несмотря на то, что вариационные автоэнкодеры (VAE) легко внедрить и обучить, объяснить их совсем не просто, потому что они сочетают концепции глубокого обучения и вариационного байесовского подхода, а сообщества глубокого обучения и вероятностного моделирования используют разные термины для одних и тех же понятий. Таким образом, при объяснении VAE вы рискуете либо сконцентрироваться на части статистической модели, оставив читателя без понятия о том, как на самом деле его реализовать, либо наоборот сосредоточиться на архитектуре сети и функции потерь, в которой термин Кульбака-Лейблера кажется вытащил из воздуха. Я постараюсь найти здесь золотую середину, начиная с модели, но приводя достаточно подробностей, чтобы фактически реализовать ее на практике, или понять чью-либо реализацию.
VAEs являются генеративными моделями
В отличие от классических (редких, шумоподавляющих и т. Д.) Автоэнкодеров, VAE являются генеративными моделями, такими как GAN. Под порождающей моделью я подразумеваю модель, которая изучает распределение вероятности по входному пространству . Это означает, что после того, как мы обучили такую модель, мы можем выбрать из (наше приближение) . Если наш обучающий набор состоит из рукописных цифр (MNIST), то после обучения генерирующая модель может создавать изображения, похожие на рукописные цифры, даже если они не являются «копиями» изображений в обучающем наборе.р ( х )Икср ( х )
Изучение распределения изображений в обучающем наборе подразумевает, что изображения, которые выглядят как рукописные цифры, должны иметь высокую вероятность генерирования, в то время как изображения, которые выглядят как Веселый Роджер или случайный шум, должны иметь низкую вероятность. Другими словами, это означает изучение зависимости между пикселями: если наше изображение представляет собой изображение в градациях серого в пикселей из MNIST, модель должна узнать, что если пиксель очень яркий, то существует значительная вероятность того, что некоторые соседние пиксели тоже яркие, что если у нас длинная наклонная линия ярких пикселей, у нас может быть другая меньшая горизонтальная линия пикселей выше этой (a 7) и т. д.28 × 28 = 784
VAE являются скрытыми переменными моделями
VAE - это модель скрытых переменных : это означает, что , случайный вектор с интенсивностью 784 пикселей ( наблюдаемые переменные), моделируется как (возможно, очень сложная) функция случайного вектора меньшей размерности, компоненты которого являются ненаблюдаемыми ( скрытыми ) переменными. Когда такая модель имеет смысл? Например, в случае MNIST мы думаем, что рукописные цифры принадлежат многообразию измерения, намного меньшему, чем измерениеИксz ∈ Z xz ∈ ZИксПотому что подавляющее большинство случайных расположений с интенсивностью 784 пикселя совсем не похожи на рукописные цифры. Интуитивно мы ожидаем, что размерность будет не менее 10 (количество цифр), но, скорее всего, она больше, потому что каждая цифра может быть написана по-разному. Некоторые различия не важны для качества конечного изображения (например, глобальные повороты и переводы), но другие важны. Так что в этом случае скрытая модель имеет смысл. Подробнее об этом позже. Обратите внимание, что, что удивительно, даже если наша интуиция говорит нам, что размерность должна составлять около 10, мы определенно можем использовать только 2 скрытые переменные для кодирования набора данных MNIST с помощью VAE (хотя результаты не будут хорошими). Причина в том, что даже одна действительная переменная может кодировать бесконечно много классов, потому что она может принимать все возможные целочисленные значения и многое другое. Конечно, если классы имеют значительное перекрытие между ними (например, 9 и 8 или 7 и I в MNIST), даже самая сложная функция из двух скрытых переменных будет плохо справляться с генерацией четко различимых выборок для каждого класса. Подробнее об этом позже.
VAE предполагают многомерное параметрическое распределение (где - параметры ), и они изучают параметры многомерное распределение. Использование параметрического pdf для , которое предотвращает рост числа параметров VAE без границ с ростом обучающего набора, называется амортизацией в VAE lingo (да, я знаю ...).Q( z | x , λ )λQZ
Сеть декодеров
Мы начинаем с сети декодера, потому что VAE является порождающей моделью, и единственной частью VAE, которая фактически используется для генерации новых изображений, является декодер. Сеть энкодера используется только во время вывода (обучения).
Целью сети декодеров является создание новых случайных векторов принадлежащих входному пространству , то есть новых изображений, начиная с реализаций скрытого вектора . Это означает, что он должен выучить условное распределение . Для VAE это распределение часто считается многомерным гауссовым 1 :ИксИксZp ( x | z )
пφ( x | z ) = N( x | µ ( z ; ϕ ) , σ ( z ; ϕ )2я)
φ - это вектор весов (и смещений) сети кодировщика. Векторы и являются сложными неизвестными нелинейными функциями, смоделирована сетью декодера: нейронные сети являются мощными нелинейными функциями аппроксиматоров.μ ( z ; ϕ )σ ( z ; ϕ )
Как отмечает @amoeba в комментариях, существует удивительное сходство между декодером и классической моделью скрытых переменных: факторный анализ. В Факторном анализе вы принимаете модель:
х | z ∼ N(Wz+μ,σ2I), z∼N(0,I)
Обе модели (FA и декодер) предполагают, что условное распределение наблюдаемых переменных по скрытым переменным является гауссовским, а сами являются стандартными гауссианами. Разница заключается в том, что декодер не предполагает, что среднее значение является линейным в , и не предполагает, что стандартное отклонение является постоянным вектором. Напротив, он моделирует их как сложные нелинейные функции . В этом отношении это можно рассматривать как нелинейный факторный анализ. Смотри здесьxzzp(x|z)zzдля глубокого обсуждения этой связи между FA и VAE. Поскольку FA с изотропной ковариационной матрицей представляет собой просто PPCA, это также связано с хорошо известным результатом, что линейный автоэнкодер сводится к PCA.
Давайте вернемся к декодеру: как мы узнаем ? Интуитивно нам нужны скрытые переменные которые максимизируют вероятность генерации в обучающем наборе . Другими словами, мы хотим вычислить апостериорное распределение вероятностей , учитывая данные:ϕzxiDnz
p ( z | x ) = pφ(x|z)p(z)p(x)
Мы предполагаем до , и у нас остается обычная проблема в байесовском выводе, что вычисление ( доказательство ) является трудным ( многомерный интеграл). Более того, поскольку здесь неизвестно, мы все равно не сможем его вычислить. Введите Variational Inference, инструмент, который дает Variational Autoencoders их имя.N(0,I)Zр ( х )μ ( z ; ϕ )μ ( z ; ϕ )
Вариационный вывод для модели VAE
Вариационный вывод - это инструмент для выполнения приближенного байесовского вывода для очень сложных моделей. Это не слишком сложный инструмент, но мой ответ уже слишком длинный, и я не буду вдаваться в подробное объяснение VI. Вы можете посмотреть этот ответ и ссылки на него, если вам интересно:
/stats//a/270569/58675
Достаточно сказать, что VI ищет приближение к в параметрическом семействе распределений , где, как отмечено выше, являются параметрами семейства. Мы ищем параметры, которые минимизируют расхождение Кульбака-Лейблера между нашим целевым распределением и :p ( z | x )Q( z | x , λ )λp ( z | x )Q( z | x , λ )
минλD[p(z|x)||q(z|x,λ)]
Опять же, мы не можем минимизировать это напрямую, потому что определение дивергенции Кульбака-Лейблера включает доказательства. Представляя ELBO (Evidence Lower BOund) и после некоторых алгебраических манипуляций, мы наконец получаем:
ЕL B O ( λ ) = EQ( z | x , λ )[ журналp ( x | z ) ] - D [ ( q(z|x,λ)||p(z)]
Так как ELBO является нижней границей доказательств (см. Ссылку выше), максимизация ELBO не совсем эквивалентна максимизации вероятности данных, заданных (в конце концов, VI является инструментом для приблизительного байесовского вывода), но это идет в правильном направлении.λ
Чтобы сделать вывод, нам нужно указать параметрическое семейство . В большинстве VAE мы выбираем многомерное некоррелированное распределение Гауссаq(z|x,λ)
q(z|x,λ)=N(z|μ(x),σ2(x)I)
Это тот же выбор, который мы сделали для , хотя мы могли выбрать другое параметрическое семейство. Как и прежде, мы можем оценить эти сложные нелинейные функции, введя модель нейронной сети. Поскольку эта модель принимает входные изображения и возвращает параметры распределения скрытых переменных, мы называем это сетью кодировщика . Как и прежде, мы можем оценить эти сложные нелинейные функции, введя модель нейронной сети. Поскольку эта модель принимает входные изображения и возвращает параметры распределения скрытых переменных, мы называем это сетью кодировщика .p ( x | z )
Кодер сети
Также называется сетью логического вывода , она используется только во время обучения.
Как отмечалось выше, кодировщик должен аппроксимировать и , таким образом, если мы имеем, скажем, 24 скрытых переменных, вывод кодер является вектором . Кодировщик имеет весовые коэффициенты (и смещения) . Чтобы выучить , мы, наконец, можем написать ELBO в терминах параметров и сети кодировщика и декодера, а также уставок обучения:μ ( х )σ ( х )d= 48θθθφ
ЕL B O ( θ , ϕ ) = ∑яЕQθ( z | xя, λ )[ журналпφ( хя| z ) ] - D [ ( qθ( z | xя,λ)||p(z)]
Мы можем наконец заключить. Противоположность ELBO, как функция и , используется как функция потерь VAE. Мы используем SGD, чтобы минимизировать эту потерю, то есть максимизировать ELBO. Поскольку ELBO является нижней границей доказательств, это идет в направлении максимизации доказательств и, таким образом, генерирования новых изображений, которые оптимально аналогичны тем, которые есть в обучающем наборе. Первое слагаемое в ELBO - это ожидаемая отрицательная логарифмическая вероятность тренировочных уставок, поэтому он побуждает декодер создавать изображения, аналогичные обучающим. Второй член можно интерпретировать как регуляризатор: он побуждает кодировщик генерировать распределение для скрытых переменных, которое похоже наθϕp(z)=N(0,I), Но сначала введя вероятностную модель, мы поняли, откуда исходит целое выражение: минимизация расхождения Куллабка-Лейблера между приближенными апостериорными и модель апостериорного . 2Qθ( z | x , λ )p ( z | x , λ )
Как только мы и путем максимизации , мы можем выбросить кодировщик. С этого момента, чтобы генерировать новые изображения, просто и распространите его через декодер. Выходными данными декодера будут изображения, аналогичные изображениям в обучающем наборе.θφЕL B O ( θ , ϕ )z ∼ N( 0 , я)
Ссылки и дальнейшее чтение
1 Это предположение не является строго необходимым, хотя оно упрощает наше описание VAE. Тем не менее, в зависимости от приложений, вы можете принять другое распределение для . Например, если является вектором бинарных переменных, гауссовский не имеет смысла, и можно предположить многовариантный Бернулли.пφ( x | z )Иксп
2 Выражение ELBO с его математической элегантностью скрывает два основных источника боли для практиков VAE. Одним из них является средний член . Это эффективно требует вычисления ожидания, которое требует взятия нескольких выборок изЕQθ( z | xя, λ )[ журналпφ( хя| я ) ]Qθ( z | xя, λ ), Учитывая размеры задействованных нейронных сетей и низкую скорость сходимости алгоритма SGD, отрисовка нескольких случайных выборок на каждой итерации (фактически для каждой мини-партии, что еще хуже) занимает очень много времени. Пользователи VAE решают эту проблему очень прагматично, вычисляя это ожидание с помощью одной (!) Случайной выборки. Другая проблема заключается в том, что для обучения двух нейронных сетей (кодер и декодер) с помощью алгоритма обратного распространения мне нужно уметь различать все этапы, связанные с прямым распространением, от кодера к декодеру. Поскольку декодер не является детерминированным (оценка его вывода требует рисования по многомерному гауссову), даже не имеет смысла спрашивать, является ли это дифференцируемой архитектурой. Решением этой проблемы является уловка репараметризации .