Как работает трюк репараметризации для вариационных автоэнкодеров (VAE)? Есть ли интуитивное и простое объяснение без упрощения математики? И зачем нам «трюк»?
57
Как работает трюк репараметризации для вариационных автоэнкодеров (VAE)? Есть ли интуитивное и простое объяснение без упрощения математики? И зачем нам «трюк»?
Ответы:
Прочитав слайды семинара Kingma NIPS 2015 , я понял, что нам нужен трюк репараметризации для обратного распространения через случайный узел.
Интуитивно, в своем первоначальном виде VAE выбирают из случайного узла который аппроксимируется параметрической моделью истинного апостериора. Backprop не может проходить через случайный узел.z q(z∣ϕ,x)
Введение нового параметра позволяет нам перепараметризовать таким образом, чтобы позволить backprop проходить через детерминированные узлы.ϵ z
источник
Предположим, у нас есть нормальное распределение , параметризованное , в частности, . Мы хотим решить проблему Это, конечно, довольно глупая проблема, и оптимальная очевидна. Однако здесь мы просто хотим понять, как уловка репараметризации помогает в вычислении градиента этой цели .θ д θ ( х ) = N ( θ , 1 ) мин θq θ qθ(x)=N(θ,1) θ E q [ x 2 ]
Один из способов вычисления заключается в следующем∇θEq[x2]
Для нашего примера, где , этот метод даетqθ(x)=N(θ,1)
Уловка репараметризации - это способ переписать ожидание так, чтобы распределение, относительно которого мы берем градиент, не зависело от параметра . Для этого нам нужно сделать стохастический элемент в независимым от . Следовательно, мы пишем как Затем мы можем написать где - распределение , т. е. . Теперь мы можем написать производную следующим образомθ q θ x
Вот записная книжка IPython, которую я написал, которая рассматривает дисперсию этих двух способов вычисления градиентов. http://nbviewer.jupyter.org/github/gokererdogan/Notebooks/blob/master/Reparameterization%20Trick.ipynb
источник
Разумный пример математики «уловки репараметризации» приведен в ответе гокера, но некоторая мотивация может быть полезной. (У меня нет прав комментировать этот ответ; таким образом, здесь есть отдельный ответ.)
Короче говоря, мы хотим вычислить некоторое значение вида:Gθ Gθ=∇θEx∼qθ[…]
Без «уловки репараметризации» мы часто можем переписать это, согласно ответу гокера, как , гдеEx∼qθ[Gestθ(x)] Gestθ(x)=…1qθ(x)∇θqθ(x)=…∇θlog(qθ(x))
Если мы возьмем из , то является объективной оценкой . Это пример "важности выборки" для интеграции Монте-Карло. Если бы представлял некоторые выходные данные вычислительной сети (например, сеть политик для обучения с подкреплением), мы могли бы использовать это в обратном распространении (применить правило цепочки), чтобы найти производные по параметрам сети.x qθ Gestθ Gθ θ
Ключевым моментом является то, что часто является очень плохой (высокая дисперсия) оценка . Даже если вы усредняете по большому количеству выборок, вы можете обнаружить, что его среднее значение, по-видимому, систематически не соответствует (или не соответствует) .Gestθ Gθ
Основная проблема заключается в том, что существенный вклад в может вносить очень редкие значения (т. Значения для которых мало). Коэффициент увеличивает масштаб вашей оценки, чтобы учесть это, но это масштабирование не поможет, если вы не увидите такое значение при оценке из конечного числа образцов. Хорошие или плохие значения (т. Качество оценки, , для , из ) может зависеть отGθ x x qθ(x) 1qθ(x) x Gθ qθ Gestθ x qθ θ что может быть далеко от оптимального (например, произвольно выбранное начальное значение). Это немного похоже на историю о пьяном человеке, который ищет свои ключи возле уличного фонаря (потому что именно там он может видеть / пробовать), а не рядом с тем местом, где он их бросил.
«Уловка репараметризации» иногда решает эту проблему. Используя нотацию гокера, уловка состоит в том, чтобы переписать как функцию случайной величины с распределением , которое не зависит от , а затем переписать ожидание в как ожидание над ,x ϵ p θ Gθ p
Трюк репараметризации особенно полезен, когда новый оценщик, , больше не имеет проблем, упомянутых выше (то есть, когда мы можем выбрать так, чтобы получение хорошей оценки не зависело на чертеже редкие значения ). Этому может способствовать (но это не гарантируется) тот факт, что не зависит от и что мы можем выбрать в качестве простого унимодального распределения.∇θJ(θ,ϵ) p ϵ p θ p
Однако reparamerization трюк может даже "работа" , когда является не хорошей оценкой . В частности, даже если есть большой вклад в от который очень редок, мы постоянно не видим их во время оптимизации и не видим их при использовании нашей модели (если наша модель является порождающей моделью ). В несколько более формальных терминах мы можем подумать о замене нашей цели (ожидание выше ) эффективной целью, которая является ожиданием некоторого «типичного набора» для . За пределами этого типичного набора наш∇θJ(θ,ϵ) G & thetas ; G & thetas ; & epsi ;Gθ Gθ ϵ p p ϵ может привести к сколь угодно плохим значениям - см. Рисунок 2 (b) Брока и др. и др. для GAN, оцененного вне типичного набора, отобранного во время обучения (в этом документе меньшие значения усечения, соответствующие значениям скрытой переменной дальше от типичного набора, даже если они имеют более высокую вероятность).J
Надеюсь, это поможет.
источник
Позвольте мне сначала объяснить, зачем нам нужен трюк с репараметризацией в VAE.
VAE имеет кодер и декодер. Декодер случайным образом выбирает из истинного апостериорного Z ~ q (z∣ϕ, x) . Чтобы реализовать кодер и декодер в виде нейронной сети, вам необходимо выполнить обратное распространение с помощью случайной выборки, и это является проблемой, поскольку обратное распространение не может проходить через случайный узел; Чтобы преодолеть это препятствие, мы используем трюк репараметризации.
Теперь давайте подумаем. Поскольку наш апостериор нормально распределен, мы можем аппроксимировать его другим нормальным распределением. Мы приближаем Z с нормально распределенным ε .
Но насколько это актуально?
Теперь вместо того, чтобы говорить, что Z выбирается из q (z∣ϕ, x) , мы можем сказать, что Z - это функция, которая принимает параметр (ε, (µ, L)), и эти µ, L поступают из верхней нейронной сети (кодировщик). , Поэтому при обратном распространении все, что нам нужно, это частные производные по µ, L и ε не имеет значения для получения производных.
источник
Я думал, что объяснение, найденное в курсе Stanford CS228 по вероятностным графическим моделям, было очень хорошим. Его можно найти здесь: https://ermongroup.github.io/cs228-notes/extras/vae/
Я суммировал / скопировал важные части здесь для удобства / моего собственного понимания (хотя я настоятельно рекомендую просто проверить оригинальную ссылку).
Итак, наша проблема в том, что у нас есть этот градиент, который мы хотим вычислить:
Если вы знакомы с оценщиками функций оценки (я считаю, что REINFORCE - это только частный случай этого), вы заметите, что это в значительной степени проблема, которую они решают. Тем не менее, оценка функции оценки имеет высокую дисперсию, что приводит к трудностям в изучении моделей в большинстве случаев.
Таким образом, при определенных условиях мы можем выразить распределение как двухэтапный процесс.qϕ(z|x)
Сначала мы выбираем шумовую переменную из простого распределения такого как стандарт Normal. Затем мы применяем детерминированное преобразование которое отображает случайный шум на это более сложное распределение. Эта вторая часть не всегда возможна, но она верна для многих интересных классов .ϵ p(ϵ) gϕ(ϵ,x) qϕ
В качестве примера, давайте использовать очень простой q, из которого мы пробуем.
Теперь вместо того, чтобы получать градиент ожидания q (z), мы можем переписать его как градиент ожидания относительно более простой функции .p(ϵ)
Это имеет более низкую дисперсию, по моему мнению, нетривиальным причинам. Проверьте часть D приложения здесь для объяснения: https://arxiv.org/pdf/1401.4082.pdf
источник
У нас есть наша вероятностная модель. И хочу восстановить параметры модели. Мы сводим нашу задачу к оптимизации вариационной нижней границы (VLB). Для этого мы должны сделать две вещи:
Авторы предлагают использовать Монте-Карло Estimator для обоих. И на самом деле они вводят этот трюк, чтобы получить более точную оценку градиента Монте-Карло в VLB.
Это просто улучшение численного метода.
источник
Трюк репараметризации значительно снижает дисперсию оценки MC для градиента. Так что это метод уменьшения дисперсии :
Наша цель - найти оценку∇ϕEq(z(i)∣x(i);ϕ)[logp(x(i)∣z(i),w)]
Мы могли бы использовать « функции счета»: Но счет Функция оценки имеет высокую дисперсию. Например, если вероятность очень мала, то абсолютное значение очень велико, а само значение отрицательно. Таким образом, мы бы имели высокую дисперсию.∇ϕEq(z(i)∣x(i);ϕ)[logp(x(i)∣z(i),w)]=Eq(z(i)∣x(i);ϕ)[logp(x(i)∣z(i),w)∇ϕlogqϕ(z)] p(x(i)∣z(i),w) logp(x(i)∣z(i),w)
С репараметризацией мы имеемz(i)=g(ϵ(i),x(i),ϕ) ∇ϕEq(z(i)∣x(i);ϕ)[logp(x(i)∣z(i),w)]=Ep(ϵ(i))[∇ϕlogp(x(i)∣g(ϵ(i),x(i),ϕ),w)]
Теперь ожидание равно а не зависит от параметра градиента . Таким образом, мы можем поместить градиент непосредственно в ожидании, что можно легко увидеть, явным образом записав ожидание. Значения градиента намного меньше, поэтому мы имеем интуитивно более низкую дисперсию.p(ϵ(i)) p(ϵ(i)) ϕ
Примечание: мы можем сделать этот трюк репараметризации, только если непрерывен, поэтому мы можем взять градиент .z(i) z(i)=g(ϵ(i),x(i),ϕ)
источник