Вы, наверное, слышали о VAE и GAN — генеративных моделях машинного обучения, которые могут создавать синтетические данные: изображения, музыку и т. д.
Если нет, то хотя бы о том, что ML-модели могут создавать реалистичные образы людей, которых даже не существует. Посетите этот сайт, чтобы увидеть результаты — здесь они используют модель StyleGAN.
Я постараюсь открыть для себя и исследовать модели VAE и сделать краткий обзор того, как они работают.
Отказ от ответственности. Я впервые сталкиваюсь с таким опытом. Расскажу, как я понимаю ВАЭ и каких результатов добился. Я приведу лишь краткий обзор и настоятельно рекомендую вам изучить дополнительные ресурсы, такие как эта книга.
Что такое автоэнкодеры?
Как правило, статьи об АЭ начинаются с объяснения скрытого пространства, и эта не стала исключением. Скрытое пространство – это пространство определенного низкого размера, используемое для представления сложных объектов (например, изображений) более простым способом.
Автоэнкодеры — это две НС определенной организации и скрытое пространство между ними.
Первая НС, называемая кодировщиком, сжимает изображение до меньшего вектора, который представлен в скрытом пространстве, а вторая НС, называемая декодером, строит реконструкцию. : пытается сгенерировать изображение как можно ближе к заданному.
Почему скрытое пространство? Гораздо проще представлять и группировать объекты в пространстве меньшего размера, поэтому мы используем его здесь. В то время как исходное изображение представлено в пространстве размером 3*ширина*высота (если это изображение RGB), скрытое пространство может иметь размерность всего около 10–1000.
Итак, как мы используем автоэнкодеры:
- обучение 2 NN, чтобы научить их изменять размер объектов (например, изображений)
- отправить изображение реального объекта (существующего человека, здания, цветка и т.д.) и получить на его основе синтезированное изображение (желательно похожее на заданное)
- генерировать новые изображения из векторов, которые находятся в скрытом пространстве
NN кодировщика и декодера — это «функции» для масштабирования объектов (в этой статье — изображений).
Но именно так работает стандартный AE. Почему мы используем вариационные АЭ и почему они так называются?
ВАЕ против AE
Во-первых, укажем на проблемы со стандартным AE:
- после кодирования изображения вы получаете координаты вектора в скрытом пространстве, который представляет собой дискретное значение (вектор значений). Представьте, что вы сжимаете 1000 изображений пиццы и получаете 1000 векторов пиццы в скрытом пространстве. Теперь вы хотите сгенерировать новую пиццу, для этого вам нужно знать правильные координаты точки из скрытого пространства (то есть такие, чтобы сгенерировалась пицца). Но откуда вы можете это знать? Есть разные способы: случайная точка, среднеквадратичное значение, взвешенное среднее и т. д. Но вы никогда не можете быть абсолютно уверены, что результат будет правильным, если только вы не возьмете вектор, представляющий выборку из обучающей выборки. .
- Допустим, вы нашли какое-то решение для создания изображений пиццы, несмотря ни на что. Но что, если ваш АЭ обучен генерировать объекты нескольких классов: например, изображения грузовиков, еды, животных? Для простоты скажем яблоки и бананы. После обучения НС для 1000 яблок и 1000 бананов, какую точку из 2000 вы выберете для создания нового яблока? А если вы хотите создать что-то принципиально несуществующее — гибрид яблока и банана? Или что, если вы хотите, чтобы он был где-то между яблоком и бананом, но ближе к банану?
Эти проблемы можно решить с помощью VAE. Он называется вариационным, потому что нейронные сети обучены генерировать не дискретные векторы, а распределения. Обратите внимание, что это уже решает проблему выбора точки для синтеза нового объекта: если вы знаете параметры распределения изображений бананов, вы можете выбрать любой из различных доступных векторов распределения.
Обычно выбирается простое распределение, такое как Нормальное распределение. У него есть 2 параметра — Mean и Std, и эти параметры нужно знать, чтобы генерировать новые яблоки, цветы и папайи.
Еще одним преимуществом VAE перед AE является регуляризация.
В стандартных АЭ ситуация может быть следующей:
Допустим, вы хотите сгенерировать яблоко-банан (банан-яблоко — ?) и выбрали какую-то точку между ними, но можете получить картошку. Вы не знаете точно, как объекты распределяются в скрытом пространстве при использовании AE.
Но что мы хотим иметь и что нам дает VAE:
Все возможные бананы-яблоки находятся где-то между яблоком и бананом, как и должно быть.
В конструкцию VAE внесены изменения. Энкодер выводит два вектора: один для среднего параметра и один для стандартного.
Декодер по-прежнему имеет на входе один вектор, но этот вектор представляет собой случайную точку из нормального распределения с параметрами.
Демо
Архитектура NN для кодера и декодера ничем не ограничена, от простых линейных слоев до сложных комбинаций. Я использую что-то вроде UNet: https://towardsdatascience.com/unet-line-by-line-explanation-9b191c76baf5. Набор данных называется Помеченные лица в дикой природе.
А вот и мои эксперименты:
Реконструкция изображений
Генерация изображений на основе случайных точек
Генерация новых лиц между двумя заданными
Удаление изображений
Делайте людей счастливыми
Изменить цвет кожи
Заключение
Надеюсь, это помогло вам понять общую идею VAE и потенциал генеративных моделей. В то же время я буду продолжать работать, чтобы получить лучшие результаты и больше интересных экспериментов.