Pull to refresh
1
0

User

Send message
Методология тестирования — да, открыто описана. Но данные для тестирования скрыты, и поэтому может возникать недоверие. Писать о том, как все классно у Вас лично — нормальная практика, но если при этом Вы пишете, как все плохо у других, то это уже своего рода антиреклама и подрыв деловой репутации конкурента, что может быть чревато и судебными разбирательствами. Особенно, если в сравнении Вы используете неактуальные данные (старые модели, движки...). Это все равно, что сравнивать свою новенькую Ладу с Мерседесом 1980 года выпуска… Конечно, она и выглядит посимпатичнее, и не стучит в ней ничего, и лошадиных сил побольше, и на российских дорогах она себя лучше чувствует, только в сравнении с новым Мерседесом окажется, что гордиться-то особо нечем… Особенно на немецком автобане.
Спасибо за подробный и очень содержательный обзор. Когда глубоко погружаться неохота или нет времени, но тема в принципе интересна, подобные обзоры помогают взглянуть на нее более широко и получить общее представление.

Бросились в глаза несколько опечаток:
1. Очень во многих местах ошибочно написана фамилия Choromanska (без первой «o»)
2. В начале в одном месте Гессиан назван Гауссианом (или я не понял, о чем речь)
3. Там, где речь идет о квадрате числа параметров сети, у 12-й степени двойка слезла в строку.
Во фразе «глобальный минимум функции не может быть меньше, чем среднее по значениям» по-видимому опечатка. Должно быть «больше, чем»
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'а, об этом я и написал в самом первом комментарии.

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

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

мат. ожидание по 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, не туда ткнул…
А правильно ли я понимаю, что у вас декодер является полностью детерминированным? Т.е по одному z он всегда дает один и тот же x? Если да, то это не полностью VAE, а что-то среднее между ним и обычным автоэнкодером.
В VAE должно учиться распределение p(x|z) и генерация x должна производиться по выбранному z в соответствии с ним.

Или я что-то упустил?
Спасибо!

По поводу development set. Вы сами пишете, что он для настройки, поэтому разумно называть его настроечной выборкой, я встречал такой термин в русскоязычной литературе.

И еще, не ради придирок, а чтобы улучшить результат — есть несколько бросающихся в глаза опечаток. Должно быть «распознАвание», «насколько (слитно!!!) хорошо».
Там, где рассказывается про reparametrization trick допущена ошибка… В формуле q(w|\theta)d\theta = q(\epsilon)d\epsilon. Там должно быть не d\theta, а dw. Иначе нельзя делать замену переменной под интегралом.
А если с dw то и становится понятно, почему это соотношение справедливо для стандартной нормальной \epsilon и полученной из нее w.
Это просто замена переменных в плотности вероятности. q(w | \theta) = q(eps)\sigma, т.к. \sigma — якобиан преобразования w = \mu + \sigma\epsilon, а dw = \sigma d\epsilon
Там, где расписаны производные? в первом слагаемом стОит расписать цепное правило, а то с первого взгляда не совсем понятно за счет чего слезает, например, множитель \epsilon. А если написать dq/dw*dw/d\sigma + dq/d\sigma и напомнить, как зависит w от \sigma, то все становится понятно

Information

Rating
Does not participate
Registered
Activity