Теория вероятностей в машинном обучении. Часть 1: модель регрессии

В данной статье мы подробно рассмотрим вероятностную постановку задачи машинного обучения: что такое распределение данных, дискриминативная модель, i.i.d.-гипотеза и метод максимизации правдоподобия, что такое регрессия Пуассона и регрессия с оценкой уверенности, и как нормальное распределение связано с минимизацией среднеквадратичного отклонения.

В следующей части (статья готовится) рассмотрим метод максимизации правдоподобия в классификации: в чем роль кроссэнтропии, функций сигмоиды и softmax и как кроссэнтропия связана с «расстоянием» между распределениями вероятностей и почему модель регрессии тоже обучается через минимизацию кроссэнтропии.

В третьей части (статья планируется) перейдем от метода максимизации правдоподобия к байесовскому выводу и его различным приближениям, таким как метод апостериорного максимума, методы Монте-Карло и вариационный вывод. Рассмотрим, как применение этих методов порождает типичные для машинного обучения понятия, такие как стохастический градиентный спуск, регуляризация, ансамблирование, подбор архитектуры и гиперпараметров. Также поговорим о роли априорных гипотез в машинном обучении.

Бывало ли у вас такое, что разбираясь в некой сложной области вам сначала не удается систематизировать в голове всю имеющуюся информацию, а затем вы что-то узнаете или догадываетесь, и пазл внезапно складывается в стройную и непротиворечивую картину? Именно такую роль может сыграть понимание байесовского вывода в машинном обучении.

Как писал Пьер-Симон Лаплас в начале XIX века, «теория вероятностей — это здравый смысл, выраженный в вычислениях». Поэтому разрабатывать алгоритмы машинного обучения можно и не опираясь на теорию вероятностей и байесовский вывод. Но с изучением этих областей то, что раньше казалось просто здравым смыслом, приобретает большую строгость и обоснования.

Впрочем, в машинном обучении любые теории строятся на очень зыбкой почве, поскольку машинное обучение — это не чистая математика, а наука о применении алгоритмов обучения на данных к реальному миру. Любая математическая теория основана на аксиомах и условиях (например, в статистике таким условием часто является «независимость и одинаковая распределенность обучающих примеров»). В реальности эти условия могут не выполняться, и иногда даже не иметь четкого смысла. Об этой теме мы тоже поговорим подробнее.

Возможно, изложение в статье покажется слишком подробным и затянутым, но эти вещи невозможно объяснить в двух словах. Большое количество деталей и пояснений позволяет надеяться, что ничего важного не будет упущено, и в понимании не останется пробелов.

Содержание текущей части

  • В первом разделе мы рассмотрим связь между машинным обучением и статистическим выводом.

  • Во втором разделе поговорим о моделях: рассмотрим вероятностную модель регрессии и ее обучение методом максимизации правдоподобия.

  • В третьем разделе поговорим о данных: рассмотрим понятие вероятностного распределения данных, задачу максимизации метрики на распределении и i.i.d.-гипотезу.

  • В четвертом разделе снова вернемся к методу максимизации правдоподобия, используя материал из третьего раздела, и введем понятие статистической модели.

  • В пятом разделе рассмотрим модель регрессии с оценкой уверенности в виде формул и программного кода.

Звездочкой* отмечены дополнительные разделы, которые не повлияют на понимание дальнейшего материала.

1. Машинное обучение и статистический вывод
2. Вероятностная модель регрессии
        2.1. Регрессия, классификация и промежуточные варианты
        2.2. Вероятностное моделирование
        2.3. Модель регрессии
        2.4. Обсуждение
        2.5. Функция потерь Хьюбера*
3. Вероятностное распределение данных
        3.1. Понятие распределения данных
        3.2. Дискриминативные модели
        3.3. Генеративные модели*
        3.4. i.i.d.-гипотеза и качество обобщения
        3.5. Проблемы i.i.d.-гипотезы*
4. Статистические модели
        4.1. Простые статистические модели
        4.2. Статистические модели в машинном обучении
5. Регрессия с оценкой уверенности*
        5.1. Моделирование дисперсии в модели регрессии*
        5.2. Регрессия с константной оценкой дисперсии*

1. Машинное обучение и статистический вывод

Статистический вывод (оценка параметров и проверка гипотез) часто включается в курсы машинного обучения. Но многими он воспринимается лишь как досадная заноза, которая только отнимает время и далее нигде не используется. Однако машинное обучение и статистический вывод тесно связаны и решают почти одну и ту же задачу.

  • Машинное обучение заключается в написании и применении алгоритмов, которые обучаются на данных, автоматически выводя общие закономерности из частных примеров.

  • Статистический вывод заключается в оценке параметров распределений и проверке гипотез на основе наблюдений, то есть опять-таки в получении общих выводов из частных примеров.

Процесс выведения общих правил из частных примеров называется обобщением (generalization), или индуктивным выводом (inductive inference). Чем же тогда отличаются эти два раздела науки? Граница между ними довольно расплывчата. Вообще говоря, большую часть машинного обучения можно считать статистическим выводом, что мы более формально рассмотрим в дальнейшем.

Иногда говорят, что в статистике целью обычно является вывод (inference) о том, верна ли гипотеза или как связаны между собой переменные, а в машинном обучении целью обычно является предсказание (prediction) или генерация чего-либо (Bzdok et al., 2018), хотя эти две цели часто близки. В машинном обучении, как правило, используются более сложные модели, тогда как в традиционной статистике модели обычно проще, но за счет этого они более интерпретируемы и больше внимания уделяется оценке уверенности в сделанных выводах (Breiman, 2001).

c7a3cc9ed962493b555e815663adaf69.png

2. Вероятностная модель регрессии

2.1. Регрессия, классификация и промежуточные варианты

Задачи классификации и регрессии отличаются типом целевого признака: в регрессии целевой признак количественный (иногда его называют «числовой»), в классификации — категориальный. Отличие категориального от количественного признака заключается не в его типе (int или float), а скорее в предполагаемой метрике сходства на множестве его значений:

  • В количественном признаке чем больше модуль разности между двумя значениями, тем сильнее они непохожи друг на друга. Например, предсказать значение 2 вместо 1 будет в меньшей степени ошибкой, чем предсказать 10 вместо 1.

  • В категориальном признаке все значения, называемые классами, одинаково непохожи друг на друга. Например, предсказать 2-й класс вместо 1-го будет в той же степени ошибкой, что и предсказать 10-й класс вместо 1-го. При этом множество значений дискретно и, как правило, конечно.

Все остальные отличия в алгоритмах (в формате выходных данных, функции потерь и метрике качества) обусловлены описанной выше разницей между этими типами. Вообще, при желании задачу классификации технически можно решать как регрессию, то есть напрямую предсказывать номер класса и округлять его до целого числа. Регрессию, наоборот, можно свести к классификации, выполнив дискретизацию множества значений целевого признака. Такие модели кое-как обучатся, но чаще всего их качество на валидации будет существенно ниже, впрочем бывают и исключения (Müller et al., 2021).

В случае иерархической классификации (Silla and Freitas, 2011) целевой признак на первый взгляд является категориальным, но на деле некоторые классы могут быть ближе по смыслу и положению в иерархии друг к другу, чем другие. Например, в классификации животных предсказать овчарку вместо лабрадора является в меньшей степени ошибкой, чем предсказать бегемота вместо лабрадора. Это означает, что на множестве значений целевого признака есть какая-то нетривиальная метрика сходства, и ее желательно учесть в алгоритме обучения.

Будет ли это по прежнему задачей классификации? Сложно сказать. Базовые понятия «классификации» и «регрессии» не покрывают все разнообразие промежуточных вариантов (так же как есть промежуточные варианты между молотком, топором и другими инструментами) (Bernholdt et al., 2019, Twomey et al., 2019). Важно лишь то, что при выборе формата выходных данных и функции потерь нужно учитывать метрику сходства на множестве значений целевого признака. Это один из способов внесения в модель априорной (известной или предполагаемой заранее) информации, к чему мы будем еще не раз возвращаться.

2.2. Вероятностное моделирование

В задачах классификации и регрессии (и многих других задачах) требуется найти зависимость между исходными данными X и целевыми данными Y в виде функции f: X \to Y. Обычно модель имеет параметры, которые подбираются в ходе обучения, поэтому модель можно записывать как функцию от входных данных x и параметров \theta. Поскольку параметров обычно много, то \theta — это некий массив чисел. Предсказанное моделью значение y (в отличие от истинного значения) обычно обозначается крышечкой (циркумфлексом): \hat{y} = f(x, \theta).

Общая идея вероятностного моделирования заключается в том, что вместо одного числа модель должна предсказывать распределение вероятностей на множестве Yпри заданном значении x \in X. В теории вероятностей это называется условным распределением и записывается как p(y|X=x) или просто p(y|x). Поскольку модель имеет параметры, то вероятностную модель записывают как p(y|x, \theta) — эта запись читается как «вероятность y при x и \theta» (позже рассмотрим конкретные примеры).

Таким образом мы позволим модели «сомневаться» в предсказании. Выполнив такой переход, мы ничего не теряем: распределение вероятностей p(y|x, \theta) несет больше информации, чем точечная оценка f(x, \theta). Зато мы получаем важное преимущество. Величина p(y|x, \theta) определена для всех y \in Y, поэтому мы можем количественно оценить ошибку модели: чем меньшую вероятность модель назначает верному y, тем сильнее ошибка. Так мы естественным образом можем задать функцию потерь.

2.3. Модель регрессии

Пусть мы имеем нейронную сеть с одним скрытым слоем шириной в N=1000 нейронов и хотим применить ее для решения задачи регрессии с M= 10 входными признаками. Такая сеть имеет 2 матрицы весов и 2 вектора bias’ов: \theta = (W_1, b_1, W_2, b_2). Нетрудно посчитать, что, например, матрица W_1 содержит MN= 10000 весов, а всего количество весов равно 12001. Пусть в качестве функции активации используется \text{ReLU}(x) = \max (0, x). Преобразование входных данных в выходные осуществляется по следующей формуле (всю сеть обозначим как функцию f):

\hat{y} = f(x, \theta) = W_2 \text{ReLU}(W_1x + b) + b_2 \tag{1}

Примечание. Умножение вектора xна матрицу Wможет выполняться слева (Wx) или справа (xW), в зависимости от того, работаем мы с векторами-строками или векторами-столбцами. Например, в TensorFlow используется умножение справа, и матрица весов имеет размер (in, out), в PyTorch — умножение слева, и матрица весов имеет размер (out, in).

Меняя параметры \theta, можно получить совершенно разные функции f(\cdot, \theta). Обучение сети заключается в том, что мы подбираем такие \theta, чтобы минимизировать ошибку предсказания на обучающей выборке. Но способ расчета ошибки предсказания можно выбрать по-разному:

Алгоритмический подход. Мы выбираем способ расчета ошибки произвольным образом на основании здравого смысла, руководствуясь любыми соображениями. Например можем взять в качестве ошибки среднеквадратичное отклонение \text{MSE}(y, \hat{y}) = (y-\hat{y})^2 или среднее абсолютное отклонение \text{MAE}(y, \hat{y}) = |y-\hat{y}|. Нетрудно видеть, что \text{MSE}(y, \hat{y}) = \text{MAE}(y, \hat{y})^2. Поэтому MSE, в сравнении с MAE, не так сильно штрафует несущественные ошибки, но сильнее штрафует большие ошибки. Таким образом, MAE более устойчив к выбросам (подробнее см., например, здесь).

Определившись с тем, как сильно нам нужно штрафовать большие ошибки в сравнении с маленькими, мы можем выбрать функцию потерь. Далее, поскольку в обучающей выборке много примеров, сложим величину ошибки на всех примерах и будем минимизировать полученную сумму.

Вероятностный подход. Будем рассматривать значение f(x, \theta) как мат. ожидание нормального распределения с некой фиксированной дисперсией \sigma^2. Так мы получим распределение вероятностей для y при данном x:

\begin{cases}\mu = f(x, \theta)\\p(y|x, \theta)=\mathcal{N}(y|\mu, \sigma^2)\end{cases} \tag{2}

Иногда то же самое записывают другим способом:

y = f(x, \theta) + \textit{noise},\ \ \ \ \textit{noise} \sim \mathcal{N}(0, \sigma^2) \tag{3}

Формула плотности вероятности нормального распределения:

\mathcal{N}(y|\mu, \sigma^2) = \cfrac{1}{\sigma \sqrt{2 \pi}} \exp {-\cfrac{(y-\mu)^2}{2 \sigma^2}} \tag{4}

Эта формула выглядит несколько громоздкой, но на самом деле она несложная. Если мы обозначим \Delta = y - \mu, то основу формулы (4) составляет выражение \exp (-\Delta^2). График этой функции выглядит как характерный симметричный «колокол» с центром в \Delta=0. Коэффициент 1/(2 \sigma^2) определяет «сжатие» колокола по горизонтальной оси, коэффициент 1/(\sigma \sqrt{2 \pi}) определяет «сжатие» по вертикальной оси. Эти коэффициенты выбраны так, чтобы интеграл функции от -\infty до +\infty был равен единице (что требуется для всех распределений), и чтобы распределение имело дисперсию \sigma^2.

fc28584b9fc72adaf19fd195dc488f86.png

Итак, мы считаем, что для каждого x величина y распределена нормально, и мат. ожидание распределения является функцией от x, которую требуется найти. В отличие от предыдущего подхода, теперь мы можем рассчитать вероятность для любого значения y при x и \theta.

Для каждого обучающего примера: чем меньше вероятность истинного значения y при заданных x и \theta, тем сильнее ошибка предсказания на данном примере. Отсюда естественным образом вытекает функция потерь: нам нужно максимизировать p(y|x, \theta). Формула (2) задает вид этого распределения, а формула (4) помогает подсчитать конкретное численное значение p(y|x, \theta) для каждого обучающего примера.

Поиск значений параметров \theta, при которых вероятность (правдоподобие) наблюдаемых данных p(y|x, \theta) максимальна, называется методом максимизации правдоподобия (maximum likelihood estimation, MLE). Параметры, максимизирующие правдоподобие, часто обозначают как \theta^{ML}, мы будем обозначать их как \theta_{best}.

Пока что мы рассмотрели только один пример, но в обучающей выборке много примеров. Будем искать такие параметры \theta, чтобы максимизировать произведение вероятностей для всех примеров (позже рассмотрим, почему именно произведение, а не сумму). Максимизация некой величины эквивалентна максимизации ее логарифма, а логарифм произведения равен сумме логарифмов множителей:

\theta_{best} = \underset{\theta}{\text{arg max}} \prod\limits_{i=1}^N p(y_i|x_i, \theta) = \underset{\theta}{\text{arg min}} \sum\limits_{i=1}^N -\log p(y_i|x_i, \theta) \tag{5}

Формула (5) говорит, что нам нужно минимизировать функцию потерь, равную сумме -\log p(y_i|x_i, \theta) по всем обучающим примерам (x_i, y_i), где p(y_i|x_i, \theta) мы моделируем нормальным распределением (2). Подставив выражение для нормального распределения (4) получим:

-\log p(y|x, \theta)=  \log\sigma +\log \sqrt{2 \pi} + \cfrac{(y-f(x, \theta))^2}{2 \sigma^2} \tag{6}

Первые два слагаемых в (6) являются константами и поэтому не влияют на положение максимума по \theta, значит их можно удалить. В третьем слагаемом знаменатель является константой, поэтому он тоже не влияет на положение максимума по \theta, его можно заменить на единицу. После этих действий подставим (6) в (5) и получим:

\theta_{best} = \underset{\theta}{\text{arg min}} \sum\limits_{i=1}^N (y_i-f(x_i, \theta))^2 \tag{7}

Ранее мы вводили обозначение \hat{y_i} = f(x_i, \theta). Согласно формуле (7) нам надо минимизировать сумму среднеквадратичных отклонений (y_i-\hat{y_i})^2 по всем обучающим примерам. Вспомним, что изначально в модели регрессии мы считали \sigma^2 константой, для которой выбрано произвольное значение. Теперь выясняется, что константа \sigma^2 не влияет на оптимальные параметры \theta_{best}, поэтому в задаче поиска оптимальных параметров ее значение не играет роли.

Примечание. Значение \sigma^2влияет на результат в байесовском выводе, который мы будем рассматривать в следующих частях.

Резюме. В алгоритмическом подходе модель машинного обучения — это некая параметризованная функция f(\cdot, \theta): X \to Y. Например, это может быть линейная регрессия, нейронная сеть, ансамбль решающих деревьев или машина опорных векторов (хотя две последние модели имеют переменное число параметров, но это не принципиально). Такая модель напрямую предсказывает значение y. В вероятностном подходе модель по-прежнему предсказывает число f(x, \theta), но теперь это число считается не окончательным предсказанием y, а мат. ожиданием нормального распределения с некой фиксированной дисперсией \sigma^2. Таким образом мы моделируем условное распределение p(y|x).

Важно понять, что между этими двумя подходами нет принципиальной разницы. Если вероятностная модель предсказывает, что »y находится где-то вокруг точки f(x, \theta) со среднеквадратичным отклонением \sigma», то при точечной оценке модель предсказывает, что »y равно f(x, \theta)», но при этом мы понимаем, что модель обычно не выдает идеально точных предсказаний, и интерпретируем ее предсказание как »y находится где-то вокруг точки f(x, \theta)».

aba05bfa17b47c407625688518df9eb0.png

Таким образом, вероятностная модель просто формализует то, что при точечной оценке мы предполагали неформально. Вспомним цитату Лапласа о том, что теория вероятностей — лишь здравый смысл, выраженный в вычислениях.

2.4. Обсуждение

На примере регрессии мы увидели, что вероятностный подход позволяет вывести выражение для функции потерь, которое в алгоритмическом подходе мы выбирали произвольно. Однако нормальное распределение в (2) мы выбрали произвольно. Вместо него мы могли бы взять, например, распределение Пуассона или Лапласа. В случае распределения Лапласа мы пришли бы к тому, что надо минимизировать среднее абсолютное отклонение |y-\hat{y}|. Отсюда получается, что выбор распределения p(y|x, \theta) в вероятностном подходе эквивалентен выбору функции ошибки L(y, \hat{y}) в алгоритмическом подходе.

Какой же подход лучше — вероятностный или алгоритмический? Вероятностный подход удобно применять в тех случаях, когда есть объективные причины предполагать, что p(y|x) имеет тот или иной вид:

Пример 1. Иногда мы знаем, что y — это количество неких событий, которые произошли в условиях x — например, количество посетителей тренажерного зала в зависимости от погоды. Тогда распределение p(y|x) скорее всего похоже на распределение Пуассона, параметр которого является функцией от x. Мы можем расписать аналог формулы (2) для распределения Пуассона и из него вывести функцию потерь, которую следует применять. В результате мы получаем регрессию Пуассона. Кроме того, преимущество в том, что мы получаем не точечную оценку, а распределение вероятностей на y.

Пример 2. Иногда мы знаем, что распределение p(y|x)гетероскедастично, то есть дисперсия p(y|x) непостоянна и зависит от x. Например, пусть x — доходы, а y — расходы человека на питание. Понятно что в среднем y растет с ростом x, но дисперсия y также растет: более богатый человек может тратить на еду много, а может тратить мало, в зависимости от предпочтений, тогда как более бедный человек скорее всего тратит мало. Поэтому в формуле (2) мы можем сделать дисперсию тоже функцией от x. Например, если мы используем нейронную сеть, то пусть она имеет 2 выходных нейрона: один нейрон предсказывает мат. ожидание нормального распределения для y, а другой нейрон предсказывает дисперсию. Такой способ называется регрессией с оценкой (не)уверенности, в последнем разделе мы рассмотрим его подробнее. Пока что вы можете попробовать сами вывести требуемые формулы.

2.5. Функция потерь Хьюбера*

Часто мы используем нормальное распределение для p(y|x). Обоснован ли этот выбор? Иногда да. По центральной предельной теореме, если некая случайная величина y является суммой множества независимых случайных факторов, и каждый фактор вносит исчезающе малый вклад в сумму, то величина y распределена приблизительно нормально. В реальности многие величины распределены приблизительно нормально. Однако распределения, которые встречаются в реальном мире, часто имеют более тяжелые хвосты, то есть большую вероятность встретить крайние значения. Скажем, рост или вес человека в популяции распределен приблизительно нормально, но рекордсмены по росту или весу (в ту или иную сторону) встречаются намного чаще, чем если бы распределение было строго нормальным.

Поэтому разумно было бы моделировать p(y|x, \theta) распределением, похожим на нормальное, но с более тяжелыми хвостами. Это снизило бы влияние выбросов. Например, распределение Лапласа имеет более тяжелые хвосты, чем нормальное распределение. Мы можем «склеить» эти два распределения, взяв центральную часть от нормального распределения и хвосты от распределения Лапласа. Если далее вывести функцию потерь по формуле (6) как минус логарифм плотности вероятности, то получим часто используемую функцию потерь Хьюбера. Эта функция потерь имеет гиперпараметр \delta. Она не так сильно «штрафует» большие выбросы, как среднеквадратичная ошибка.

\text{Huber}(y, \hat{y}) = \begin{cases}\frac{1}{2} (y - \hat{y})^2,& \text{if } |y - \hat{y}| \leq \delta\\\delta (|y - \hat{y}| - \frac{1}{2} \delta),& \text{otherwise}\end{cases} \tag{8}

В целом, из формулы (5) видно, что функция потерь равна минус логарифму плотности вероятности для выбранного распределения. На самом деле графики плотности для многих распределений удобнее смотреть в логарифмическом масштабе по вертикальной оси. Например, нормальное распределение в логарифмическом масштабе выглядит как парабола с направленными вниз ветвями, а распределение Лапласа в логарифмическом масштабе выглядит как функция -|x|. Зеркально отразив эти графики по оси x, мы увидим график функции потерь. Скомбинировав нормальное распределение с хвостами от распределения Лапласа, получаем функцию потерь Хьюбера.

55c9b952ed1aa8af2a37d225dbd1d19a.png

Интересно, что функцию потерь Хьюбера можно рассматривать как среднеквадратичную ошибку + gradient clipping, применяемый к градиенту функции потерь по \hat{y}. Gradient clipping означает, что если при обратном проходе \partial loss / \partial \hat{y} по модулю больше некоего порога \delta, то он обрезается до этого порога:

\cfrac{\partial loss(y, \hat{y})}{\partial \hat{y}} := clip \Big( \cfrac{\partial loss(y, \hat{y})}{\partial \hat{y}}, -\delta, \delta \Big)

Gradient clipping также применяется при обучении нейронных сетей, но в этом случае он действует не на градиент по \hat{y}, а на градиент по весам.

3. Вероятностное распределение данных

3.1. Понятие распределения данных

Как правило считается, что обучающие и тестовые данные берутся из одного и того же совместного распределения p(x, y), называемого распределением данных или генеральной совокупностью. Говоря о распределении p(x) или p(x, y), мы условно предполагаем наличие некоего «бесконечного генератора пар (x, y)», из которого взяты обучающая и тестовая выборка.

Конечно, генеральная совокупность данных — это условность, и вопрос ее близости к истине довольно философский. Обычно мы имеем лишь конечную выборку данных, добытую тем или иным способом, но не имеем строгого определения для p(x, y). Но в целом мы считаем, что p(x, y) наиболее велико для «типичных» пар (x, y), и равно нулю для невозможных пар (в которых либо p(x)=0, либо p(y|x)=0).

Например, пусть мы имеем датасет из объявлений о продаже автомобилей. Для нашего датасета верно, например, следующее:

  • Количество авто «Lada Granta» превосходит количество авто «Москвич-412»

  • Количество авто «Победа» с двигателем мощностью 500 л. с. равно нулю

Тогда мы можем считать датасет выборкой из распределения, в котором для p(x) верно следующее:

  • p(x|\text{марка}(x) = \text{ p (x|\text{марка}(x) = \text{«Москвич-412»})» src=«https://habrastorage.org/getpro/habr/upload_files/453/557/448/4535574480427d49dc355846deef707f.svg» />

  • p(x|\text{марка}(x) = \text{

Если распределение p(y|x) невырождено (то есть не назначает всю вероятность одной точке), то это значит, что y не может быть однозначно определен из x, но может быть определен приблизительно.

3.2. Дискриминативные модели

Запишем одну из базовых формул теории вероятностей:

p(x, y) = p(y|x)p(x) \tag{9}

Модели, которые моделируют p(y|x), то есть ищут некое приближение для истинного p(y|x), называют дискриминативными моделями. Иногда используют другую терминологию: Murphy, 2023 называет модели p(y|x)предиктивными моделями, которые делятся на дискриминативные (классификация) и модели регрессии.

Важная особенность всех таких моделей в том, что они не моделируют вероятность входных данных p(x). Это означает, что дискриминативная модел

© Habrahabr.ru