Как стать автором
Обновить

Комментарии 15

+1 и буду ждать статью про VAE + GAN. Единственное, что не понял, это:


Если метрика L_2, то мы считаем шум нормальным

А как эти понятия вообще связаны в данном случае?

Обычный метод наименьших квадратов есть частный случай метода максимума правдоподобия для нормального распределения (соответственно, минимизация абсолютного отклонения (L1 ошибка) эквивалента ММП для распределения Лапласа).


Ну а здесь примерно так же, только мы берём мат. ожидание от правдоподобия p(X|Z) по скрытым переменным Z (надо же нам их откуда-то взять).

Ясно, что распространять ошибки через случайные значения напрямую нельзя

На самом деле можно (формула 6), но лучше от этого не становится.

Статья хорошая, правда, не особо понравилось, что KL-divergence вводится абсолютно на ровном месте (как в большинстве туториалов по VAE, впрочем), вместо того чтобы естественно появиться при переходе от взятия матожидания по p(z) к q(z | x).
Попиарил серию постов у себя в ФБ: https://www.facebook.com/permalink.php?story_fbid=648700375327080&id=100005613702541
Вот это да! Спасибо!
А правильно ли я понимаю, что у вас декодер является полностью детерминированным? Т.е по одному z он всегда дает один и тот же x? Если да, то это не полностью VAE, а что-то среднее между ним и обычным автоэнкодером.
В VAE должно учиться распределение p(x|z) и генерация x должна производиться по выбранному z в соответствии с ним.

Или я что-то упустил?

Декодер здесь детерминирован в смысле детерминированной генерации параметров распределения p(x|z), на графиках, соответственно, не сами семплы, а распределение, из которого они приходят.


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

на графиках, соответственно, не сами семплы, а распределение, из которого они приходят

Я имел в виду, что само распределение в коде никак не фигурирует.
Выход модели — тензор decoded, который просто является выходом последнего dense-слоя.
В посте фигурирует формула P(X|Z) = f(Z) + \epsilon, вроде бы понятно, что decoded это f(Z), но \epsilon осталось за кадром. И на графиках, соответственно, значения f(Z).

При этом в vae_loss должно, согласно теории, использоваться матожидание log P(X|Z) по сэмплам из Q(Z|X), которое должно вычисляться каким-нибудь методом Монте-Карло, а по факту используется бинарная кросс-энтропия между decoded и X, как в обычном автоэнкодере.

P.S. Это был ответ barmaley_exe, не туда ткнул…

А какого фигурирования распределения в коде Вы хотите? Распределение на случайную величину, принимающую два значения, задаётся одним числом от 0 до 1 – вероятностью первого исхода. VAE предполагает условную независимость наблюдений X при условии кода Z, поэтому для задания распределения p(X|Z) достаточно задать по одному числу на каждый пиксель в X.


в vae_loss должно, согласно теории, использоваться матожидание log P(X|Z) по сэмплам из Q(Z|X), которое должно вычисляться каким-нибудь методом Монте-Карло, а по факту используется бинарная кросс-энтропия

Бинарная кросс-энтропия и есть логарифм распределения Бернулли, и мат. ожидание по Z действительно берётся с помощью Монте Карло оценки.

Может я и в самом деле чего-то не понимаю, но ведь элементы X не принимают только 2 значения — 0 и 1, у них 256 возможных значений, градаций серого… поэтому о каком распределении Бернулли идет речь, мне неясно.

В формуле для нижней границы лог-правдоподобия (которая оптимизируется) входы энкодера вообще никак не фигурируют. Даже в качестве «таргетов» декодера. Там просто логарифм плотности… Да, для Бернулли это и есть кросс-энтропия (если под p(X|Z) понимается p(X=1|Z)), но это возвращает нас к первому вопросу.

мат. ожидание по Z действительно берётся с помощью Монте Карло оценки
— покажите мне пожалуйста это место в коде, я его в упор не вижу.
Может я и в самом деле чего-то не понимаю, но ведь элементы X не принимают только 2 значения — 0 и 1, у них 256 возможных значений, градаций серого… поэтому о каком распределении Бернулли идет речь, мне неясно

Всё так, но кроссэнтропия выводится из логарифма плотности Бернулли, т.е. p(X|Z) – набор бернуллиевских распределений, поэтому для корректности следовало бы бинаризовать входы, поэтому подставлять в лог-плотность небинарные величины не совсем корректно.


В формуле для нижней границы лог-правдоподобия (которая оптимизируется) входы энкодера вообще никак не фигурируют. Даже в качестве «таргетов» декодера

Декодер принимает на вход семплы Z из распределения, параметры которого генерируются энкодером.


покажите мне пожалуйста это место в коде, я его в упор не вижу.

В vae_loss считается выражение под мат. ожиданием с использованием decoded, полученному по семплу из кода, что даёт Монте Карло оценку (с помощью выборки размера 1) всего мат. ожидания.

p(X|Z) – набор бернуллиевских распределений
— вот никак не могу этого осознать. p(X|Z) — это число, оно ОДНО ЕДИНСТВЕННОЕ для всех пикселей X, потому что X — это один многомерный вектор, единый объект… По Вашему выходит, что оно дает одинаковую вероятность быть равным 1 для каждого пикселя картинки, а это очень странно.

Мне значительно ближе трактовка, которую изначально дал автор, что p(X|Z) = f(Z) + \epsilon, или даже просто так: X = f(Z) + \epsilon (математически это более корректно), т.е., если \epsilon, к примеру, центрированный нормальный шум с малой дисперсией, то все сэмплы из распределения p(X|Z) будут нормально распределены вокруг f(Z). Но эта трактовка идет вразрез с вычислением loss'а, об этом я и написал в самом первом комментарии.

Хотелось бы увидеть коммент от автора, который бы нас рассудил…
вот никак не могу этого осознать. p(X|Z) — это число, оно ОДНО ЕДИНСТВЕННОЕ для всех пикселей X, потому что X — это один многомерный вектор, единый объект…

Да, и предположения модели таковы, что это число является произведением других чисел, по одному на каждый пиксель: p(X|Z) = ∏ᵢ p(xᵢ | Z). Каждое множимое должно быть бернуллиевским распределением, иначе бинарная кроссэнтропия не получится.


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

Нет, я такого не говорил. У каждого бернуллиевского распределения свой параметр, генерируемый нейросетью из семпла Z.


X = f(Z) + \epsilon

К сожалению, не всегда существует такое представление. Для бернуллиевских случайных величин, например, такой репараметризации не существует.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации