Как стать автором
Обновить
155.76
Open Data Science
Крупнейшее русскоязычное Data Science сообщество

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

Время на прочтение28 мин
Количество просмотров24K

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

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

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

Данная серия статей не является введением в машинное обучение и предполагает знакомство читателя с основными понятиями. Задача статей - рассмотреть машинное обучение с точки зрения теории вероятностей, что позволит по новому взглянуть на проблему, понять связь машинного обучения со статистикой и лучше понимать формулы из научных статей. Также на описанном материале строятся более сложные темы, такие как вариационные автокодировщики (Kingma and Welling, 2013), нейробайесовские методы (Müller et al., 2021) и даже некоторые теории сознания (Friston et al., 2022).


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

Как писал Пьер-Симон Лаплас в начале 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).

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.

Итак, мы считаем, что для каждого 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)".

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

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 распределена приблизительно нормально, что говорит о комбинаторной природе нормального распределения. Например, сумма большого числа независимых величин, каждая из которых с вероятностью 0.5 принимает значение +1 или -1, распределена приблизительно нормально, что замечательно демонстрирует игрушка Galton Board:

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

Поэтому разумно было бы моделировать 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, мы увидим график функции потерь. Скомбинировав нормальное распределение с хвостами от распределения Лапласа, получаем функцию потерь Хьюбера.

Интересно, что функцию потерь Хьюбера можно рассматривать как среднеквадратичную ошибку + 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{"Lada Granta"}) > p(x|\text{марка}(x) = \text{"Москвич-412"})

  • p(x|\text{марка}(x) = \text{"Победа"}\ \&\ \text{мощность}(x) \approx \text{"500 л. с."}) \approx 0

Если распределение 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). Это означает, что дискриминативная модель не может оценить то, насколько реалистичны входные данные. Например, мы могли обучать нейронную сеть распознавать животных на фотографиях. Получив на вход изображение с "белым шумом", сеть тоже выдаст какой-то ответ (скорее всего, с высокой уверенностью предскажет одно из животных) и никак не сможет сказать вам, что фотография вообще не является животным.

3.3. Генеративные модели*

Кроме дискриминативных, существуют еще генеративные модели - в статистике так называются модели, которые моделируют распределение для всех используемых переменных, то есть p(x, y), либо p(x), если y отсутствует. Иногда "генеративными моделями" также называют модели, способные генерировать что-то сложное, вроде картинок или текста - это близко к предыдущему определению, но не всегда одно и то же, так что здесь есть неоднозначность в терминологии. В целом, генеративные модели - это тема для отдельной статьи. Подробно о генеративных моделях можно почитать в книге Murphy, 2023, раздел 20 и далее. Дискриминативные модели рассматриваются там же в разделе 14 и далее.

С одной стороны кажется, что в задаче предсказания y по x "информативность" модели растет в ряду: f(x) < p(y|x) < p(x, y), поскольку имея p(x, y) мы можем рассчитать p(y|x), а имея p(y|x) мы можем получить точечную оценку f(x), но не наоборот.

p(y|x) = \cfrac{p(x, y)}{p(x)} = \cfrac{p(x, y)}{\int\limits_{y \in Y} p(x, y)}

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

3.4. i.i.d.-гипотеза и качество обобщения

Часто выборку данных рассматривают как выборку из независимых и одинаково распределенных величин (independent and identically distributed, i.i.d.). Это означает, что каждый пример (x_i, y_i) из обучающей и тестовой выборки является случайной величиной, взятой из некоего общего распределения p(x, y). Отсюда автоматически следует, что все примеры независимы друг от друга.

\forall i: (x_i, y_i) \sim p(x, y) \tag{10}

По моему мнению, данная гипотеза сочетает в себе "блеск и нищету" машинного обучения. С одной стороны, она позволяет формализовать задачу машинного обучения как максимизация ожидаемой метрики качества L(y, \hat{y}(x)) на всем распределении данных (подробнее можно почитать, например, здесь):

\text{(quality of model f)} = \mathop{\mathbb{E}}\limits_{x, y \sim p} L(y, f(x)) = \int\limits_{X, Y} p(x, y) L(y, f(x)) \to \underset{\theta}{\text{max}} \tag{11}

i.i.d.-гипотеза дает очень простой способ оценки качества модели: достаточно разделить данные на train и test, и поскольку примеры в test взяты из того же распределения, что и train, то оценка качества модели на test является оценкой Монте-Карло для ожидаемой метрики на всем распределении данных.

\text{(quality of model f)} \approx \cfrac{1}{N} \sum\limits_{i=1}^N L(y_i, f(x_i)), \ \ \ \ (x_i, y_i) \sim p \tag{12}

При большом размере тестовой выборки N эта оценка будет достаточно точной. Правда, бывают исключения, когда даже при большом размере тестовой выборки оценка качества будет иметь большую погрешность. Это может происходить в том случае, когда влияние отдельных примеров на метрику качества сопоставимо с суммой влияния всех остальных примеров: например в случае несбалансированных классов или сильных выбросов.

В случае регрессии формула (12) обычно подразумевает точечную оценку для y, а не распределение вероятностей. Если же модель выдает распределение вероятностей p(y|x, \theta), то мы легко можем преобразовать его в точечную оценку. Например, если целевая метрика L - среднеквадратичное отклонение, то нужно взять мат. ожидание p(y|x, \theta), если же целевая метрика - среднее абсолютное отклонение, то нужно взять медиану (подробнее см., например, здесь).

3.5. Проблемы i.i.d.-гипотезы*

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

Например, это практически неизбежно в кредитном скоринге: нам нужно предсказать вероятность того, что заемщик не вернет кредит, то обучающие данные собираются только по тем заемщикам, которым ранее выдали кредит. Если раньше в банке не выдавали кредиты людям моложе 20 лет, то такие люди не попадут в обучающее распределение данных. Модель может не научиться корректно работать на таких примерах. Если тестовая выборка была случайно отделена от обучающей, то на ней эта проблема никак не будет заметна, но при работе модели по назначению такие люди, конечно, будут часто встречаться. О способах решения данной проблемы в кредитном скоринге можно почитать, например, в Ehrhardt et al., 2021.

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

В целом понятие "обучения" является более широким, чем задача максимизации метрики (11), особенно когда дело касается обучения агентов (роботов, ботов в компьютерных играх и т. д). Во многом обучение связано с умением выявлять причинно-следственные связи (Pearl, 2009), что помогает функционировать в изменяющейся среде и не обращать внимание на нерелевантные детали окружающей среды. Например, робот, который метко бросает мяч в корзину в лаборатории, но впадает в ступор на уличной площадке из-за того, что корзина стала другого цвета, вряд ли будет полезен. Но способность выявлять причинно-следственные связи никак не связана с максимизацией метрики (11), да и само понятие "распределения данных" часто неоднозначно, поскольку обычно источник данных не является генератором независимых и одинаково распределенных примеров.

Таким образом, i.i.d.-обучение, то есть любые методы, целью которых является максимизация метрики (11), имеет свои границы применимости. Во многих случаях, когда очевидно что i.i.d.-гипотеза неверна, применяют другие подходы (например, марковские цепи, авторегрессионные модели для прогнозирования временных рядов). Но существуют и пограничные случаи, когда непонятно можно ли применять i.i.d.-обучение. На мой взгляд, в табличных задачах слишком часто полагаются на i.i.d.-гипотезу. Возможно, что когда-нибудь в табличном ML в обиход войдут новые (или "хорошо забытые старые") подходы, которые могут учесть зависимость примеров друг от друга, например, с помощью латентных переменных или теории информации.

4. Статистические модели

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

4.1. Простые статистические модели

Статистический вывод (statistical inference) занимается оценкой неизвестных параметров распределений. Пусть у нас есть данные, которые являются выборкой из неизвестного распределения. Нам нужно ответить на вопрос - из какого распределения они получены? Мы вводим набор "распределений-кандидатов", который называется статистической моделью. Рассмотрим несколько примеров:

Пример 1. У нас есть набор чисел X = \{x_1, \dots, x_n\}. Мы знаем, что эти числа являются i.i.d.-выборкой из нормального распределения, его дисперсия равна 1, а среднее неизвестно (его нужно оценить из данных). Тогда наша статистическая модель \mathcal{M} - это множество всех одномерных нормальных распределений с дисперсией 1 и всеми возможными значениями среднего:

\mathcal{M} = \{ \mathcal{N}(\mu, \sigma^2=1) | \mu \in R\} \tag{14}

Возьмем любое распределение из множества \mathcal{M}. Поскольку нам известно, что все примеры в выборке независимы, то плотность вероятности всей выборки p(X) равна произведению плотностей вероятностей для всех примеров:

p(X) = \prod\limits_{i=1}^N p(x_i) =  \prod\limits_{i=1}^N \mathcal{N}(x_i | \mu, 1) \tag{15}

Отсюда, зная \mu, мы можем рассчитать p(X). Это значит, что для любого распределения из множества \mathcal{M} мы можем рассчитать p(X). Теперь просто выберем из множества \mathcal{M} то распределение, для которого p(X) максимально. Для этого нужно просто подставить формулу нормального распределения в (15) и отыскать максимум полученного выражения по \mu (формулы подробно расписывать здесь не будем). Это и есть метод максимизации правдоподобия.

Пример 2. Аналогично предыдущему примеру, но мы не знаем ни среднее, ни дисперсию. Тогда наша статистическая модель - это множество всех одномерных нормальных распределений:

\mathcal{M} = \{ \mathcal{N}(\mu, \sigma^2) | \mu \in R, \sigma^2 \in R^+\} \tag{16}

Здесь метод максимизации правдоподобия можно выполнить полностью аналогично, только формулы получатся сложнее.

Таким образом, статистическая модель ничего не говорит об оптимальных значениях параметров, а лишь описывает среди какого множества распределений \mathcal{M} мы выполняем поиск. Сам поиск может выполняться методом максимизации правдоподобия, как в предыдущих примерах. Однако такой подход не всегда хорошо работает, есть и другие методы (байесовский вывод и его аппроксимации), их мы рассмотрим в следующих частях.

На какие "подводные камни" мы можем натолкнуться, используя метод максимизации правдоподобия? Их несколько.

Проблема 1. На самом деле распределение, из которого пришла выборка X может не быть нормальным. Вообще, практически ни одно из распределений реального мира не является строго нормальным (кроме, наверное, квантовой механики). Значит ли это что наша модель неверна? Строго говоря да. Но если искомое распределение хорошо аппроксимируется нормальным, то выполнив аппроксимацию мы практически ничего не потеряем. То есть, наша модель \mathcal{M} может не содержать искомого распределения, но если элементами из \mathcal{M} можно его хорошо аппроксимировать - этого уже достаточно (если же нельзя - говорят о "model misspecification"). Вообще, модель - это некое приближение реальности. Она может быть не идеально точна, но все равно полезна: вся наука и инженерия основаны на моделях как упрощениях наблюдаемых явлений. Как говорил один из статистиков, "all models are wrong, but some are useful".

Проблема 2. Выборка может не быть независимой и одинаково распределенной (i.i.d.). Например, она может быть результатом двухступенчатного семплирования или даже временным рядом, то есть выборкой из p(x, t), где t - время, разное для разных семплов. Здесь опять получается, что наша модель \mathcal{M} неверна, но она все равно может быть полезна, если зависимостью от t можно пренебречь. Если же ей принебречь нельзя, то нужно использовать другие методы, такие как прогнозирование временных рядов. Они тоже могут быть основаны на теории вероятностей, но i.i.d.-гипотеза в них не используется.

Проблема 3. Мы можем заранее иметь предположения о том, какие значения параметров более вероятны, а какие менее вероятны. В этом случае метод максимизации правдоподобия применять не стоит, поскольку он не учитывает эту информацию. В следующей части мы рассмотрим байесовский вывод, который позволяет ее учесть.

Проблема 4. Если мы будем искать не 1-2 параметра (\mu, \sigma), а, скажем, 100 параметров, а в нашей выборке всего 10 семплов, то наверное этих семплов недостаточно. Мы легко сможем подогнать параметры под данные, и мы даже сможем найти много разных значений параметров, одинаково хорошо подогнанных под данные. Но некоторые из таких значений параметров будут очень плохо соответствовать всему распределению данных, при хорошем соответствии выборке. Таким образом, в методе максимизации правдоподобия возникает проблема переобучения (1, 2, 3).

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

4.2. Статистические модели в машинном обучении

В предыдущем разделе мы рассмотрели статистическую модель как параметризованное семейство распределений. Тот же подход можно применить в машинном обучении.

Модель машинного обучения (такую как линейная регрессия, случайный лес, нейронная сеть) можно рассмотреть как параметризованную функцию. С помощью этой функции мы оцениваем параметры распределения y. Например, пусть мы предполагаем, что условное распределение p(y|x) является нормальным распределением с \sigma^2=1 и мат. ожиданием, зависящим от x. За \Theta обозначим множество всех возможных значений параметров. Наша статистическая модель будет иметь следующий вид:

\mathcal{M} = \{\mathcal{N}(\mu = f(x, \theta), \sigma^2=1) | \theta \in \Theta \} \tag{17}

У нас есть набор пар (x, y), и мы предполагаем, что они являются i.i.d.-выборкой из некоего распределения p(x, y). Это предположение мы подробно рассматривали во второй части. Все, то нам осталось сделать - найти такие параметры \theta \in \Theta, чтобы вероятность обучающей выборки была максимальна: Поскольку мы предполагаем, что все примеры независимы друг от друга (i.i.d.), то по базовым законам теории вероятностей вероятность выборки равна произведению вероятностей всех примеров, так же как в формуле (5). Именно поэтому в разделе 2 мы максимизировали произведение вероятностей (а не, например, сумму или минимум).

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

Как видим, здесь есть полная аналогия с простыми статистическими моделями, которые мы рассмотрели в предыдущем разделе. Вместе с этим мы получаем те же самые три подводных камня, основным из которых часто является переобучение: существует множество значений параметров, дающих очень малую ошибку на train и высокую ошибку на test, и процесс оптимизации часто сходится именно к таким решениям.

Зачем нам нужны были сложности с логарифмом, и почему нельзя напрямую максимизировать вероятность p(y|x, \theta)? Пожалуй, мы могли бы так сделать. Но во-первых, в случае нормального распределения взятие логарифма упрощает формулы (5-7). Во-вторых, в этом случае мы должны максимизировать уже не сумму, а произведение величин p(y|x, \theta) по всем примерам (5). Оптимизация произведения сотен и тысяч множителей может быть численно нестабильной и вызывать переполнение float. В-третьих, для оптимизации суммы большого количества слагаемых существуют методы стохастической оптимизации с доказанной эффективностью, тогда как для оптимизации произведения большого количества множителей аналогичных методов может не быть.

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

5. Регрессия с оценкой уверенности*

5.1. Моделирование дисперсии в модели регрессии*

В разделе части 1 мы рассмотрели вариант модели регрессии, в котором p(y|x) моделируется нормальным распределением, для которого мат. ожидание предсказывается с помощью x, а дисперсия является константой. Но нам ничего не мешает предсказывать и дисперсию. Для этого нужно, чтобы модель регрессии выдавала не одно, а два числа: f_1(x, \theta) и f_2(x, \theta). В случае нейронной сети мы можем взять 2 выходных нейрона. В случае градиентного бустинга над решающими деревьями каждый лист каждого дерева может выдавать 2 числа, которые суммируются по всем деревьям.

Но дисперсия не может быть меньше нуля, а модель может выдавать любое число. Поэтому удобнее, чтобы модель выдавала логарифм дисперсии. Ее дополнительно можно умножить на константу C, которая будет гиперпараметром функции потерь. Тогда мат. ожидание целевой переменной \mu и ее дисперсия \sigma^2 выразим через f_1 и f_2 следующим образом:

\begin{cases}\mu = f_1(x, \theta)\\\sigma^2 = C \exp f_2(x, \theta)\end{cases} \tag{18}

Так же как и в первой части, мы минимизируем минус логарифм вероятности для каждого примера. Подставив в (6) выражения для \mu и \sigma^2, получим выражение для функции потерь:

-\log p(y|x, \theta) = \\ \cfrac{(y-f_1(x, \theta))^2}{2 C \exp f_2(x, \theta)} + \cfrac{1}{2} \log C + \cfrac{1}{2} f_2(x, \theta) + \log \sqrt{2 \pi} \tag{19}

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

loss =  \cfrac{(y-f_1(x, \theta))^2}{C \exp f_2(x, \theta)} + f_2(x, \theta) \tag{20}

Мы снова видим среднеквадратичное отклонение, но теперь к нему добавляется дополнительный множитель и дополнительное слагаемое. Высокое значение предсказанной неуверенности f_2 повышает значение функции потерь за счет второго слагаемого, но при этом уменьшает вклад первого слагаемого, которое штрафует ошибку предсказания (y-f_1)^2. Это дает модели некий компромисс: модель может предсказывать на каких-то примерах высокую неуверенность, уменьшая штраф от неточного предсказания самого значения y на них.

Проверим этот метод на практике, обучив модель на табличном датасете California Housing, в котором нужно предсказывать цену недвижимости в разных районах Калифорнии, имея 8 исходных признаков. В данном случае хорошо работает значение C=0.2.

Код
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from scipy.stats import pearsonr
import tensorflow as tf, numpy as np, matplotlib.pyplot as plt
from tensorflow.keras import Sequential, layers, optimizers, callbacks
from tensorflow.keras.optimizers.schedules import InverseTimeDecay
from tqdm.notebook import tqdm

def custom_loss(y_true, y_pred, C=0.2):
  y_true = tf.squeeze(y_true)
  mu, log_sigma = y_pred[:, 0], y_pred[:, 1]
  loss = (y_true - mu)**2 / tf.math.exp(log_sigma) / C + log_sigma
  return tf.math.reduce_mean(loss)

def custom_mse(y_true, y_pred):
  y_true = tf.squeeze(y_true)
  mu, log_sigma = y_pred[:, 0], y_pred[:, 1]
  metrics = (y_true - mu)**2
  return tf.math.reduce_mean(metrics)

# downloading and preprocessing dataset
X, y = fetch_california_housing(return_X_y=True)
y = np.log(y)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=5)

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
y_train = scaler.fit_transform(y_train[:, None])[:, 0]
y_test = scaler.transform(y_test[:, None])[:, 0]

#training models

def train_simple_model(epochs=50, dropout=0.5):
  model = Sequential([
      layers.Dense(1000, 'relu'),
      layers.Dropout(dropout),
      layers.Dense(1)
  ])
  model.compile(loss='mse', optimizer=
                optimizers.Adam(InverseTimeDecay(1e-3, 1000, 2)))
  model.fit(X_train, y_train, validation_data=(X_test, y_test),
            batch_size=128, epochs=epochs, verbose=0)
  return model, model.history.history['val_loss']

n_tests = 10
simple = [train_simple_model() for i in tqdm(range(n_tests))]
uncertainty = [train_model_with_uncertainty() for i in tqdm(range(n_tests))]

fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(10, 3))

from matplotlib.lines import Line2D
for model, history in simple:
  ax1.plot(history, color='C0', label='simple models with MSE loss')
for model, history in uncertainty:
  ax1.plot(history, color='C1', label='models with uncertainty')
ax1.set_ylim(0.2, 0.4)
ax1.legend([Line2D([0], [0], color='C0', lw=4),
                Line2D([0], [0], color='C1', lw=4)],
           ['simple models with MSE loss', 'models with uncertainty'])
ax1.set_xlabel('Epoch')
ax1.set_ylabel('Validation MSE')

model, _ = uncertainty[0]
preds_test = model.predict(X_test)
ax2.hexbin(np.abs(preds_test[:, 0] - y_test),
           preds_test[:, 1], bins='log', extent=(0, 3, -3, 3), gridsize=50)
ax2.set_xlabel('Absolute error')
ax2.set_ylabel('Predicted log sigma')
corr = pearsonr(np.abs(preds_test[:, 0] - y_test), preds_test[:, 1])[0]
ax2.set_title(f'Correlation: {corr:g}')

plt.show()

Результаты эксперимента. Мы обучили 10 моделей с простой функцией потерь MSE и еще 10 моделей с оценкой неуверенности. На рисунке слева - динамика изменения MSE на валидации для всех моделей, в зависимости от эпохи обучения. Видно, что наши модели превысили по качеству обычные модели, обучаемые с функцией потерь MSE. Возможно это связано с тем, что снижается переобучение модели на выбросах, так как в областях с частыми выбросами предсказывается высокое значение неуверенности, что смягчает ошибку предсказания мат. ожидания в этих областях, уменьшая множитель при первом слагаемом.

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

Описанный в этом разделе подход давно применяется в разных задачах (см. например Nix and Weigend, 1994). Недавно аналогичная функция потерь была реализована в библиотеке градиентного бустинга CatBoost под названием RMSEWithUncertainty. Посмотрим как она работает на практике, используя CatBoost версии 1.1.1:

Код
from catboost import CatBoostRegressor
model = CatBoostRegressor(depth=3, iterations=1000,
                          loss_function='RMSEWithUncertainty')
model.fit(X_train, y_train, verbose=0)
staged_preds = list(model.staged_predict(X_test, eval_period=1))

fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(10, 3))

from sklearn.metrics import mean_squared_error
metrics = [mean_squared_error(y_test, p[:, 0]) for p in staged_preds]
ax1.plot(metrics, label='catboost')
ax1.set_xlabel('N trees')
ax1.set_ylabel('validation MSE')
ax1.legend()

last_preds = staged_preds[-1]
ax2.hexbin(np.abs(last_preds[:, 0] - y_test),
           last_preds[:, 1], bins='log', extent=(0, 3, -3, 3), gridsize=50)
ax2.set_xlabel('Absolute error')
ax2.set_ylabel('Predicted log sigma')
corr = pearsonr(np.abs(last_preds[:, 0] - y_test), last_preds[:, 1])[0]
ax2.set_title(f'Correlation: {corr:g}')

plt.show()

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

model.plot_tree(0)

Каждое звено дерева содержит разделяющее правило, в котором проверяется, что значение указанного признака больше указанного порога. Каждый лист дерева выдает 2 числа: само значение y и уверенность. Оба эти числа суммируются по всем деревьям.

5.2. Регрессия с константной оценкой дисперсии*

Вспомним вероятностную модель регрессии, которую мы рассматривали во второй части (2). В ней \sigma является константой. Для любого значения \sigma локальные и глобальные минимумы функции потерь одни и те же, и изменение \sigma эквивалентно масштабированию функции потерь, что равносильно изменению learning rate. Отсюда получается, что какое бы \sigma мы не брали - ничего не изменится (поскольку learning rate выбирается совсем по другим соображениям). Но что если мы хотим знать реальное \sigma?

Для этого мы могли бы сделать \sigma обучаемым параметром, не зависящим от x. Заменим в формуле (28) выражение f_2(x, \theta) на обучаемый параметр s. Видно, что при стремлении s к -\infty или +\infty все выражение стремится к +\infty , поэтому функция потерь никогда не стремится к -\infty и для параметров (\theta, s) существует глобальный оптимум. Например, в нейронной сети мы можем сделать веса, идущие к нейрону, который выдает уверенность, нулевыми и необучаемыми. Тогда уверенность будет равна bias'у этого нейрона, который является обучаемым параметром.

Имеет ли это смысл? Возможно в каких-то случаях да. Но если дать модели выучивать параметр s, то он будет рассчитываться на обучающей выборке и поэтому может быть переобученным (если модель хорошо запомнила все обучающие примеры, то и s будет низким). Кроме того, при обучении нейронных сетей часто применяют dropout, и значение s будет рассчитано в условиях наличия dropout (хотя на инференсе он обычно не используется). Поэтому обычно нам гораздо удобнее оценивать дисперсию предсказаний на валидационной или тестовой выборке.

Существует еще один похожий подход, называемый inductive conformal prediction (Vovk et al., 2005, Sousa, 2022). В нем на отдельной выборке рассчитывается вероятность модели допустить ошибку выше заданного порога, что близко по смыслу к оценке дисперсии.


Конец части 1. Ссылка на вторую часть. Спасибо@ivankomarovи @yorkoза ценные комментарии, которые были учтены при подготовке статьи.

Теги:
Хабы:
Всего голосов 23: ↑23 и ↓0+23
Комментарии0

Публикации

Информация

Сайт
ods.ai
Дата регистрации
Дата основания
Численность
5 001–10 000 человек
Местоположение
Россия

Истории