В машинном обучении для оптимизации каких-либо вероятностных моделей часто используется нижняя вариационная граница (evidence lower bound), о ней и пойдет речь.
В первую очередь задача. Допустим мы генерируем картинки следующим образом: сэмплируем из стандартного многомерного нормального распределения какой-то вектор потом его преобразуем некоторым алгоритмом
, параметриуемым
и хотим чтобы на выходе было нормальное распределение с центром в точке
, которое похоже на лицо человека, с дисперсией, например, равной
, где
длина вектора
. процесс работает со скрытыми переменными
из стандартного нормального распределения и с полученными переменными
, распределение которых явно зависит от переменных
. То есть наш алгоритм явно моделирует условное распределение: берет на вход реализацию
и возвращает новое распределение, которое постулируется нормальным. Но фактически, так как у этого нормального фиксирована дисперсия, наш алгоритм просто возвращает среднее этого нормального распределения.
Совместное распределение такого процесса мы назовем
Как такое обучить, если у нас есть очень много лиц? Заведем процесс, обратный процессу , его назовем
. Суть его та же, что и
Это просто совместное распределение
где
имеет распределение наших данных (реальных лиц), а
это некоторые зависящие от
переменные. Зависят они по нашему правилу
парметризуемому
.
также берет на вход реализацию
и возвращает нормальное распределение. Но уже не с фиксированной дисперсией, а меняющейся по каждому направлению. Т.е. алгоритм по переменной
выдает не только среднее нормального в пространстве
, но и вектор дисперсий.
Для простоты я буду опускать далее индексы и
, подразумевая всегда, что
зависит от первого, а
от второго
Окей, а теперь формально запишем, что мы хотим от нашей модели. Мы хотим, чтобы в среднем мы нормальные картинки генерировали. А на языке статистики это значит, что мы хотим, чтобы правдоподобие наших реальных картинок было максимальным в нашей генерирующей модели . Что такое правдоподобие картинки
в нашей модели? Это просто
То есть это значение маргинального распределения на наших картинках. Само маргинальное распределние -- просто распределение картинок, которые мы генерируем. И мы пытаемся максимизировать это распределение в точках реальных картинок.
По некоторым причинам удобнее работать с логарифмом этой величины. Так как логарифм -- функция монотонная, значение максимума не изменится
Так как картинок у нас много, усредним по "всем реальным картинкам" эту величину, взяв по их распределению мат. ожидание и получим
Но теперь вспомним, что для такого распределения реальных картинок у нас уже есть обозначение -- это просто , просто по определению
(см. выше).
Так что мы по факту хотим оптимизировать
Теперь распишем аккуратно то, что находится справа под математическим ожиданием, зафиксировав конкретный
Для вогнутых функций , типо логарифма, выполняется неравенство Йенсена, которое выглядит так:
Получаем, применим его:
Величина справа и называется нижней вариационной границей или ELBO (Evidence Lower BOund)
Почему она нам вообще интересна? На это есть две причины:
Максимизируя нижнюю границу (по нашим параметрам
и
) мы можем быть уверены, что наша оцениваемая величина не меньше её значения, а значит тоже как бы при этом процессе максимизируется
На самом деле эта нижняя граница может стать точной оценкой нашей величины (т.е. не только снизу)
Если первое, наверное, очевидно, то второе требует пояснения. Для этого, раскроем совместное распределение по правилу
Первое слагаемое от не зависит, поэтому оно просто
(как раз то, что мы оцениваем!). Второе слагаемое, если поменять числитель и знаменатель под логарифмом (и следовательно вынести из него минус), будет просто минус дивергенцией Кульбака — Лейблера между
и
, обозначаемой как
.
Что это вообще значит?
Максимизируя ELBO, мы не только максимизируем
но и минимизируем,
Если мы доминимизируем
до нуля, то мы будем в аккурат максимизировать
(потому что ELBO будет попросту совпадать с ней)
Оба распределения под KL-дивергенцией параметризуются обучаемыми параметрами, а значит, эта KL-дивергенция для достаточно хороших параметризующих алгоритмов может быть устремлена к нулю
Отлично! Теперь мы просто забиваем на лог-правдоподобие и оптимизируем ELBO, которое потом все равно сравняется с первым
Следующая проблема, которая перед нами встает: как оценить это самое ELBO
Что мы вообще знаем в нашей модели? Мы умеем с помощью наших алгоритмов (нейросеток) и
оценивать
и
, так что хотелось бы с помощью них как-то посчитать ELBO. Для этого вместо того, чтобы раскрывать совместное распределение
в формуле ELBO как
раскроем его так:
. Что как бы хорошо для нас, потому что подобно тому, как
это, по определению, распределение наших данных,
мы тоже знаем и по определению это стандартное многомерное нормальное! (см. определение
выше)
Осталось понять, почему то, что мы получили -- это как бы хорошо. Для этого осознаем один факт про математическое ожидание:
Доказать этот факт довольно просто:
А теперь вспомним, что на самом-то деле мы хотим не саму ELBO оптимизировать, а его мат. ожидание по , которое по сути является распределением наших изначальных картинок-лиц.
И тут нам как раз пригождается это свойство матожей:
Хорошо это в первую очередь потому, что мы переписали ELBO таким образом, что оно зависит от (которое мы и моделировали в самом начале),
(аналогично) и
(которое мы постулировали в самом начале нормальным). В то время как из
мы умеем сэмплировать, беря рандомный
из датасета, прогоняя через наш алгоритм
, и сэмплируя из полученного распределния
. Раскроем эту мысль более подробно:
Вот у нас есть картинка . Как посчитать ELBO?
Первое слагаемое (уменьшаемое) можно самым тупым образом оценить: чтобы оценить мат. ожидание, можно взять среднее. А среднее для одного элемента это сам этот элемент :). Так что мы просто сэмплируем , прогнав
через наш алгоритм
и получив таким образом это условное распределение (оно у нас нормальное, а мы предсказали по сути среднее и вектор дисперсий). После чего прогоняем полученный
через генератор
, получив распределение
В которое мы будем подставлять
. Оно у нас тоже нормальное, причем с фиксированной дисперсией (т.е. предсказали мы нашим алгоритмом только среднее
Так как плотность многомерного нормального (оно же в данном случае правдоподобие) описывается формулой
Получается, что лог-правдоподобие:
Второе слагаемое (вычитаемое) -- KL-дивергенция двух нормальных с известными средними и дисперсиями. Здесь мы уже можем явно записать, чему она равна:
Таким образом мы можем явно оценить два слагаемых: первое через MSE реального изображения и реконструированного, второе по формуле KL-дивергенции. А значит оптимизировать наши параметры