07 / 33 · Вариационные автоэнкодеры
Вариационные автоэнкодеры
Почему обычный автоэнкодер не может генерировать, модель с латентными переменными, лежащая в основе VAE, приближённое апостериорное распределение и ELBO, трюк репараметризации, KL-штраф в замкнутой форме в скалярном и матричном виде, на что на самом деле накладывает ограничение априорное распределение N(0, I), и условный VAE, которому можно указать, что генерировать.
Автоэнкодеры · Многомерные гауссовские распределения · Энтропия, кросс-энтропия и KL-дивергенция
На этой странице 13
Заметка об автоэнкодерах закончилась открытым вопросом: обычный автоэнкодер хорошо сжимает и реконструирует, но генератором не является. Мы не можем выбрать точку в его латентном пространстве и ожидать осмысленную картинку. Вариационный автоэнкодер (variational autoencoder, VAE), предложенный Kingma and Welling (2014) и независимо Rezende, Mohamed and Wierstra (2014), исправляет это, упорядочивая латентное пространство. Каждый вход кодируется не в одну точку, а в гауссиану, и эти гауссианы притягиваются к одному фиксированному априорному распределению. Кроме того, VAE — первая нейросетевая генеративная модель курса, которая обучается максимизацией правдоподобия (точнее, его нижней оценки), то есть по той целевой функции, которую заметка об энтропии назвала естественной.
Обозначения. — точка данных (изображение из значений пикселей), — её латентный код, — реконструкция. — априорное распределение кодов. — параметры декодера, — параметры энкодера, как в заметке об автоэнкодерах. всегда означает распределение со средним и дисперсией . Для векторов — сокращённая запись , а — стандартное нормальное распределение в измерениях. — поэлементное произведение.
Порядок чтения. Основной путь идёт от модели через ELBO и трюк репараметризации к тому, что даёт упорядоченное латентное пространство, а затем к KL в замкнутом виде в разделе «Что фиксировано». Вывод ELBO, матричная форма KL и разложение слагаемого KL по агрегированному апостериорному распределению — дополнительный материал: они обосновывают и уточняют основное, и их можно прочитать позже.
От автоэнкодеров к генерации#
Напомним конвейер «энкодер — декодер»:
Код — это представление меньшей размерности (lower-dimensional representation) (512 чисел у свёрточного автоэнкодера из предыдущей заметки), а задача декодера — реконструкция. Как обученный автоэнкодер мог бы генерировать новые изображения? Есть два очевидных способа, и оба не работают.
- Сэмплировать случайный и декодировать его. Возьмём, например, из стандартного нормального распределения. Коды обычного автоэнкодера ничем не привязаны к , поэтому такой может оказаться далеко от всех обучающих кодов, там, где декодер никогда не обучался, и нет никаких причин, чтобы он декодировался в цифру: латентное пространство не упорядочено. Обучение требует лишь, чтобы коды обучающих изображений декодировались обратно в эти изображения. Ничто не говорит, что лежит между кодами и даже где в они находятся. Подгонка гауссианы к кодам каждого класса цифр, как в заметке об автоэнкодерах, работает лучше, но требует меток и статистик по классам, часть её сэмплов всё равно сильно искажена, а интерполированные коды декодируются в наложение двух цифр.
- Сэмплировать латентные векторы рядом с опорным. Закодируем реальное изображение в и декодируем соседние точки . Соседняя точка тоже не обязана быть осмысленным кодом: если она попадает в промежуток между кодами обучающих изображений, декодер на ней никогда не обучался, и декодированный сосед «7» вовсе не обязан походить на цифру.
Обычный автоэнкодер не умеет генерировать
Решение — сделать распределение кодов частью модели. Для этого нужен язык моделей с латентными переменными (latent-variable models).
Совместное, маргинальное и условное распределения#
Возьмём две случайные величины: данные и латентную переменную . Их совместная плотность — облако на плоскости . Проекции облака на каждую из осей дают маргинальные распределения и . Маргинализация вычисляет маргинальное распределение, интегрируя по другой переменной:
Условная вероятность — это совместная плотность, ограниченная на фиксированное значение условия и заново нормированная:
Например, — срез вдоль прямой , делённый на , чтобы интеграл по был равен единице.
Совместное, маргинальные и условное распределения
Модель с латентными переменными и её апостериорное распределение#
Модель с латентными переменными генерирует данные в два шага: сначала берёт код из априорного распределения (prior) , затем изображение из декодера (правдоподобия) . Априорное распределение выбирается, а не обучается; стандартный выбор — . Распределение модели на изображениях — это маргинальное распределение
которое называют обоснованностью (evidence). Обучение методом максимального правдоподобия означает максимизацию на данных.
Обратное направление, «какие коды объясняют это изображение», — это апостериорное распределение (posterior). По теореме Байеса
и обоснованность в знаменателе — интеграл по всему латентному пространству. Для декодера-нейросети замкнутой формы у него нет. В высокой размерности квадратурные формулы безнадёжны, а наивное усреднение методом Монте-Карло по имеет слишком большую дисперсию, чтобы применять его на каждом шаге обучения: почти все сэмплы из априорного распределения плохо объясняют данный . Поэтому и правдоподобие, которое мы хотим максимизировать, и апостериорное распределение, которое понадобилось бы для кодирования, вычислительно неразрешимы (intractable).
Распределение данных и латентное распределение
Вариационная аппроксимация и ELBO#
Выход в том, чтобы приблизить апостериорное распределение членом простого семейства распределений. VAE использует диагональную гауссиану, среднее и дисперсии которой выдаёт сеть-энкодер с параметрами :
Замена неразрешимого апостериорного распределения ближайшим к нему по членом простого семейства — это вариационный вывод (variational inference) (Blei, Kucukelbir and McAuliffe, 2017). Поскольку одна сеть строит приближение для каждого вместо отдельной оптимизации для каждой точки данных, такой вывод называют амортизированным (amortized) (Kingma and Welling, 2019, §2.1). Максимизируемая величина — нижняя оценка обоснованности (evidence lower bound, ELBO):
Неравенство выводится ниже. Два его слагаемых тянут в противоположные стороны.
Реконструкция измеряет, насколько хорошо изображение переживает путь «изображение → код → изображение». С гауссовским декодером она сводится к функции потерь реконструкции . Если , где сеть-декодер выдаёт среднее , а — фиксированная дисперсия, то
и последнее слагаемое не зависит от сети. При вес квадратичной ошибки равен ровно 1, поэтому квадратичная ошибка, просуммированная по пикселям, плюс слагаемое KL-дивергенции (KL divergence) — это отрицательная ELBO с точностью до константы. (Среднему по пикселям соответствовало бы .) Другая фиксированная меняет баланс между двумя слагаемыми: умножение функции потерь на даёт , то есть вес KL (см. β-VAE ниже).
Регуляризация измеряет, насколько каждое апостериорное распределение далеко от априорного. Она тянет каждое распределение кода к , так что все коды живут в одной хорошо известной области латентного пространства.
Два слагаемых ELBO
Итак, вместо того чтобы отображать вход в одну точку, VAE отображает его в гауссиану. Энкодер выдаёт и , мы сэмплируем , и декодер реконструирует вход по . Функция потерь при обучении — отрицательная ELBO с , оценённая по одному сэмплу на каждый вход:
Слагаемое KL теперь входит со знаком плюс, потому что мы минимизируем.
Трюк репараметризации#
Функция потерь содержит сэмпл , а через сэмплирование нельзя провести обратное распространение ошибки: случайный сэмпл не является дифференцируемой функцией и . Решение — трюк репараметризации (reparameterization trick): перенести случайность во вход, ровно как в заметке о гауссианах:
сэмплируется независимо от сети, затем масштабируется на и сдвигается на . Распределение остаётся тем же, , но теперь — дифференцируемая функция и : и . Градиенты слагаемого реконструкции проходят обратно в энкодер (Kingma and Welling, 2014, §2.4). Полученная оценка градиента обычно имеет гораздо меньшую дисперсию, чем универсальная оценка REINFORCE через градиент логарифма плотности (score-function estimator), дисперсию которой Kingma и Welling (§2.2) называют очень высокой.
Зачем нужен трюк репараметризации
KL-часть функции потерь вообще не требует сэмплирования: между двумя гауссианами KL-дивергенция имеет замкнутую форму, выведенную ниже. Суммируя по латентным измерениям, получаем
Что даёт упорядоченное латентное пространство#
- Мы можем сэмплировать и декодировать его: слагаемое KL тянет коды к априорному распределению, поэтому сэмплы из него в основном попадают туда, где декодер обучался (насколько хорошо это работает, обсуждается ниже). Можно также сэмплировать рядом с кодом опорного изображения и получать его осмысленные вариации.
- Мы можем интерполировать: декодировать для от 0 до 1 и плавно переходить от одного изображения или класса к другому — пока отрезок остаётся там, где коды хорошо представлены. Это не гарантировано: коды лишь приближённо согласуются с априорным распределением (ниже), а в высокой размерности прямой отрезок может пересекать области, где нет ни одного обучающего кода.
- Мы можем выполнять арифметику атрибутов. Усредним коды изображений, у которых есть некоторый атрибут, например улыбка, и коды изображений, у которых его нет. Разность двух средних — вектор атрибута, и прибавление его кратного к коду другого изображения добавляет этот атрибут; Carter and Nielsen (2017) делают так с VAE, обученным на шрифтах, и вектором «жирности» (bolding vector). Liu et al. (2019) строят визуальный инструмент, который позволяет задавать такие направления в латентном пространстве и проверять, что они кодируют.
Интерполяция в упорядоченном латентном пространстве
Недостатки.
- Размытые изображения. С факторизованным гауссовским декодером мы показываем его среднее , а не сэмпл из . Там, где апостериорные распределения разных изображений перекрываются, один код может объясняться несколькими изображениями, и оптимум квадратичной ошибки — среднее по ним. Одно из объяснений размытости на уровне всей модели — то, что максимальное правдоподобие (прямая KL, forward KL) покрывает моды (mode-covering), см. заметку Подгонка распределений с помощью KL: модель, которая не может представить данные, размазывает вероятность по всему, что выглядит возможным (Theis, van den Oord and Bethge, 2016).
- Результаты хуже, чем у других моделей, основанных на правдоподобии, на протяжении нескольких лет: Vahdat and Kautz (2020) отмечают, что VAE уступали нормализующим потокам (normalizing flows) и авторегрессионным моделям. Их иерархическая модель NVAE достигла наилучших на тот момент результатов среди неавторегрессионных моделей, основанных на правдоподобии, на CelebA 64 и CelebA HQ и стала первым VAE, применённым к естественным изображениям размером пикселей.
- Нет обусловливания в базовой модели: ей нельзя указать, что генерировать.
На эти недостатки нацелены расширения. Условный VAE (conditional VAE, Sohn, Lee and Yan, 2015) подаёт метку и в энкодер, и в декодер, так что ему можно сказать, что генерировать; он выводится ниже. β-VAE (Higgins et al., 2017) перевзвешивает слагаемое KL, VQ-VAE (van den Oord, Vinyals and Kavukcuoglu, 2017) заменяет гауссов код дискретным, а VAPNEV (Agrawal and Dukkipati, 2016) заменяет попиксельное слагаемое реконструкции точным правдоподобием нормализующего потока, зависящего от кода; всем трём посвящена следующая заметка.
Откуда берётся ELBO#
Дополнительный материал: вывод сформулированной выше оценки и точная величина её зазора. Остальная часть заметки на него не опирается.
В этом разделе мы опускаем и . Начнём с обоснованности и умножим подынтегральное выражение на . Такая запись требует, чтобы везде, где , и для гауссовской это выполняется:
Неравенство здесь — это неравенство Йенсена. Для выпуклой оно имеет вид . Логарифм вогнут, поэтому знак меняется на противоположный:
Неравенство Йенсена для вогнутого логарифма
Запись разбивает оценку на два знакомых слагаемых:
Обоснованность никогда не меньше ELBO, поэтому, максимизируя ELBO, мы максимизируем гарантированную нижнюю границу для .
Насколько оценка отстаёт от правдоподобия? Ровно на KL-дивергенцию. Поскольку ,
Во второй строке сокращается, а на последнем шаге используется неотрицательность KL (см. заметку об энтропии). С параметрами это записывается как . Шаг по увеличивает эту сумму: обычно за счёт роста , но, возможно, и за счёт того, что истинное апостериорное распределение становится легче приблизить с помощью , а это смещает модель в сторону таких апостериорных распределений. Поэтому максимизация ELBO лишь приближённо максимизирует правдоподобие (Kingma and Welling, 2019, §2.2.1; Hoffman and Johnson, 2016, формула 5). По параметрам энкодера не меняется, поэтому энкодер может лишь сокращать зазор: он делает лучшим приближением истинного апостериорного распределения в смысле обратной KL (reverse KL). Оценка точна ровно тогда, когда .
Что фиксировано: априорное распределение, а не апостериорное#
Обязано ли апостериорное распределение быть ? Нет. Фиксировано априорное распределение . Апостериорное не фиксировано: для каждого входа энкодер выдаёт два вектора, и .
Почему , а не ?
- — дисперсия и должна быть положительной. Линейный слой может выдать любое вещественное число, а всегда.
- Так удобнее численно: крошечная дисперсия вроде превращается в умеренное число, .
- Замкнутая форма KL между гауссианами записывается непосредственно через .
Постоянное апостериорное распределение бесполезно. Предположим, что энкодер игнорирует вход и выдаёт для любого . Слагаемое KL было бы нулевым, но не нёс бы никакой информации об : декодер получал бы чистый шум. Декодер вроде нашего — факторизованная гауссиана с фиксированной дисперсией, сеть которой выдаёт среднее изображение, — в лучшем случае выдавал бы тогда среднее изображение. Более выразительный декодер, например авторегрессионный, может и без моделировать нетривиальное распределение изображений, и тогда ничто в ELBO не заставляет использовать код. Этот сбой известен как коллапс апостериорного распределения (posterior collapse), и на практике он случается, когда декодер достаточно мощный, чтобы моделировать данные без кода (Bowman et al., 2016). Вход должен оставаться восстановимым по своему коду.
Замкнутая форма. Для одного латентного измерения
а для диагональной гауссианы вклады измерений складываются (Kingma and Welling, 2014, приложение B). При и
При имеем и , поэтому
Если внести минус в скобку, получится формула для выше. Значение равно нулю только при , , потому что с равенством только при (это следует из при с равенством только при ).
В матричном виде. Для -мерного с положительно определённой ковариационной матрицей
Шаги те же, что выше. Логарифмы плотностей равны и . При математическое ожидание квадратичной формы равно , поскольку скаляр равен своему следу и . Точно так же , а слагаемые с сокращаются. Для диагональной матрицы энкодера имеем и , так что формула распадается на сумму одномерных слагаемых. Например, и дают ната (nats) — сумму второй и четвёртой строк таблицы ниже. Полная ковариационная матрица позволила бы координатам кода ещё и коррелировать, и у корреляции своя цена: при , единичных дисперсиях и коэффициенте корреляции имеем , а KL равна , около ната при . Диагональное апостериорное распределение VAE такие корреляции выразить вообще не может.
Как это читать: модель платит штраф, если или , и у штрафа вполне определённая форма.
- Сдвиг среднего стоит : 0.5 при и 2 при .
- Уменьшение дисперсии стоит при малых , поэтому штраф растёт лишь логарифмически: точные значения — 1.81 при и 4.11 при . При штраф неограниченно растёт, так что детерминированный точечный код, как в обычном автоэнкодере, заплатил бы бесконечный штраф. Точечная масса не абсолютно непрерывна относительно гауссианы, поэтому её KL бесконечна; см. случай «атом против плотности» в заметке Подгонка распределений с помощью KL.
- Увеличение дисперсии стоит , что растёт как .
Поэтому каждый вход может позволить себе собственную довольно узкую гауссиану со смещённым центром, когда это помогает реконструкции, но никогда — одну точку.
Штраф KL растёт лишь логарифмически при σ → 0
| (наты, nats) | ||
|---|---|---|
| 0 | 1 | 0 |
| 1 | 1 | 0.5 |
| 2 | 1 | 2 |
| 0 | 0.5 | 0.318 |
| 0 | 2 | 0.807 |
| 0 | 0.1 | 1.808 |
| 0 | 0.01 | 4.105 |
Какое распределение должно совпадать с априорным? Слагаемое KL тянет каждое к априорному распределению лишь настолько, насколько позволяет реконструкция. Чтобы увидеть, чего оно требует от кодов в целом, возьмём обучающих изображений и определим агрегированное апостериорное распределение (aggregate posterior) — смесь всех их апостериорных распределений:
Будем считать индекс случайной величиной, равномерно распределённой на , так что . Тогда среднее слагаемое KL в ELBO распадается на две части (Hoffman and Johnson, 2016, формулы 11–12):
Здесь — взаимная информация (mutual information) между индексом изображения и его кодом; она лежит между 0 и . Второе слагаемое — маргинальная KL (marginal KL) между агрегированным апостериорным распределением и априорным. Чтобы проверить тождество, запишем по теореме Байеса для отношение и возьмём математическое ожидание его логарифма по : первый множитель даёт маргинальную KL, а второй — взаимную информацию. Хорошая реконструкция требует, чтобы код идентифицировал изображение, поэтому это слагаемое должно оставаться большим, и именно поэтому каждое отдельное апостериорное распределение узкое. Чего-то от априорного распределения требует только второе слагаемое: смесь должна заполнить , не оставляя дыр. Обучение подталкивает смесь к априорному распределению, но совпадение получается лишь приближённым. Для VAE с 10 латентными измерениями на бинаризованном MNIST Hoffman и Johnson получают взаимную информацию, близкую к её максимуму , и маргинальную KL , равную 8.35 ната (§4, таблица 1). Там, где оставляет дыры, сэмплы из априорного распределения попадают в области, которые декодер видел редко, и декодируются плохо.
Метка как условие: условный VAE#
Базовому VAE нельзя указать, что генерировать. Условный VAE (CVAE) добавляет наблюдаемое условие , например метку класса или вектор бинарных атрибутов, в каждую часть модели (Sohn, Lee and Yan, 2015, раздел 4):
- априорное распределение , часто просто фиксированное при любом ;
- декодер ;
- энкодер .
Распределение изображений модели при заданном условии — . Вывод ELBO проходит без изменений, если в условие каждого распределения добавить (Sohn et al., формула 4):
и зазор снова равен KL-дивергенции . Обучение максимизирует эту оценку, усреднённую по парам из данных, с той же репараметризацией и, для фиксированного априорного распределения , с той же KL в замкнутой форме. Обучаемому гауссовскому априорному распределению нужна общая формула KL между двумя гауссианами; для диагональных это одномерная формула, просуммированная по координатам. В сетях обычно подаётся конкатенацией: ко входу энкодера или к его признакам и к перед декодером.
Что меняет условие. Декодер теперь получает даром, а за каждый нат, который несёт код, приходится платить KL. Поэтому целевая функция поощряет не включать в то, что уже сообщает , и код склонен хранить то, чего метка не описывает, например позу или освещение. Чтобы сгенерировать изображение, фиксируем , берём и декодируем. Если сохранить и изменить , например один из 40 бинарных атрибутов лиц CelebA, мы запрашиваем то же изображение с другим значением атрибута; насколько чисто это получается, зависит от того, какая часть атрибута просочилась в . Та же конструкция добавляет условие в любую модель этого семейства, включая декодер-поток условного VAPNEV, а условный GAN — её состязательный аналог.
Итоги#
- Правдоподобие и апостериорное распределение модели с латентными переменными вычислительно неразрешимы, потому что оба требуют интегрирования по латентному пространству.
- Энкодер строит приближённое апостериорное распределение — диагональную гауссиану.
- Обучение максимизирует ELBO, то есть реконструкцию минус KL-дивергенцию относительно априорного распределения; это нижняя оценка с зазором .
- Трюк репараметризации делает сэмплируемое слагаемое реконструкции дифференцируемым; слагаемое KL известно в замкнутой форме.
- Фиксированное априорное распределение упорядочивает латентное пространство, поэтому декодирование порождает новые изображения. Агрегированное апостериорное распределение совпадает с априорным лишь приближённо, и дыры в нём дают плохие сэмплы.
- Условный VAE добавляет метку в условие априорного распределения, энкодера и декодера и максимизирует ту же оценку, теперь для ; ему можно указать, что генерировать.
Ноутбук#
Реализация следует ноутбуку о VAE из репозитория HSE-LAMBDA Deep Generative Models (закреплённый коммит; ячейки нумеруются с 1, считая все ячейки подряд). В ноутбуке нет сохранённых выходов, поэтому он документирует процедуру, а не результаты.
- Ячейки 4–5: лица CelebA, приведённые к размеру RGB и нормализованные в , размер батча 128,
drop_last=True. CelebA содержит 202 599 выровненных и обрезанных лиц размером 178 × 218 пикселей (ширина × высота), у каждого 40 бинарных атрибутов; класс датасета возвращает атрибуты, а этот ноутбук их не использует.Resize((64, 64))масштабирует две стороны независимо и меняет соотношение сторон с 178 : 218 на 1 : 1;Resize(64)с последующимCenterCrop(64)сохранили бы его. - Ячейки 6–7: почему обычные автоэнкодеры не могут генерировать, и рассуждение через теорему Байеса, которое приводит к приближённому апостериорному распределению.
- Ячейки 10 и 12: в энкодере четыре свёртки с шагом 2 и числом каналов , за каждой следуют LeakyReLU и затем BatchNorm (кроме последней), так что изображение превращается в карту ; она вытягивается в 4096 признаков для двух линейных выходных слоёв (heads)
mean_layerиlogvar_layerпо 100 выходов в каждом. Декодер не является буквальным зеркалом энкодера: линейный слой из 100 в 4096 нейронов с ReLU, изменение формы на , затем четыре блока, каждый из которых состоит из повышения разрешения () и свёртки ( каналов), на выходе Tanh со значениями в .nn.Upsample(scale_factor=2)без аргументаmodeповышает разрешение методом ближайшего соседа. - Ячейка 15: класс
VAEсlatent_dim = 100.reparametrizeвычисляетstd_dev = exp(0.5 * logvar), берётepsilon = randn_like(std_dev)и возвращаетmean + epsilon * std_dev;sample(n)декодирует . - Ячейки 16–17:
loss_function: квадратичная ошибка, просуммированная по пикселям и усреднённая по батчу, плюсkld_loss = -0.5 * sum(1 + logvar - mean² - exp(logvar)), усреднённая по батчу и умноженная наbeta(по умолчанию 1). Это оценка отрицательной ELBO по одному сэмплу с из абзаца о реконструкции с точностью до константы.exp(logvar)внутри KL ограничена снизу значением . Стабилизирующего эффекта это ограничение не даёт: оно меняет функцию потерь, только когда , а само слагаемое не ограничено. Текстовая ячейка 16 правильно приводит KL в матричном виде, , и её диагональный случай, но затем переписывает как , что неверно: , а логарифмы могут быть отрицательными, поэтому в норме не сохраняются ни множитель 2, ни знак. Код в ячейке 17 использует правильную сумму. - Ячейки 18–21: обучение с Adam при шаге обучения (learning rate) в течение 10 эпох с косинусным расписанием шага обучения (
CosineAnnealingLR,T_max = 10); два слагаемых функции потерь логируются по отдельности, а после каждой эпохи декодируются 64 сэмпла из априорного распределения. - Ячейка 23: генерация из априорного распределения. Ячейка 24 (только текст) определяет функцию потерь β-VAE и распутывание на примере CelebA, где одна латентная координата отвечает за улыбку, а другая — за поворот головы (см. что даёт β); β-VAE не обучается, потому что
train_vaeвызываетloss_functionсо значением по умолчанию . - Замечания о реализации. Логируемые и печатаемые значения функции потерь делятся на размер батча второй раз (
mse_loss.item() / len(data), а суммы потерь на изображение за эпоху делятся наlen(dataset)), поэтому они примерно в 128 раз меньше функции потерь на одно изображение. Модель ни разу не переключается вeval(): сэмплирование в ячейках 18 и 23 запускает BatchNorm декодера на статистиках сгенерированного батча и обновляет его скользящие средние.
Ноутбук с упражнениями 03_hw_vapnev.ipynb из того же репозитория продолжает эту модель. Ячейки 3–9 загружают CelebA: ячейка 5 применяет Resize(64) и CenterCrop(64) и переводит пиксели в преобразованием , а ячейка 9 показывает 25 случайных лиц. Остальные ячейки формулируют задания и оставляют ячейки кода пустыми: ячейки 12–13 требуют обучить VAE на этих лицах и оценить его по FID; ячейки 14–15 требуют построить VAPNEV и его условную версию, описанные в следующей заметке; условная версия использует атрибуты как условие так же, как условный VAE. Единственные сохранённые выходы ноутбука — устройство, форма одного изображения и сетка лиц, так что цитировать нечего.
Дальше#
VAE обучает генератор через явную оценку правдоподобия и расплачивается за это размытостью и априорным распределением, которое его коды заполняют лишь приблизительно. Следующая заметка меняет части оценки: вес слагаемого KL, задающий, сколько может сообщать код, дискретный код, априорное распределение которого обучается после автоэнкодера, и точное правдоподобие потока вместо попиксельного слагаемого реконструкции.
Литература#
- D. P. Kingma, M. Welling. Auto-encoding variational Bayes. ICLR, 2014.
- D. J. Rezende, S. Mohamed, D. Wierstra. Stochastic backpropagation and approximate inference in deep generative models. ICML, 2014.
- D. P. Kingma, M. Welling. An introduction to variational autoencoders. Foundations and Trends in Machine Learning, 12(4), 2019.
- D. M. Blei, A. Kucukelbir, J. D. McAuliffe. Variational inference: A review for statisticians. Journal of the American Statistical Association, 112(518), 2017.
- M. D. Hoffman, M. J. Johnson. ELBO surgery: yet another way to carve up the variational evidence lower bound. NIPS Workshop on Advances in Approximate Bayesian Inference, 2016 (архивная копия).
- S. R. Bowman, L. Vilnis, O. Vinyals, A. M. Dai, R. Jozefowicz, S. Bengio. Generating sentences from a continuous space. CoNLL, 2016.
- K. Sohn, H. Lee, X. Yan. Learning structured output representation using deep conditional generative models. NIPS, 2015. Раздел 4, формула 4: условная ELBO.
- S. Agrawal, A. Dukkipati. Deep variational inference without pixel-wise reconstruction. arXiv:1611.05209, 2016. VAPNEV.
- S. Carter, M. Nielsen. Using artificial intelligence to augment human intelligence. Distill, 2017. Векторы атрибутов в латентном пространстве VAE.
- Y. Liu, E. Jun, Q. Li, J. Heer. Latent space cartography: Visual analysis of vector space embeddings. Computer Graphics Forum, 38(3), 2019.
- I. Higgins et al. β-VAE: Learning basic visual concepts with a constrained variational framework. ICLR, 2017.
- A. van den Oord, O. Vinyals, K. Kavukcuoglu. Neural discrete representation learning. NIPS, 2017.
- L. Theis, A. van den Oord, M. Bethge. A note on the evaluation of generative models. ICLR, 2016.
- A. Vahdat, J. Kautz. NVAE: A deep hierarchical variational autoencoder. NeurIPS, 2020.
- HSE-LAMBDA, репозиторий курса Deep Generative Models:
VAE.ipynb.