22.7. Максимальное правдоподобие¶
Один из наиболее распространённых способов мышления в машинном обучении — это подход максимального правдоподобия. Согласно этой концепции, при работе с вероятностной моделью с неизвестными параметрами наиболее вероятными считаются те параметры, которые обеспечивают наивысшую вероятность наблюдаемых данных.
22.7.1. Принцип максимального правдоподобия¶
Это допускает байесовскую интерпретацию, которая может оказаться полезной для осмысления. Предположим, что у нас есть модель с параметрами \(\boldsymbol{\theta}\) и набор примеров данных \(X\). Для конкретности можно представить, что \(\boldsymbol{\theta}\) — это единственное значение, представляющее вероятность выпадения орла при подбрасывании монеты, а \(X\) — последовательность независимых подбрасываний монеты. Мы подробно рассмотрим этот пример позже.
Если мы хотим найти наиболее вероятное значение параметров нашей модели, это означает, что мы хотим найти
Согласно правилу Байеса, это эквивалентно
Выражение \(P(X)\), являющееся вероятностью генерации данных, не зависящей от параметров, вообще не зависит от \(\boldsymbol{\theta}\), поэтому его можно опустить, не влияя на оптимальный выбор \(\boldsymbol{\theta}\). Аналогично, мы можем предположить, что у нас нет никаких априорных предпочтений относительно того, какой набор параметров лучше другого, и поэтому мы можем утверждать, что \(P(\boldsymbol{\theta})\) также не зависит от θ! Это, например, имеет смысл в нашем примере с подбрасыванием монеты, где вероятность выпадения орла может быть любым значением из \([0,1]\) без каких-либо априорных убеждений в том, что монета честная или нет (что часто называют информативно нейтральным априорным распределением). Таким образом, мы видим, что применение правила Байеса показывает, что наш лучший выбор \(\boldsymbol{\theta}\) является оценкой максимального правдоподобия для \(\boldsymbol{\theta}\):
В общепринятой терминологии вероятность данных при заданных параметрах (\(P(X \mid \boldsymbol{\theta})\)) называется правдоподобием.
22.7.1.1. Конкретный пример¶
Рассмотрим, как это работает на конкретном примере \(\theta\). Предположим, у нас есть один параметр \(1-\theta\), представляющий вероятность выпадения орла при подбрасывании монеты. Тогда вероятность выпадения решки равна \(X\), и, следовательно, если наши наблюдаемые данные \(n_H\) представляют собой последовательность с \(n_T\) орлами и решками, мы можем использовать тот факт, что вероятности независимых событий перемножаются, чтобы увидеть, что
Если мы подбросим \(13\) монет и получим последовательность «HHHTHTTHHHHHT», содержащую \(n_H = 9\) и \(n_T = 4\), то мы видим, что это
Одним из преимуществ этого примера является то, что мы знаем ответ заранее. Действительно, если бы мы сказали: «Я подбросил 13 монет, и 9 из них выпали орлом. Какова наша наилучшая оценка вероятности выпадения орла?», все правильно предположили бы \(9/13\). Метод максимального правдоподобия позволит нам получить это число, исходя из первых принципов, и при этом обобщить подход на гораздо более сложные ситуации.
Для нашего примера график \(P(X \mid \theta)\) выглядит следующим образом:
%matplotlib inline
import torch
from d2l import torch as d2l
theta = torch.arange(0, 1, 0.001)
p = theta**9 * (1 - theta)**4.
d2l.plot(theta, p, 'theta', 'likelihood')
Это значение достигает максимума где-то рядом с нашим ожидаемым \(9/13 \approx 0.7\ldots\). Чтобы проверить, находится ли он точно там, мы можем обратиться к математическому анализу. Обратите внимание, что в точке максимума градиент функции равен нулю. Таким образом, мы можем найти оценку максимального правдоподобия (22.7.1), определив значения \(\theta\), при которых производная равна нулю, и выбрав то из них, которое даёт наибольшую вероятность. Вычислим:
Это имеет три решения: \(0\), \(1\) и \(9/13\). Первые два явно являются минимумами, а не максимумами, поскольку они присваивают нашей последовательности вероятность \(0\). Последнее значение не присваивает нулевую вероятность нашей последовательности, а значит, должно быть оценкой максимального правдоподобия \(\hat \theta = 9/13\).
22.7.2. Численная оптимизация и отрицательный логарифм правдоподобия¶
Предыдущий пример хорош, но что делать, если у нас есть миллиарды параметров и примеров данных?
Прежде всего, обратите внимание: если предположить, что все примеры данных независимы, то непосредственно использовать правдоподобие становится практически невозможно, поскольку оно представляет собой произведение многих вероятностей. Действительно, каждая вероятность лежит в диапазоне \([0,1]\), обычно принимая значение около \(1/2\), а произведение \((1/2)^{1000000000}\) оказывается значительно ниже машинного эпсилона. Работать с такими числами напрямую невозможно.
Однако вспомним, что логарифм преобразует произведения в суммы, в результате чего
Это число прекрасно укладывается даже в однобайтовое число с плавающей запятой \(32\). Следовательно, нам следует рассмотреть логарифм правдоподобия, который равен
Поскольку функция \(x \mapsto \log(x)\) является возрастающей, максимизация правдоподобия эквивалентна максимизации логарифма правдоподобия. Действительно, в Section 22.9 мы увидим, как этот подход применяется на конкретном примере наивного байесовского классификатора.
Мы часто работаем с функциями потерь, стремясь минимизировать их значение. Мы можем свести задачу максимального правдоподобия к минимизации функции потерь, взяв \(-\log(P(X \mid \boldsymbol{\theta}))\), что соответствует отрицательному логарифму правдоподобия.
Чтобы проиллюстрировать это, рассмотрим задачу с подбрасыванием монеты, которую мы обсуждали ранее, и предположим, что мы не знаем аналитического решения. Мы можем вычислить, что
Это можно реализовать в виде кода и свободно оптимизировать даже для миллиардов подбрасываний монеты.
# Set up our data
n_H = 8675309
n_T = 256245
# Initialize our paramteres
theta = torch.tensor(0.5, requires_grad=True)
# Perform gradient descent
lr = 1e-9
for iter in range(100):
loss = -(n_H * torch.log(theta) + n_T * torch.log(1 - theta))
loss.backward()
with torch.no_grad():
theta -= lr * theta.grad
theta.grad.zero_()
# Check output
theta, n_H / (n_H + n_T)
Численное удобство — не единственная причина, по которой предпочитают использовать отрицательные логарифмические правдоподобия. Есть и другие причины, по которым это предпочтительнее.
Вторая причина, по которой мы рассматриваем логарифм правдоподобия, заключается в упрощении применения правил дифференцирования. Как обсуждалось выше, благодаря предположениям о независимости большинство вероятностей, с которыми мы сталкиваемся в машинном обучении, представляют собой произведения отдельных вероятностей.
Это означает, что если мы непосредственно применим правило дифференцирования произведения для вычисления производной, то получим
Это требует \(n(n-1)\) умножений и \((n-1)\) сложений, поэтому время вычислений пропорционально квадрату размера входных данных! Правильная группировка слагаемых позволяет снизить сложность до линейного времени, но для этого требуется некоторая проработка. Для отрицательного логарифма правдоподобия мы получаем вместо этого
что в итоге даёт
Для этого требуется лишь \(n\) делений и \(n-1\) сложений, поэтому время работы линейно зависит от размера входных данных.
Третья и последняя причина рассматривать отрицательное логарифмическое правдоподобие заключается в его связи с теорией информации, которую мы подробно обсудим в Section 22.11. Это строгая математическая теория, которая дает способ измерения степени информации или случайности случайной величины. Ключевым объектом изучения в этой области является энтропия, которая
которая измеряет случайность источника. Обратите внимание, что это не что иное, как среднее \(-\log\) значение вероятности, и поэтому, если мы разделим наше отрицательное логарифмическое правдоподобие на количество примеров в наборе данных, мы получим величину, родственную энтропии, известную как перекрёстная энтропия. Уже одного этого теоретического обоснования достаточно, чтобы мотивировать использование среднего отрицательного логарифмического правдоподобия по всему набору данных в качестве меры производительности модели.
22.7.3. Максимальное правдоподобие для непрерывных переменных¶
Всё, что мы рассмотрели до сих пор, предполагало работу с дискретными случайными величинами, но что делать, если мы хотим работать с непрерывными?
Кратко говоря, ничего не меняется, кроме того, что мы заменяем все упоминания вероятности на плотность вероятности. Учитывая, что плотности обозначаются строчными буквами \(p\), это означает, что, например, теперь мы говорим
Возникает вопрос: «Почему это допустимо?» Ведь мы ввели плотности вероятности именно потому, что вероятность получения конкретных значений равна нулю. Не означает ли это, что вероятность генерации наших данных при любых параметрах также равна нулю?
Indeed, this is the case, and understanding why we can shift to densities is an exercise in tracing what happens to the epsilons.
Давайте сначала переопределим нашу цель. Предположим, что для непрерывных случайных величин мы больше не хотим вычислять вероятность получения точного значения, а вместо этого стремимся к совпадению в пределах некоторого диапазона \(\epsilon\). Для простоты мы предполагаем, что наши данные представляют собой повторяющиеся наблюдения \(x_1, \ldots, x_N\) одинаково распределённых случайных величин \(X_1, \ldots, X_N\). Как мы уже видели ранее, это можно записать как
Таким образом, взяв отрицательные логарифмы, получим
Если проанализировать это выражение, то видно, что \(\epsilon\) встречается только в аддитивной константе \(-N\log(\epsilon)\). Она вообще не зависит от параметров \(\boldsymbol{\theta}\), поэтому оптимальный выбор \(\boldsymbol{\theta}\) не зависит от нашего выбора \(\epsilon\)! Если мы требуем точность в четыре знака или в четыре сотни, лучший выбор \(\boldsymbol{\theta}\) остаётся прежним, поэтому мы можем смело опустить ε, чтобы увидеть, что именно мы хотим оптимизировать:
Таким образом, мы видим, что подход максимального правдоподобия может работать с непрерывными случайными величинами так же легко, как и с дискретными, если заменить вероятности на плотности вероятности.
22.7.4. Резюме¶
Принцип максимального правдоподобия утверждает, что наилучшей моделью для заданного набора данных является та, которая генерирует данные с наибольшей вероятностью.
Часто вместо правдоподобия используют отрицательное логарифмическое правдоподобие по ряду причин: численная устойчивость, преобразование произведений в суммы (что упрощает вычисление градиентов) и теоретическая связь с теорией информации.
Хотя наиболее простое обоснование дается в дискретном случае, его можно свободно обобщить и на непрерывный случай, максимизируя плотность вероятности, приписываемую точкам данных.
22.7.5. Упражнения¶
Предположим, что вы знаете, что неотрицательная случайная величина имеет плотность \(\alpha e^{-\alpha x}\) при некотором значении \(\alpha>0\). Вы получаете одно наблюдение из этой случайной величины, равное числу \(3\). Какова оценка максимального правдоподобия для \(\alpha\)?
Предположим, что у нас есть набор данных с выборками \(\{x_i\}_{i=1}^N\), полученными из гауссовского распределения с неизвестным средним, но известной дисперсией \(1\). Какова оценка максимального правдоподобия для среднего?