Как работает трюк репараметризации для VAE и почему это важно?

57

Как работает трюк репараметризации для вариационных автоэнкодеров (VAE)? Есть ли интуитивное и простое объяснение без упрощения математики? И зачем нам «трюк»?

Дэвид Дао
источник
5
Одна часть ответа заключается в том, чтобы заметить, что все дистрибутивы Normal являются только масштабированными и переведенными версиями Normal (1, 0). Чтобы нарисовать из Normal (mu, sigma), вы можете нарисовать из Normal (1, 0), умножить на sigma (масштаб) и добавить mu (перевод).
монах
@monk: это должно было быть Normal (0,1) вместо (1,0) вправо, иначе умножение и сдвиг полностью сработали бы!
Рика
@ Ветер Ха! Да конечно спасибо.
монах

Ответы:

57

Прочитав слайды семинара Kingma NIPS 2015 , я понял, что нам нужен трюк репараметризации для обратного распространения через случайный узел.

Интуитивно, в своем первоначальном виде VAE выбирают из случайного узла который аппроксимируется параметрической моделью истинного апостериора. Backprop не может проходить через случайный узел.zq(zϕ,x)

Введение нового параметра позволяет нам перепараметризовать таким образом, чтобы позволить backprop проходить через детерминированные узлы.ϵz

оригинальная и репараметризованная форма

Дэвид Дао
источник
3
Почему детерминирован теперь справа? z
принося
2
Это не так, но это не «источник случайности» - эта роль перешла к . ϵ
Quant_dev
Обратите внимание, что этот метод предлагался несколько раз до 2014 года: blog.shakirm.com/2015/10/…
quant_dev
2
Так просто, так интуитивно понятно! Отличный ответ!
Сергей
2
К сожалению это не так. Оригинальная форма все еще может быть обратно распространяемой, однако с более высокой дисперсией. Подробности можно узнать из моего поста .
JP Чжан
56

Предположим, у нас есть нормальное распределение , параметризованное , в частности, . Мы хотим решить проблему Это, конечно, довольно глупая проблема, и оптимальная очевидна. Однако здесь мы просто хотим понять, как уловка репараметризации помогает в вычислении градиента этой цели .θ д θ ( х ) = N ( θ , 1 ) мин θqθqθ(x)=N(θ,1)θ E q [ x 2 ]

minθEq[x2]
θEq[x2]

Один из способов вычисления заключается в следующем θEq[x2]

θEq[x2]=θqθ(x)x2dx=x2θqθ(x)qθ(x)qθ(x)dx=qθ(x)θlogqθ(x)x2dx=Eq[x2θlogqθ(x)]

Для нашего примера, где , этот метод дает qθ(x)=N(θ,1)

θEq[x2]=Eq[x2(xθ)]

Уловка репараметризации - это способ переписать ожидание так, чтобы распределение, относительно которого мы берем градиент, не зависело от параметра . Для этого нам нужно сделать стохастический элемент в независимым от . Следовательно, мы пишем как Затем мы можем написать где - распределение , т. е. . Теперь мы можем написать производную следующим образом θqθx

x=θ+ϵ,ϵN(0,1)
Eq[x2]=Ep[(θ+ϵ)2]
pϵN(0,1)Eq[x2]
θEq[x2]=θEp[(θ+ϵ)2]=Ep[2(θ+ϵ)]

Вот записная книжка IPython, которую я написал, которая рассматривает дисперсию этих двух способов вычисления градиентов. http://nbviewer.jupyter.org/github/gokererdogan/Notebooks/blob/master/Reparameterization%20Trick.ipynb

Goker
источник
4
Что такое «очевидная» тета для первого уравнения?
GWG
2
это 0. Один способ увидеть это, это заметить, что E [x ^ 2] = E [x] ^ 2 + Var (x), который в данном случае равен тета ^ 2 + 1. Таким образом, тета = 0 минимизирует эту цель.
Гокер
Итак, это полностью зависит от проблемы? Например, min_ \ theta E_q [| x | ^ (1/4)] это может быть совершенно иначе?
Анна Ван Россум
Что зависит от проблемы? Оптимальная тета? Если да, то, конечно, это зависит от проблемы.
goker
В уравнении сразу после «этот метод дает», не должно ли это быть вместо просто ? θEq[x2]=Eq[x2(xθ)qθ(x)]θEq[x2]=Eq[x2(xθ)]
AlphaOmega
17

Разумный пример математики «уловки репараметризации» приведен в ответе гокера, но некоторая мотивация может быть полезной. (У меня нет прав комментировать этот ответ; таким образом, здесь есть отдельный ответ.)

Короче говоря, мы хотим вычислить некоторое значение вида: Gθ

Gθ=θExqθ[]

Без «уловки репараметризации» мы часто можем переписать это, согласно ответу гокера, как , где Exqθ[Gθest(x)]

Gθest(x)=1qθ(x)θqθ(x)=θlog(qθ(x))

Если мы возьмем из , то является объективной оценкой . Это пример "важности выборки" для интеграции Монте-Карло. Если бы представлял некоторые выходные данные вычислительной сети (например, сеть политик для обучения с подкреплением), мы могли бы использовать это в обратном распространении (применить правило цепочки), чтобы найти производные по параметрам сети.xqθGθestGθθ

Ключевым моментом является то, что часто является очень плохой (высокая дисперсия) оценка . Даже если вы усредняете по большому количеству выборок, вы можете обнаружить, что его среднее значение, по-видимому, систематически не соответствует (или не соответствует) .GθestGθ

Основная проблема заключается в том, что существенный вклад в может вносить очень редкие значения (т. Значения для которых мало). Коэффициент увеличивает масштаб вашей оценки, чтобы учесть это, но это масштабирование не поможет, если вы не увидите такое значение при оценке из конечного числа образцов. Хорошие или плохие значения (т. Качество оценки, , для , из ) может зависеть отGθxxqθ(x)1qθ(x)xGθqθGθestxqθθчто может быть далеко от оптимального (например, произвольно выбранное начальное значение). Это немного похоже на историю о пьяном человеке, который ищет свои ключи возле уличного фонаря (потому что именно там он может видеть / пробовать), а не рядом с тем местом, где он их бросил.

«Уловка репараметризации» иногда решает эту проблему. Используя нотацию гокера, уловка состоит в том, чтобы переписать как функцию случайной величины с распределением , которое не зависит от , а затем переписать ожидание в как ожидание над ,xϵpθGθp

Gθ=θEϵp[J(θ,ϵ)]=Eϵp[θJ(θ,ϵ)]
для немного .J(θ,ϵ)

Трюк репараметризации особенно полезен, когда новый оценщик, , больше не имеет проблем, упомянутых выше (то есть, когда мы можем выбрать так, чтобы получение хорошей оценки не зависело на чертеже редкие значения ). Этому может способствовать (но это не гарантируется) тот факт, что не зависит от и что мы можем выбрать в качестве простого унимодального распределения.θJ(θ,ϵ)pϵpθp

Однако reparamerization трюк может даже "работа" , когда является не хорошей оценкой . В частности, даже если есть большой вклад в от который очень редок, мы постоянно не видим их во время оптимизации и не видим их при использовании нашей модели (если наша модель является порождающей моделью ). В несколько более формальных терминах мы можем подумать о замене нашей цели (ожидание выше ) эффективной целью, которая является ожиданием некоторого «типичного набора» для . За пределами этого типичного набора нашθJ(θ,ϵ)G & thetas ; G & thetas ; & epsi ;GθGθϵppϵ может привести к сколь угодно плохим значениям - см. Рисунок 2 (b) Брока и др. и др. для GAN, оцененного вне типичного набора, отобранного во время обучения (в этом документе меньшие значения усечения, соответствующие значениям скрытой переменной дальше от типичного набора, даже если они имеют более высокую вероятность).J

Надеюсь, это поможет.

Сет Брудер
источник
«Коэффициент 1 / qθ (x) увеличивает масштаб вашей оценки, чтобы учесть это, но если вы никогда не увидите такого значения x, это масштабирование не поможет». Можете ли вы объяснить больше?
czxttkl
@czxttkl На практике мы оцениваем ожидаемые значения с конечным числом выборок. Если очень мало для некоторого , то мы вряд ли сможем выбрать такой . Поэтому, хотя включает в себя большой коэффициент и может внести существенный вклад в истинное ожидаемое значение, оно может быть исключено из нашей оценки ожидаемого значения для любое разумное количество образцов. qθxxGθest(x)1/qθ
Сет Брудер
10

Позвольте мне сначала объяснить, зачем нам нужен трюк с репараметризацией в VAE.

VAE имеет кодер и декодер. Декодер случайным образом выбирает из истинного апостериорного Z ~ q (z∣ϕ, x) . Чтобы реализовать кодер и декодер в виде нейронной сети, вам необходимо выполнить обратное распространение с помощью случайной выборки, и это является проблемой, поскольку обратное распространение не может проходить через случайный узел; Чтобы преодолеть это препятствие, мы используем трюк репараметризации.

Теперь давайте подумаем. Поскольку наш апостериор нормально распределен, мы можем аппроксимировать его другим нормальным распределением. Мы приближаем Z с нормально распределенным ε .

введите описание изображения здесь

Но насколько это актуально?

Теперь вместо того, чтобы говорить, что Z выбирается из q (z∣ϕ, x) , мы можем сказать, что Z - это функция, которая принимает параметр (ε, (µ, L)), и эти µ, L поступают из верхней нейронной сети (кодировщик). , Поэтому при обратном распространении все, что нам нужно, это частные производные по µ, L и ε не имеет значения для получения производных.

введите описание изображения здесь

Шерлок
источник
Лучшее видео, чтобы понять эту концепцию. Я бы порекомендовал посмотреть полное видео для лучшего понимания, но если вы хотите понять только трюк репараметризации, то смотрите с 8 минут. youtube.com/channel/UCNIkB2IeJ-6AmZv7bQ1oBYg
Шерлок,
9

Я думал, что объяснение, найденное в курсе Stanford CS228 по вероятностным графическим моделям, было очень хорошим. Его можно найти здесь: https://ermongroup.github.io/cs228-notes/extras/vae/

Я суммировал / скопировал важные части здесь для удобства / моего собственного понимания (хотя я настоятельно рекомендую просто проверить оригинальную ссылку).

Итак, наша проблема в том, что у нас есть этот градиент, который мы хотим вычислить:

ϕEzq(z|x)[f(x,z)]

Если вы знакомы с оценщиками функций оценки (я считаю, что REINFORCE - это только частный случай этого), вы заметите, что это в значительной степени проблема, которую они решают. Тем не менее, оценка функции оценки имеет высокую дисперсию, что приводит к трудностям в изучении моделей в большинстве случаев.

Таким образом, при определенных условиях мы можем выразить распределение как двухэтапный процесс.qϕ(z|x)

Сначала мы выбираем шумовую переменную из простого распределения такого как стандарт Normal. Затем мы применяем детерминированное преобразование которое отображает случайный шум на это более сложное распределение. Эта вторая часть не всегда возможна, но она верна для многих интересных классов .ϵp(ϵ)gϕ(ϵ,x)qϕ

В качестве примера, давайте использовать очень простой q, из которого мы пробуем.

zqμ,σ=N(μ,σ)
Теперь вместо выборки из мы можем переписать это как где .q
z=gμ,σ(ϵ)=μ+ϵσ
ϵN(0,1)

Теперь вместо того, чтобы получать градиент ожидания q (z), мы можем переписать его как градиент ожидания относительно более простой функции .p(ϵ)

ϕEzq(z|x)[f(x,z)]=Eϵp(ϵ)[ϕf(x,g(ϵ,x))]

Это имеет более низкую дисперсию, по моему мнению, нетривиальным причинам. Проверьте часть D приложения здесь для объяснения: https://arxiv.org/pdf/1401.4082.pdf

Гораций он
источник
Привет, вы знаете, почему в реализации они делят стандартное значение на 2? (т.е. std = torch.exp (z_var / 2)) в репараметризации?
Рика
4

У нас есть наша вероятностная модель. И хочу восстановить параметры модели. Мы сводим нашу задачу к оптимизации вариационной нижней границы (VLB). Для этого мы должны сделать две вещи:

  • рассчитать VLB
  • получить градиент VLB

Авторы предлагают использовать Монте-Карло Estimator для обоих. И на самом деле они вводят этот трюк, чтобы получить более точную оценку градиента Монте-Карло в VLB.

Это просто улучшение численного метода.

Антон
источник
2

Трюк репараметризации значительно снижает дисперсию оценки 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),ϕ)

Крис Элгуг
источник