Variational Autoencoder (VAE) Example using MNIST

Posted on вт 18 травня 2021 in Machine Learning

Вариационный Автоенкодер (англ. Variational Autoencoder - VAE) это тип нейронной сети, который используется для нахождения способа эффективного кодирования через обучение без учителя.

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

Автокодировщики обладают двумя интересными для нас свойствами:

  1. Способность сжимать входные данные (снижение размерности данных)
  2. Возможность генерировать новые данные из сжатого представления (генеративная модель)

Рассмотрим подробнее каждое свойство.

Данные

В данной статье используется, ставший уже классическим, датасет MNIST. Он состоит из 70 000 изображений рукописных цифр (от 0 до 9). Каждое изображение имеет разрешение 28 х 28 пикселей. Цвета представленны оттенками серого. Датасет содержит порядка 7000 примеров написания каждой цифры. Нетрудно посчитать, что каждое изображение состоит из 784 пикселей, каждый представлен одним числом uint8. И следовательно информация о том, какая из 10 цифр нарисована на изображении содержится в этих 784 числах. Очевидно, для того чтобы закодировать информацию о числе нужно намного меньше данных. Например, информация о цифре (их 10) и стиле написания цифры (наклон, масштаб и т.д.).

Сжатие данных

Начнем сразу же с примера сжатия изображения рукописной цифры. Здесь используется предварительно обученный вариационный автоенкодер. Как уже было сказано выше, изображение состоит из 784 чисел. После сжатия нейронной сетью мы получим 10 чисел. Попробуйте сами нарисовать цифру в левом прямоугольнике и она в реальном времени будет преобразована кодировщиком в код. Или задайте код набором ползунков. В правом прямоугольнике отобразится цифра восстановаленная из кода декодировщиком.

Draw image here Code Restored image
(0.0, 0.0)

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

Генерация данных

Используя энкодер мы получили отображение цифр из валидационного набора на пространство кодов. Каждая точка изображения соответствует двумерному коду. В следующем примере мы увидим как скрытое двумерное векторное пространство связано с изображением цифры.

Map Code Generated image
map
(0.0, 0.0)

Как и почему оно работает

Тут должна быть диаграмма работы вариационного автокодировщика.

Вариационный автокодировщик состоит из последовательно соединенных нейросетей: кодировщика и декодировщика. И кодировщик и декодировщик являются полносвязными нейросетями (читай многослойный перцептрон - MLP). На вход кодировщику подается исходное изображение рукописной цифры. На выходе кодировщика параметры нормального распределения \(N(z|\mu(X, \theta), \sigma(X, \theta))\). Где \(\mu\) и \(\sigma\) это функции с обучаемыми параметрами \(\theta\), в нашем случае это нейросеть-кодировщик. Cкрытый вектор семплируется из этого распределения. На вход декодировщику подаюся значения семплированные из указанного ранее нормально граспределения, а на выходе вычисляется восстановленное по скрытому вектору изображение.

В вариационном автокодировщике скрытый вектор моделируется с помощью многомерного нормального распределения \(N(\boldsymbol{\mu}, \boldsymbol{\Sigma})\). Предполагается, что компоненты скрытого вектора \(\boldsymbol{z}\) статистически независимы, следовательно ковариационная матрица \(\boldsymbol{\Sigma}\) принимает диагональный вид. В процессе обучения автокодировщик оценивает плотности вероятностей для компонентов скрытого вектора. Другими словами праметры многомерного нормального распределения как функции фходных данных моделируются нейронной сетью. При сжатии на выходе мы получим параметры многомерного нормального распределения - математическое ожидание \(\mu\) и дисперсию \(\sigma\).

Источники

  1. Auto-Encoding Variational Bayes [Diederik P Kingma, Max Welling] исходная научная работа, в которой впервые был представлен вариационный автокодировщик.