Понимание условно-вариационных автоэнкодеров

(Пересмотренную версию этого блога можно найти здесь)

Вариационный автоэнкодер или VAE - это направленная графическая генеративная модель, которая дала отличные результаты и является одним из самых современных подходов к генеративному моделированию. Предполагается, что данные генерируются каким-то случайным процессом с участием ненаблюдаемой непрерывной случайной величины z. предполагается, что z генерируется из некоторого предыдущего распределения P_θ (z) , и данные генерируются из некоторого распределения условий P_θ (X | Z), где X представляет, что данные. z иногда называют скрытым представлением данных X.

Как и любая другая архитектура автоэнкодера, у него есть кодировщик и декодер. Часть кодировщика пытается узнать q_φ (z | x), что эквивалентно изучению скрытого представления данных X или кодирование X в скрытое представление (вероятностный кодировщик). Часть декодера пытается узнать P_θ (X | z), который декодирует скрытое представление во входное пространство. Графическую модель можно представить в виде следующего рисунка.

Модель обучена минимизировать целевую функцию.

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

Второй член - это расхождение Кульбака-Лейблера между распределением кодировщика q_φ (z | x) и p (z) . Это расхождение измеряет, сколько информации теряется при использовании q для представления предшествующего периода перед z, и поощряет его значения к быть гауссовым.

Во время генерации выборки из N (0,1) просто загружаются в декодер. Процесс обучения и генерации можно выразить следующим образом:

Причина такого краткого описания VAE заключается в том, что это не основная тема, а во многом связана с основной темой.

Одна из проблем генерации данных с помощью VAE заключается в том, что мы не можем контролировать, какие данные он генерирует. Например, если мы обучим VAE с набором данных MNIST и попытаемся сгенерировать изображения, введя Z ~ N (0,1) в декодер, он также выдаст разные случайные цифры. Если мы его хорошо обучим, изображения будут хорошими, но мы не сможем контролировать, какую цифру он будет выдавать. Например, вы не можете указать VAE создать изображение цифры «2».

Для этого нам нужно немного изменить нашу архитектуру VAE. Скажем, для входных данных Y (метка изображения) мы хотим, чтобы наша генеративная модель выдавала выходные данные X (изображение). Итак, процесс VAE будет изменен следующим образом: данное наблюдение y, z извлечено из предыдущего распределения P_θ (z | y ), а выходные данные x генерируются из распределения P_θ (x | y, z). Обратите внимание, что для простого VAE предварительным значением является P_θ (z), а вывод генерируется как P_θ (x | z) .

Итак, здесь кодировщик пытается изучить q_φ (z | x, y), что эквивалентно изучению скрытого представления данных X или кодирование X в условное скрытое представление y. Часть декодера пытается узнать P_θ (X | z, y), который декодирует скрытое представление во входное пространство, обусловленное y . Графическую модель можно представить в виде следующего рисунка.

Архитектура нейронной сети условного VAE (CVAE) может быть представлена ​​на следующем рисунке.

Реализация CVAE в Keras доступна здесь.

Использованная литература:

  1. Обучение структурированному представлению выходных данных с использованием генеративных моделей с глубокими условиями
  2. Учебник по вариационным автоэнкодерам
  3. Автоматическое кодирование вариационного байеса