Вероятность

Практика: EM и сэмплирование

Смесь гауссиан через EM, условные распределения и три способа посчитать одно ожидание

Шаг 53 из 117 · ~45 мин

Скрытая переменная

Смесь гауссиан — это модель с латентной переменной. Каждая точка пришла из одной из KK компонент, но из какой именно, мы не наблюдаем:

p(x)=k=1KπkN(xμk,Σk)p(x) = \sum_{k=1}^{K} \pi_k \, \mathcal{N}(x \mid \mu_k, \Sigma_k)

Если бы принадлежность ziz_i была известна, задача распалась бы на KK независимых MLE — по формулам из урока 120, каждая в одну строку. Вся трудность именно в том, что ziz_i скрыта, а сумма внутри логарифма не позволяет разделить слагаемые: logk\log \sum_k не раскладывается так, как раскладывается klog\sum_k \log.

EM: два шага, которые никогда не ухудшают ответ

γik=πkN(xiμk,Σk)jπjN(xiμj,Σj)μk=iγikxiiγik\htmlData{k=estep}{\gamma_{ik} = \frac{\pi_k \mathcal{N}(x_i \mid \mu_k, \Sigma_k)}{\sum_j \pi_j \mathcal{N}(x_i \mid \mu_j, \Sigma_j)}} \qquad\Longrightarrow\qquad \htmlData{k=mstep}{\mu_k = \frac{\sum_i \gamma_{ik} x_i}{\sum_i \gamma_{ik}}}

— это правило Байеса, ничего больше: posterior скрытой переменной при текущих параметрах. — обычное MLE, только каждая точка входит в каждую компоненту с весом γik\gamma_{ik}, а не целиком.

Ключевое свойство: log-правдоподобие не убывает ни на одной итерации. Это теорема, а не эмпирическое наблюдение, и она даёт бесплатную проверку реализации — если ваш лосс дёрнулся вверх, в коде ошибка. На семи точках сходимость выглядит так:

итерацияlogL\log Lμ1\mu_1σ2\sigma^2
1111.9541-11.95411.1564-1.15640.73420.7342
2211.4789-11.47891.2526-1.25260.50240.5024
3311.0896-11.08961.2813-1.28130.42970.4297
4411.0376-11.03761.2841-1.28410.42240.4224
6611.03695-11.036951.28432-1.284320.421950.42195
202011.03695-11.036951.28432-1.284320.421950.42195

Шесть итераций до пяти значащих цифр. EM сходится быстро в начале и медленно в конце — это его характерное поведение: он не использует градиент и не имеет скорости обучения, зато каждый шаг гарантированно не вреден.

В блоке 4 мы увидим, что EM — это координатный подъём по ELBO: E-шаг максимизирует по qq, M-шаг — по параметрам. Монотонность станет очевидной, а не удивительной.

Вырожденное решение

У правдоподобия смеси есть неприятное свойство: оно не ограничено сверху. Посадите одну компоненту точно на одну точку и стягивайте её дисперсию к нулю:

σ2\sigma^2 компонентыlogL\log Lплотность в точке
10410^{-4}11.26-11.2639.939.9
10610^{-6}8.96-8.96398.9398.9
10810^{-8}6.65-6.6539893989
101010^{-10}4.35-4.353989439894
101410^{-14}+0.25+0.253.991063.99 \cdot 10^{6}

Сравните с честным оптимумом 11.037-11.037: начиная примерно с σ2=105\sigma^2 = 10^{-5} вырожденное решение лучше по правдоподобию, а дальше уходит в ++\infty.

То есть глобального максимума у этой задачи просто нет, и «найти MLE» здесь — некорректно поставленная задача. Что с этим делают на практике:

  • нижняя граница на дисперсию (reg_covar в scikit-learn — по умолчанию 10610^{-6});
  • prior на Σ\Sigma, то есть переход к MAP — обратное распределение Уишарта штрафует малые дисперсии;
  • перезапуск компоненты, которая схлопнулась.

Все три — способы обойти отсутствие максимума, а не улучшить оптимизацию. И это третий раз в блоке, когда prior не подкручивает ответ, а делает задачу разрешимой: первый был ноль успехов из четырёх, второй — разделимые данные в логистической регрессии.

Условные распределения гауссианы

Для двумерной гауссианы и E-шага, и предсказание при частично известном входе делаются одной формулой:

μYX=x=μY+ρσYσX(xμX),σYX2=σY2(1ρ2)\mu_{Y \mid X = x} = \mu_Y + \rho \frac{\sigma_Y}{\sigma_X}(x - \mu_X), \qquad \sigma^2_{Y \mid X} = \sigma_Y^2 (1 - \rho^2)

Поставьте срез в виджете и подвигайте ρ\rho. Два наблюдения стоят того, чтобы их сделать самому:

σx 1
σy 1
корреляция ρ 0.7
маргинальное ст. откл.
1

Первое: условная дисперсия всегда не больше маргинальной и не зависит от того, где именно стоит срез. Множитель 1ρ21 - \rho^2 — это доля дисперсии, которая остаётся необъяснённой; при ρ=0.7\rho = 0.7 остаётся 51%51\%, при ρ=0.9\rho = 0.919%19\%. Знакомая величина: ρ2\rho^2 — это в точности R2R^2 из линейной регрессии.

Второе: условное среднее — линейная функция xx. Отсюда факт, который стоит держать в голове: линейная регрессия оптимальна не потому, что мир линеен, а потому, что для совместно гауссовских величин условное ожидание в самом деле линейно. Как только совместное распределение перестаёт быть гауссовым, это перестаёт быть верным.

Что делать руками

  1. EM для смеси с нуля. Одномерный случай, две компоненты, семь точек из таблицы выше. Логируйте logL\log L на каждой итерации и проверяйте монотонность assert’ом — это лучший тест на корректность E-шага.
  2. Воспроизведите вырождение. Инициализируйте одну компоненту в точке данных с σ2=106\sigma^2 = 10^{-6} и убедитесь, что EM охотно уходит туда, а logL\log L растёт без предела. Затем добавьте reg_covar и посмотрите, что изменится.
  3. Сравните с kk-means. Прогоните оба на одном облаке. kk-means — это предельный случай EM, где ответственности округляются до 00 и 11, а дисперсии считаются равными и фиксированными. Убедитесь, что на вытянутых кластерах он проигрывает.
  4. Три способа посчитать одно ожидание. Возьмите E[X2]\mathbb{E}[X^2] для XN(0,1)X \sim \mathcal{N}(0,1) (ответ 11) и посчитайте: наивным Монте-Карло, importance sampling с q=N(0,2)q = \mathcal{N}(0, 2), и точно. Сравните стандартные ошибки при том же nn — и заодно проверьте, что neffn_{\text{eff}} у второго способа меньше nn.
  5. Условные распределения численно. Сгенерируйте 10510^5 точек из двумерной гауссианы с ρ=0.7\rho = 0.7, отберите те, у которых x1<0.05|x - 1| < 0.05, и сравните их выборочные среднее и дисперсию с формулами выше. Совпасть должно до двух знаков.
  6. Соберите блок целиком. Логистическая регрессия из прошлого урока обучалась MLE. Добавьте к ней L2, то есть гауссов prior, и убедитесь, что это тот же λ=σ2/τ2\lambda = \sigma^2/\tau^2 из урока про MAP. Один вывод, три урока.

Источники

  • Bishop — Pattern Recognition and Machine Learning, гл. 9 — Смеси гауссиан, EM, вырожденные решения
  • Dempster, Laird, Rubin — Maximum Likelihood from Incomplete Data via the EM Algorithm — Оригинальная статья про EM

Проверки

0 из 2
  1. EM, смеси и условные распределения

    Отметьте все верные утверждения.

  2. Один шаг EM

    Реализуйте одну итерацию EM для одномерной смеси двух гауссиан: em_step(xs, pi0, mu0, mu1, var0, var1) — верните [loglik, new_pi0, new_mu0, new_mu1, new_var0, new_var1].

    E-шаг — ответственность первой компоненты за точку xix_i:

    γi=π0N(xiμ0,σ02)π0N(xiμ0,σ02)+(1π0)N(xiμ1,σ12)\gamma_i = \frac{\pi_0 \, \mathcal{N}(x_i \mid \mu_0, \sigma_0^2)}{\pi_0 \, \mathcal{N}(x_i \mid \mu_0, \sigma_0^2) + (1-\pi_0)\,\mathcal{N}(x_i \mid \mu_1, \sigma_1^2)}

    loglik = ilog[π0N(xiμ0,σ02)+(1π0)N(xiμ1,σ12)]\sum_i \log\big[\pi_0 \mathcal{N}(x_i \mid \mu_0,\sigma_0^2) + (1-\pi_0)\mathcal{N}(x_i \mid \mu_1,\sigma_1^2)\big]сумма, не среднее, и считается она по старым параметрам, до обновления.

    M-шаг, где n0=iγin_0 = \sum_i \gamma_i и n1=nn0n_1 = n - n_0:

    π0=n0n,μ0=iγixin0,σ02=iγi(xiμ0)2n0\pi_0' = \frac{n_0}{n}, \qquad \mu_0' = \frac{\sum_i \gamma_i x_i}{n_0}, \qquad \sigma_0'^2 = \frac{\sum_i \gamma_i (x_i - \mu_0')^2}{n_0}

    и симметрично для второй компоненты с весами 1γi1 - \gamma_i. Дисперсию считайте вокруг нового среднего.

    Плотность: N(xμ,σ2)=12πσ2e(xμ)2/(2σ2)\mathcal{N}(x \mid \mu, \sigma^2) = \frac{1}{\sqrt{2\pi\sigma^2}}e^{-(x-\mu)^2/(2\sigma^2)}.

    функция em_step

    Загрузка редактора…

    Ctrl/⌘ + Enter