Максимальное правдоподобие и функции потерь
Максимальное правдоподобие — единый принцип, из которого выводятся функции потерь: подбираем параметры так, чтобы наблюдаемые данные были наиболее вероятны.
Метод максимального правдоподобия (MLE) подбирает параметры модели так, чтобы вероятность увидеть имеющиеся данные при этих параметрах была наибольшей.
Идея: какие параметры лучше всего объясняют данные
Перевернём привычный вопрос. Обычно спрашивают «какова вероятность данных при заданных параметрах?». MLE спрашивает обратное: «какие параметры делают наблюдаемые данные наиболее вероятными?». Это «правдоподобие» (likelihood) — та же вероятность, но рассматриваемая как функция параметров при фиксированных данных. Мы крутим параметры, чтобы её максимизировать.
Пример: оценка вероятности монеты
Подбросили монету 10 раз, выпало 7 орлов. Какое p (вероятность орла) лучше всего объясняет данные? Посчитаем правдоподобие для разных p и найдём максимум.
from math import comb
# Данные: 7 орлов из 10 бросков
n, k = 10, 7
def likelihood(p):
# вероятность увидеть ровно k орлов при данном p
return comb(n, k) * p**k * (1 - p)**(n - k)
best_p, best_L = None, -1
for i in range(0, 101):
p = i / 100
L = likelihood(p)
if L > best_L:
best_L, best_p = L, p
print("Лучшее p (максимум правдоподобия):", best_p)
print("Совпадает с долей орлов 7/10 =", 7/10)
Вывод:
Лучшее p (максимум правдоподобия): 0.7 Совпадает с долей орлов 7/10 = 0.7
MLE выдал p = 0.7 — ровно наблюдённую частоту. Это не совпадение: для монеты максимальное правдоподобие всегда даёт долю успехов. Простая «здравая» оценка оказалась математически обоснованной.
Логарифм правдоподобия
На практике правдоподобие — произведение вероятностей по всем объектам, и оно становится исчезающе малым числом. Поэтому максимизируют логарифм правдоподобия: логарифм превращает произведение в сумму (удобнее и численно устойчивее), а максимум остаётся в той же точке. А поскольку оптимизаторы любят минимизировать, берут минус логарифма — получается «negative log-likelihood», и это уже функция потерь.
import math
from math import comb
n, k = 10, 7
def neg_log_likelihood(p):
if p <= 0 or p >= 1:
return float("inf")
return -math.log(comb(n, k) * p**k * (1 - p)**(n - k))
# Минимум -log L там же, где максимум L
best_p, best_nll = None, float("inf")
for i in range(1, 100):
p = i / 100
nll = neg_log_likelihood(p)
if nll < best_nll:
best_nll, best_p = nll, p
print("p минимизирующее -logL:", best_p, " (тот же максимум правдоподобия)")
Вывод:
p минимизирующее -logL: 0.7 (тот же максимум правдоподобия)
Откуда берутся знакомые функции потерь
Вот кульминация курса. Известные функции потерь — это не произвольные формулы, а минус-логарифм правдоподобия при разных предположениях о данных:
| Предположение о данных | MLE даёт потерю | Где применяется |
| Ошибки нормальны | MSE (средний квадрат) | регрессия |
| Метки Бернулли (0/1) | кросс-энтропия (log loss) | классификация |
То есть когда вы минимизируете MSE в линейной регрессии — вы под капотом ищете максимум правдоподобия в предположении нормального шума. А кросс-энтропия в классификации — это минус-логарифм правдоподобия для бинарных меток. Весь курс сошёлся в одну точку: вероятность задаёт правдоподобие, MLE превращает его в функцию потерь, а градиентный спуск её минимизирует.
Итог
- MLE подбирает параметры, при которых наблюдаемые данные наиболее вероятны.
- Для монеты MLE даёт долю успехов — здравая оценка оказывается оптимальной.
- На практике максимизируют логарифм правдоподобия (сумма вместо произведения).
- MSE и кросс-энтропия — это минус-логарифм правдоподобия при разных моделях шума; так MLE объединяет вероятность, потери и оптимизацию.