Введение в вариационный автокодировщик (VAE)

Итак, прошел месяц, и я ужасно чувствую необходимость задокументировать свои материалы. Скорее всего, я все забуду, может быть, через месяц или два после переезда отсюда. Я предпочел написать рассказ, чтобы он был менее скучным.

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

Первоначально я исследовал существующую модель CVAE (Link) в различных средах и параллельно создавал пакеты для задач 7D (в основном возникающих из руки HERB, робота в нашей лаборатории). Имея очень смутное представление о том, что делает CVAE, я экспериментировал с этой моделью. Я настолько познакомился с ним, что смог даже сказать вам размер каждого слоя. Итак, вкратце, в документе предлагается модель для выборки точек в многообещающих регионах с учетом векторов условий и вашей начальной, целевой конфигурации.

Их анализ и производительность действительно хороши для геометрических или двумерных задач, но они только что написали некоторые качественные термины для более высоких измерений. Я не был уверен, что он работает над проблемами планирования для чего-то вроде руки HERB. Итак, вот отличное руководство, которому я следовал для более глубокого понимания VAE (Ссылка). Я просто изложу суть этого здесь, может быть, для быстрого резюмирования.

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

Теперь, учитывая распределение z, мы хотим максимизировать вероятность или вероятность создания каждого X, принадлежащего нашему набору данных. Эта проблема сама по себе очень сложна, даже если мы предположим, что некоторая гипотетическая детерминированная функция связывает «z» с «X».

Один из подходов может заключаться в том, чтобы выбрать большое количество z ​​и вычислить эти значения для каждого X и получить вычислимую формулу. Но с увеличением размерности z время вычислений сильно ухудшается. Более того, если мы заметим, то практически большинство значений z, которые мы собираемся выбрать таким образом, не будут иметь ничего общего с нашим X, они могут указывать на какие-то случайные числа, что приводит к потере всех выполненных вычислений. А вот и кодирующая часть VAE. мы хотим отбирать только те z, которые могут дать X. Таким образом, нам нужна некоторая новая функция Q (z | X), которая дала бы распределение многообещающих значений z. Обычный выбор - взять Q (z | X) как N (z | μ, Σ), где μ и Σ детерминированы (можно узнать из модели). Теперь основное уравнение этого VAE выглядит примерно так:

Здесь второй член на LHS и последний член на RHS - это просто расхождение KL между двумя распределениями. Теперь, если мы рассмотрим второй член на RHS, то, по сути, мы просто пытаемся сопоставить два гауссовских распределения.

По сути, если мы видим модель слева, мы не можем выполнить обратное распространение из-за выборки «z» в середине, что является прерывистой операцией. Таким образом, вместо выборки z непосредственно из кодировщика, мы выбираем некоторое ε из нормального распределения и записываем z = μ + sqrt (Σ) * ε. Таким образом получается окончательная формула:

Во время тестирования мы просто отбираем «z» из стандартного нормального распределения и используем декодер для генерации «X».

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