Лекция¶
Для чего нужен EM-алгоритм?¶
Хотя вариации этого алгоритма используются, например, в байесовском подходе, сейчас он интересует нас в первую очередь как способ максимизировать сложную функцию правдоподобия \(l(x | \theta)\). Здесь \(x\) - наблюдения, \(\theta\) - вектор параметров, которые мы хотим оценить. EM-алгоритм заменяет сложную функцию \(l(x | \theta)\) (которая называется неполным правдоподобием) на легко максимизируемую \(l(x, z | \theta)\) (которая называется полным правдоподобием) и максимизирует её. Здесь \(z\) - некая латентная, ненаблюдаемая переменная. Несмотря на то, что интуитивно первая функция \(l(x | \theta)\) кажется менее громоздкой, часто бывает, что итеративно работать проще с функцией, зависящей также от латентной переменной. Что именно мы будем использовать как \(z\), зависит от конкретной задачи. Но поэтому EM-алгоритм особенно хорошо проявляет себя в тех случаях, когда в задаче интуитивно и логично выделяется такая ненаблюдаемая переменная.
Устройство EM-алгоритма¶
EM-алгоритм заключается в повторении двух шагов:
E-шага (expectation-step), шага выведения функции \(l(x, z | \theta)\).
M-шага (maximization-step), шага ее максимизации.
Условием останова алгоритма может быть как достижение сходимости, так, например, и обычное превышение максимально допустимого количества итераций. Опишем теперь работу отдельных частей алгоритма подробнее.
Инициализация
На этом шаге мы как-то задаем стартовый набор параметров. Случайно, нулями, используя простую эвристику или другим способом - как именно, зависит от конкретной задачи.
E-шаг, часть 1
На этом этапе мы хотим найти условное распределение \(p(z | x, \theta_{old})\), где \(\theta_{old}\) - последние посчитанные значения вектора параметров (или, на стартовой итерации, значения, которыми он был проинициализирован).
E-шаг, часть 2
Определим функцию, по которой будем оптимизировать новый вектор параметров \(\theta\) относительно старого \(\theta_{old}\):
M-шаг
Максимизируем описанную выше функцию \(Q(\theta, \theta_{old})\) по \(\theta\). В результате получаем новый вектор параметров \(\theta_{new}\), который и будем использовать как \( \theta_{old}\) на следующей итерации. Или, если достигли условия останова, прекратим работу алгоритма и возвратим \(\theta_{new}\) как ответ.
Пример работы¶
Чтобы лучше понять, как работает EM-алгоритм, решим задачу кластеризации с известным числом кластеров. Задача формулируется так: пусть есть набор независимых наблюдений, вектор \(x\), и все наблюдения принадлежат одному из двух кластеров:
Кластер 1, в котором наблюдения \(x_i \sim \mathcal{N}(\mu_1,\sigma_1^2)\). Вероятность того, что случайное наблюдение из смеси относится к первому кластеру равна \(p_1\).
Кластер 2, в котором \(x_i \sim \mathcal{N}(\mu_2,\sigma_2^2)\). Вероятность того, что случайное наблюдение из смеси относится ко второму равна \(p_2=1-p_1\).
Другими словами, если мы хотим получить смесь из \(N\) наблюдений, то мы \(N\) раз с вероятностью \(p_1\) генерируем наблюдение согласно распределению первого кластера, иначе - согласно распределению второго. После этого мы хотим, получив как данные только саму смесь и число кластеров (в нашем примере 2), научиться восстанавливать неизвестные параметры \(\theta = (\mu_1, \sigma^2_1, \mu_2, \sigma^2_2, p_1)\).
Попробуем разобраться, почему трудно решать эту задачу методом максимального правдоподобия. Вспомним функцию плотности нормального распределения:
Обозначим плотности двух кластеров как \(f_1\) и \(f_2\). Выпишем теперь логарифмическую функцию правдоподобия для описанной выше смеси (можем разложить логарифм в сумму логарифмов, т.к. наблюдения независимы):
Однако получается логарифм от суммы, и оптимизировать такую функцию правдоподобия будет тяжело. Для сравнения, попробуем теперь использовать в этой задаче EM-алгоритм.
Инициализация¶
Зададим разумный стартовый набор параметров с помощью простейших эвристик. Самое простое, что мы можем сказать о смеси двух распределений на прямой, что данные слева принадлежат одному кластеру, данные справа - второму. Тогда в качестве параметров матожиданий можно взять минимум и максимум по всей выборке, а в качестве дисперсий - среднее минимума и максимума по всей выборке. Кластеры на данном шаге можно считать равновероятными, то есть вероятность попадания в тот или иной кластер равна \(\dfrac{1}{K}\), где \(K\)- число кластеров. В нашей задаче получаем:
Данная эвристика не является лучшей, но она разумная. Если бы наши данные располагались не на прямой, а на плоскости, то можно было бы выбрать два случайных наблюдения, сказать, что они являются центрами кластеров, а в качестве параметров дисперсий взять половину расстояния между данными точками.
Главное - как-то разумно инициализировать стартовый набор параметров, а ЕМ-алгоритм дальше будет его улучшать. Чуть позже мы докажем, что ЕМ-алгоритм точно не будет его ухудшать: в отличие от градиентного спуска, который может перескочить экстремум и уменьшить значение целевой функции, EM-алгоритм никогда не уменьшает ее значение.
Но понятно, что и EM-алгоритм не является панацеей от всех бед, так как ни один алгоритм численной оптимизации не гарантирует сходимость к глобальному экстремуму.
E-шаг, часть 1¶
Напомним, что главная идея ЕМ-алгоритма: максимизировать не функцию правдоподобия \(l(x | \theta)\), а функцию \(l(x, z | \theta)\) с латентной переменной \(z\). В этой задаче разумно объявить \(z\) как переменную, отвечающую за номер кластера. \(z = (z_1, z_2, .., z_n)\) - вектор всех \(z_i\): \(z_i = 1\), если наблюдение \(x_i\) принадлежит первому кластеру, \(z_i = 2\) - если второму. В реальных данных мы не знаем значения этих переменных (иначе самой задачи классификации бы не было), но мы можем посчитать условные вероятности \(p(z | x, \theta_{old})\).
Что это значит? Это значит, что хоть мы и не можем восстановить сами значения \(z_i\) для каждого наблюдения \(x_i\), мы можем посчитать вероятности \(p(z_i = k | x_i, \theta_{old})\) принадлежности данного наблюдения к кластеру \(k\). Заметим, что для \(K\) кластеров необходимо для каждого наблюдения \(x_i\) посчитать \(K-1\) вероятность, так как вероятность принадлежности последнему кластеру равна \(p(z_i = K | x_i, \theta_{old}) = 1 - \sum_{k = 1}^{K-1} p(z_i = k | x_i, \theta_{old})\).
Обобщая, посчитать закон распределения \(p(z| x, \theta_{old})\) в случае дискретного \(z\) означает посчитать в явном виде \(N*(K-1)\) вероятностей \(p(z_i = k | x_i, \theta_{old})\), где \(N\) - число наблюдений, \(K\) - число кластеров. Что делать в случае, когда латентная переменная является непрерывной? Необходимо посчитать некоторую аппроксимацию непрерывного распределения, так как оно тяжело представляется на компьютере, в отличие от дискретного, которое представляется вектором вероятностей.
Также отметим, что в нашем случае наблюдения предполагаются независимыми, поэтому задача легко распараллеливается.
Итак, вернемся к задаче кластеризации. Нам достаточно посчитать вероятности принадлежности первому кластеру для каждого наблюдения \(p(z_i = 1 | x_i, \theta_{old})\). Для этого воспользуемся формулой условной вероятности:
В нашем случае:
Тогда:
Заметим, что \(\theta_{old}\) нам известны! То есть мы знаем параметры обоих распределений и вероятности принадлежности кластерам. Тогда \(p(z_i = 1, x_i | \theta_{old}) = p_1 \cdot p(x_i |z_i = 1, \theta_{old})\), а \(p(x_i | \theta_{old})\) можно расписать по формуле полной вероятности. Получаем:
В данной формуле нам известны все значения: \(p_1\) берется из \(\theta_{old}\), а \(p(x_i |z_i = 1, \theta_{old})\) и \(p(x_i |z_i = 2, \theta_{old})\) - это значения функции плотности нормального распределения в точке \(x_i\) с параметрами \(\mu_1\), \(\sigma_1\) и \(\mu_2\), \(\sigma_2\) соответственно, которые также берутся из вектора \(\theta_{old}\). Итого, мы можем в явном виде посчитать \(p(z_i = 1 | x_i, \theta_{old})\)!
E-шаг, часть 2¶
Определим для нашей задачи функцию, по которой будем оптимизировать новый вектор параметров \(\theta\) относительно старого \(\theta_{old}\):
На этом шаге мы вычисляем математическое ожидание, используя вероятности \(p(x, z |\theta_{old})\), вычисленные в предыдущем пункте. Обратим внимание, что мы ничего не «предрассчитываем», а лишь определяем функцию для её дальнейшей максимизации.
Вспомним, что логарифм функции плотности для нормального распределения равен
Теперь у нас есть все необходимое, чтобы расписать формулу \(Q(\theta, \theta_{old})\):
Параметры для \(\theta_{new}\) будем знать после максимизации, пока что только определили функцию.
Для общего случая, можем определить \(Q(\theta, \theta_{old})\) через интеграл:
Эта формула корректна для зависимых наблюдений, но в большинстве задач наблюдения независимы, поэтому логарифм по выборке \(\ln p(x, z | \theta)\) будет распадаться в сумму по отдельным наблюдениям.
М-шаг¶
Наконец, на этом шаге, алгоритмически максимизируем по \(\theta\) функцию, полученную ранее, и находим оптимальную \(\theta_{new}\):
Заметим, что благодаря нашим преобразованиям, максимумы отдельных переменных из вектора \(\theta_{new}\) легко вычисляются. Для демонcтрации, выведем \(\mu_1^{new}\):
Дополнительные материалы¶
Благодарности¶
Григорьев Пётр
Сибагатова Софья
Терехова Юлия