3. Теория информации и ML. Прогноз
В этой 3-й части мы поговорим про Machine Learning, а именно, про задачу прогноза, в контексте теории информации.
Понятие Mutual Information (MI) связано с задачей прогноза. Собственно, задачу прогноза можно рассматривать как задачу извлечения информации о сигнале из факторов. Какая-то часть информации о сигнале содержится в факторах. И если вы напишите функцию, которая по факторам вычисляет число близкое к сигналу, то это и будет демонстрацией того, что вы смогли извлечь MI между сигналом и факторами.
Что такое Machine Learning?
Чтобы двигаться дальше, нам нужны базовые понятия из ML, такие как: факторы, target, Loss-функция, обучающий и тестовый пулы, overfitting и underfitting и их варианты, регуляризация, разные виды утечки данных.
Факторы (features) – это то, что вам даётся на вход, а сигнал (target) – это то, что нужно спрогнозировать, используя факторы. Например, вам нужно спрогнозировать температуру завтра в 12:00 в определённом городе – это target, а дано вам множество чисел про сегодня и предыдущие дни: температура, давление, влажность, направление и сила ветра в этом и соседних городах в разное время дня – это факторы.
Обучающие Данные – это множество примеров (aka сэмплов) с известными правильными ответами, то есть строчки в таблице, в которой есть и поля с факторами features=(f1, f2, ..., fn), и поле target. Данные принято делить на две части – обучающий пул (train set) и тестовый пул (test set). Выглядит это примерно так.
Обучающий пул:
id | f1 | f2 | ... | target | predict |
1 | 1.234 | 3.678 | ... | 1.23 | ? |
2 | 2.345 | 6.123 | ... | 2.34 | ? |
... | ... | ... | ... | ... | ... |
18987 | 1.432 | 3.444 | .... | 5.67 | ? |
Тестовый пул:
id | f1 | f2 | ... | target | predict |
18988 | 6.321 | 6.545 | ... | 4.987 | ? |
18989 | 4.123 | 2.348 | ... | 3.765 | ? |
... | ... | ... | ... | .... | ... |
30756 | 2.678 | 3.187 | ... | 2.593 | ? |
В общих чертах задачу прогноза можно сформулировать в духе соревнования на kaggle.com:
Задача прогноза (задача ML). Вам дан обучающий пул. Реализуйте в виде кода функцию
У величины
средний квадрат невязки, что также называют среднеквадратической ошибкой или mse (mean square error);
средний модуль невязки, что также называют L1-ошибкой.
На практике задача ML более общая и высокоуровневая. А именно, нужно разработать в меру универсальную ML-модель – способ получения функций
Процесс получения функции
Линейная модель, в которой
, и процесс обучения сводится к подбору параметров , что делается обычно методом градиентного спуска. Gradient boosted trees (GBT) – модель, в которой функция выглядит как сумма нескольких слагаемых (сотен, тысяч), где каждое слагаемое – это решающее дерево, в узлах которого находятся условия на факторы, а в листьях – конкретные числа; каждое слагаемое можно представлять как какую-то систему вложенных if-конструкций с условиями на значения факторов, где в конечных узлах находятся просто числа. GBT – это не только про то, что решение есть сумма деревьев, но и вполне конкретный алгоритм получения этих слагаемых. Для обучения GBT есть много готовых программ: CatBoost, xgboost. См. статью на хабре.
Neural Networks – в простейшем базовом варианте это модель вида
, где – матрицы, размеры которых определяет разработчик модели, факторы представлены в виде вектора , оператор соответствует умножению вектора на матрицу с последующим обнулением всех отрицательных чисел в результирующем векторе. Операторы выполняются в порядке справа налево – это важно в случае наличия такого обнуления. Матрицы называются слоями нейросети, а количество матриц – глубиной нейросети. Вместо обнуления отрицательных можно брать произвольные другие нелинейные преобразования. Если бы не было нелинейных преобразований после умножения вектора на матрицу, все матрицы можно было бы "схлопнуть" в одну и пространство возможных функций не отличалось бы того, что задаётся линейной моделью. Я описал линейную архитектуру нейросети, но возможны и более сложные, например, . Кроме самых разных поэлементных нелинейных преобразования и умножения на матрицу в нейросетях могут использоваться операторы скалярного произведения векторов и оператор поэлементного максимума для двух векторов одной размерности, объединения векторов в один более длинный и др. Можно думать об общей архитектуре для функции
, когда на вход поступает вектор, а дальше с помощью операторов , нелинейных функций и весов конструируется ответ. В этом смысле нейросети могут представлять самой функции довольно общего вида. По факту, архитектуру функции называют нейросетью тогда, когда в ней присутствует что-то похожее на цепочку вида . А так, мы по сути имеем задачу регрессии – подобрать параметры (веса) в параметрически заданной функции, чтобы минимизировать ошибку. Есть множество методов обучения нейросетей, они в своем большинстве итерационные, и за шаг изменения весов отвечает модуль, который программисты называют оптимизатором, см. например AdamOptimizer.
Терминология ML
В регрессионном анализе появилось много важных терминов, которые позволяют лучше понять содержание задачи прогноза и не делать типичных ошибок. Эти термины практически без изменений перекочевали в ML. Здесь я изложу базовые понятия, стараясь отмечать связи с теорией информации.
Overfitting
Overfitting (переобучение) – это когда выбранная вами модель сложнее, чем реальность, стоящая за target И/ИЛИ данных слишком мало, чтобы позволить себе обучать такую сложную модель. Есть две основные причины overfitting:
too complex model: Устройство модели сильно сложнее, чем реальность или в своей сложности ей не соответствует. Проще это визуализировать на примере однофакторной модели.
Пусть в обучающем пуле 11 точека модель – суть многочлен 10-й степени. Можно подобрать такие коэффициенты в многочлене, что он "заглянет" в каждую точку обучающего пула, но при этом не будет обладать хорошим качеством прогноза: Голубая линия – многочлен 10 степени, который смог в точности воспроизвести обучающий пул из 11 точек. Но правильная модель скорее линейная (чёрная линия), а отклонения от неё – это или шум, или что-то, объясняемое факторами, которых у нас нет Многочлен 10-й степени – это очевидный и часто используемый пример переобучения. Многочлены невысокой степени, но от многих переменных тоже могут давать overfitting. Например, вы можете подбирать модель predict = многочлен степени 3 от 100 факторов (кстати, сколько в нём коэффициентов?), в то время как реальность соответствует predict = многочлен степени 2 от факторов + случайный шум. При этом, если у вас данных довольно много, то классические методы регрессии могут дать приемлемый результат, и коэффициенты при членах степени 3 будут очень маленькими. Эти члены степени 3 будут вносить маленький вклад в ответ при прогнозе для типичных значений факторов (как в случае с интерполяцией). Но в зоне крайних значений факторов, где прогноз уже скорее экстраполяция, а не интерполяция, высокие степени будут вносить заметный вклад и портить качество прогноза. Ну и, конечно, когда данных мало, шум может начать восприниматься за чистую монету, и прогноз будет стараться заглянуть в каждую точку обучающего пула.
insufficient train data: Модель может более менее соответствовать реальности, но при этом вы можете не иметь достаточное количество обучающих данных. Приведём опять пример с многочленом: пусть и реальность и ваша модель есть многочлен 3-й степени от двух факторов. Этот многочлен задаётся 10 коэффициентами, то есть пространство возможных прогнозаторов у вас 10-мерное. Если в обучающем пуле у вас 9 примеров, то, записав равенство "многочлен(featuresi) = targeti" для каждого примера, вы получите 9 уравнений на эти коэффициенты, и их недостаточно, чтобы однозначно определить 10 коэффициентов. В пространстве возможных прогнозаторов вы получите прямую и каждая точка на этой прямой есть прогнозатор, который идеально повторяет то, что у вас в обучающем пуле. Вы можете случайно выбирать один из них, и это с высокой вероятностью будет плохой прогнозатор.
Важное замечание про обучение многопараметрических моделей. Пример выше может показаться искусственным, но правда в том, что современные нейросетевые модели могут содержать миллионы параметров или даже больше. Например, языковая модель GPT3 содержит 175 млрд. параметров.
Если в вашей модели N = 175 млрд. параметров, а размер обучающего пула M = 1 млрд, то в общем случае вы имеете бесконечное множество моделей идеально подходящих под обучающий лог, и это множество – суть многообразие размерности N - M = 174 млрд.
В случае с глубокими многопараметрическими нейросетями эффект "insufficient train data" проявляется в полный рост, если действовать неправильно. А именно, если искать строгий минимум ошибки на обучающем пуле, то получается плохой, overfitted, прогнозатор. Поэтому на практике так не делают. Выработаны интересные техники и интуиция про то, как обучать модель с N параметрами на M примерах, где M заметно меньше N. Используются регуляризационные добавки к Loss-функции (L2, L1), Stochastic Gradient Descent, Dropout Layers, Early Stopping, prunning и другие техники.
ВАЖНО: Знание этих техник и умение их применять во многом и определяет экспертизу в ML.
Underfitting
Underfitting – это когда модель прогноза проще, чем реальность. Также как и в случае с overfitting здесь есть две основных причины:
too simplistic model: выбрана слишком простая модель, сильно упрощающая то, что в реальности стоит за target. Такие случаи по-прежнему встречаются в продакшене, и обычно это линейные модели. Линейные модели привлекают своей простотой и наличием математических теорем, обосновывающих и описывающих их предиктивные способности. Но можно с уверенностью сказать, что если вы решите с помощью линейных моделей прогнозировать курс валют, погоду, вероятность покупки или вероятность возврата кредита, то вы получите слабую модель – under-fitted weak model.
too early stopping: обычно процессы обучения моделей итеративны, и если проделать слишком мало итераций, то получается недообученная модель;
Data leakage
Data leakage – это когда вы во время обучения использовали то, что есть в тестовом пуле или данные, которые недоступны или отличаются от тех, что будут доступны на практике при применении модели в жизни. Модели, которые сумеют воспользоваться этой утечкой, будут иметь неоправданно низкую ошибку на тестовом пуле и выбраны для использования в жизни. Есть несколько видов data leakage:
утечка таргета в факторы: Если, в задаче с прогнозом температуры вы добавите фактор – средняя температура за K дней, и в эти K дней при обучении случайно попадёт в том числе и целевой день, на который нужно сделать прогноз, то вы получите испорченный или нерабочий прогнозатор. Могут быть более сложные утечки через факторы. В случае прогноза какого-то будущего события вы должны многократно убедиться, что при вычислении факторов для обучающего пула не используются данные, которые получены во время этого события или после.
простая утечка тестового пула: Иногда всё просто – в обучающий пул попадают строчки из тестового пула.
утечка через подбор гиперпараметров: Правило, что для обучения разрешено использовать только обучающий пул, обманчиво просто. Здесь можно легко обмануться. Типичный пример неявной утечки – это подбор гиперапараметров при обучении. У всякого алгоритма обучения есть гиперпараметры. Например, у градиентного спуска есть параметр "скорость обучения" и параметр, задающий критерий останова. Ещё вы к Loss-функции можете добавить регуляризационные компоненты
и , и вот вам ещё два гиперапараметра и . Приставка "гипер" используется, чтобы отличать внутренние параметры модели (веса), от параметров влияющих на процесс обучения.
Итак, предположим, вы решили в цикле проверять разные гиперпараметры обучения и выбрать те гиперпараметры, на которых достигается минимум ошибки на тестовом пуле. Надо понимать, что здесь происходит утечка тестового пула в модель. "Засаду", которая здесь скрывается, легко понять, именно с точки зрения теории информации. Когда вы задаете вопрос, чему равна ошибка на тестовом пуле, вы получаете информацию о тестовом пуле. А когда вы, на основании этой информации, принимаете какие-то решение, влияющие в конечном итоге на веса вашей модели, то значит биты этой информации оказываются в весах модели.
Ещё можно проиллюстрировать концепцию утечки тестового пула доведя до абсурда понятие гиперапараметров. Ведь разница между весами (параметрами) и гиперпараметрами (параметрами процесса обучения) чисто формальная. Давайте веса модели, например коэффициенты многочлена 10 степени все назовоём гиперапараметрами, а процесса обучения у нас не будет (множество внутренних весов у нас будет пустым). И давайте запустим безумный цикл по перебору всех возможных комбинаций значений гиперпараметров (каждый параметр будем перебирать от -1000 до +1000 с шагом) и вычислению ошибки на тестовом пуле. Понятно, что через условные миллиард лет мы найдём такую комбинацию параметров, которая даёт очень маленькую ошибку на тестовом пуле и картинку выше мы сможем запостить снова, но уже с другой подписью: Голубая линия – многочлен 10 степени, который смог в точности воспроизвести тестовый пул из 11 точек. Этот прогнозатор будет хорошо себя показывать на тестовом пуле, а в жизни – плохо.
На практике используются модели с тысячами или миллионами весов и описанные эффекты проявляются на пулах больших размеров, особенно при наличии утечки данных из будущего (см. ниже).
Надо понимать, что утечка теста через подбор гиперпараметров так или иначе всегда происходит. Даже если вы сделали специальный валидационный пул для подбора гиперпараметров, а тестовый пул никак не использовали для подбора гиперпараметров, всё равно наступает момент вычисления метрики качества на тестовом пуле. А потом наступает момент, когда у вас есть несколько моделей, измеренных на тестовом пуле, и вы выбираете лучшую модель по метрике на тесте. Этот момент выбора также можно назвать утечкой, но не всегда нужно бояться этой утечки.
Важное замечание про то, когда нужно боятся этой утечки. Если эффективная сложность модели (см. определение ниже) у вас сотни или больше бит, то можно не боятся утечки такого сорта и не выделять специальный пул для подбора гиперпараметров – логарифм числа выстрелов для подбора гиперпараметров должен быть заметно меньше сложности модели.
утечка данных из будущего: например, когда вы обучаете прогнозаторы вероятности клика на рекламное объявление, то в идеале обучающий пул должен содержать данные, доступные исключительно на даты меньше даты X, где X – минимальная дата событий в тестовом пуле. Иначе возможны хитрые утечки типа следующей. Пусть мы взяли множества событий показы рекламы размеченной target = 1 для кликнутых событий показа, и target = 0 для некликнутой. И пусть мы разбили множество событий на тестовый и обучающий пул не по границе даты X, а случайным образом, например, в пропорции 50:50. Известно, что пользователи любят кликать сразу на несколько объявлений одной тематики подряд в течение нескольких минут, отбирая нужный товар или услугу. И тогда такие серии нескольких кликов будут случайно делиться на две части – одна пойдёт в обучающий, другая – в тестовый пул. Можно искусственным образом сделать модель с утечкой: возьмём самую хорошую правильную модель без утечки и дополнительно запомним факты "пользователь U кликал на тематику T" из обучающего лога. Затем при использовании модели будем совсем ненамного повышать вероятность клика для случаев (U, T) из этого множества. Это улучшит модель с точки зрения ошибки на тестовом пуле, но ухудшит её с точки применения на практике на новых данных. Мы описали искусственную модель, но несложно представить естественный механизм такого запоминания пар (U, T) и завышения вероятности для них в нейросетях и других популярных алгоритмах ML. Наличие таких утечек из будущего усугубляет проблему утечки через гиперпараметры. На таком тестовом пуле с утечкой будут выигрывать модели перекрученные в сторону запоминания данных. Более общим образом эту проблему можно описать так: модель может переобучиться под test set, если MI между примером в train set и примером в test set больше, чем между примером в train set и реальным примером при использовании модели в жизни.
Задачи
Задача 3.1. Пусть реальность такова, что
Ответ
Есть такой способ получения ответа "от физиков". Пусть размер обучающего лога равен
Где константа
Ошибка самого значения
Это следствие того, что при сложении двух независимых случайных величин
Таким образом, в этой задаче прогноза и многих практических задачах есть неустранимая ошибка
(1) то, какую ошибку вы получите для случая очень большого обучающего пула (при
(2) а также размер пула, необходимый для достижения какой-либо заданной ошибки внутренних параметров, квадратично зависит от этой неустранимой ошибки:
Неустранимая ошибка
Тут у кого-то может возникнуть не совсем верная интуиция про то, что важно уменьшить эту ошибку, и что добавление каких-либо факторов, в которых может быть скрыта новая информация про сигнал, – крайне полезное мероприятие. Иногда так и есть. Но на самом деле, когда у вас больше факторов, у вас больше и внутренних весов, и вам нужно больше информации, чтобы узнать первые значащие цифры весов. Увеличение сложности модели при добавлении новых факторов порой обнуляет полезный эффект от новой информации, если не увеличивать размер обучающего лога (увеличивать число строчек в обучающем пуле), особенно в случае, когда новые факторы менее информативны, чем существующие.
К тому же факторы часто зависимы и сами по себе содержат в себе шумную компоненту. Контроль пользы от новых факторов и отбор факторов (feature selection) – это отдельная сложная тема для разговора.
Задача 3.2. Пусть реальность такова, что target есть многочлен 2-й степени от 10 факторов, при этом коэффициенты в многочлене – это числа разово сэмплированные из
А если модель есть многочлен 3-й степени?
Задача 3.3. Постройте модель пользователей, которые в каждый момент времени склонны больше кликать на объявления какой-то одной тематики, заинтересовавшей их в данный момент, и убедитесь, что деление пула на обучающий и тестовый пул не по времени, а случайно, приводит к утечке данных из будущего.
Можно взять, например, такую модель. У каждого пользователя есть 10 любимых тематик, мы их знаем и храним в профиле пользователя. Пользовательская активность разделена на сессии, каждая сессия длится 5 минут, и во время сессии каждый пользователь видит ровно 10 объявлений по одной из его 10 тематик, тематика из любимых выбирается случайно. В каждую сессию пользователь интересуется одной из этих 10 тематик особенно сильно, и нет никаких факторов, позволяющих угадать, какой именно. Вероятность клика для такой "горячей" тематики в 2 раза больше, чем обычно. Для каждого пользователя по истории его кликов мы хорошо знаем вероятности клика для его 10 тематик, и пусть, если их упорядочить по интересности для конкретного пользователя, вектор этих вероятностей равен {0.10, 0.11, 0.12, ..., 0.19} .
Идентификатор пользователя и номер категории и есть доступные нам факторы. Насколько можно увеличить правдоподобие прогноза вероятности на тестовом пуле, если предположить, что каждая сессия разделилась ровно пополам между тестовым и обучающим пулами (5 событий пошли в один пул и 5 – во второй), и статистику по 5 событиям из обучающего пула можно использовать для прогноза вероятности клика на 5 других?
Предлагается экспериментально получить overfitting из-за утечки данных из будущего , используя какую-либо программу для ML, например, CatBoost.
Определение 3.1. Имплементационная
Эффективная сложность модели – это минимальная имплементационная сложность функции среди всех возможных функций, которые дают такое же качество прогноза такое, что и данная модель.
Задача 3.4. Какая средняя
от n факторов, в которой веса сэмплированы из распределения
Ответ
При фиксированных факторах погрешность функции определяется погрешностями весов по формуле
В среднем по всем возможным значениям факторов получаем
Таким образом, согласно ответу в задаче 1.9, в среднем нужно будет передать
Задача 3.5. Функция t(id) задаётся таблицей как функция от одного фактора – id категории. Есть N = 1 млн. категорий, их доли в данных различны, и можно считать, что их доли получены сэмплированием 1 млн. чисел из экспоненциального распределения с последующей нормализацией, чтобы сумма долей была 1 (такое сэмплирование соответствует разовому сэмплированию из распределения Дирихле с параметрами {1,1,...,1} – 1 млн. единичек). Значения функции t для этих категорий сэмплированы из бета-распределения
Какова средняя
Ответ
Во-первых, давайте опишем поведение этой функции в районе очень маленьких
Для больших
Оба подхода дают ответ вида
Задача 3.6. Пусть в предыдущей задаче смысл функции – вероятность клика на рекламное объявление. Перенумеруем все категории в порядке убывания их истинной доли и обозначим порядковый номер как order_id, а исходный случайный идентификатор как id. Предлагается рассмотреть разные варианты ML с огрублением номера (идентификатора) категории до натурального числа от 1 до 1000. Это ограничение может быть связано, например, с тем, что вы хотите хранить статистику по историческим данным, и у вас есть возможность хранить только 1000 пар (показы, клики). Варианты огрубления идентификатора категории:
(a) огрубленный идентификатор равный id' = id // 1000 (целочисленное деление на 1000);
(b) огрубленный идентификатор равный id' = order_id для топовых 999 категорий по доле, а всем остальным назначить идентификатор 1000;
(с) какой-то другой способ огрубления id' = G(id), где G – детерминированная функция, которую вы можете сконструировать на базе статистики кликов на 100 млн показов, где каждый показ имеет какую-то категорию с вероятностью ровной доле категорий, а клик происходит согласно вероятности клика для этой категории.
Оцените значение ошибки error в этих трёх вариантах, где
Задача 3.7. Пусть реальность такова, что
где веса
Сгенерируйте три пула №1, №2, №3 c размерами 50, 50, 100000 и узнайте как лучше действовать – (а), (б) или (в):
(а) соединить два пула в один и на основании объединённого пула найти наилучшие веса, минимизирующие
(б) для различных пар
(в) соединить два пула в один и на основании объединённого пула найти наилучшие веса, минимизирующие
Метод тем лучше, чем меньше ошибка на пуле №3, который соответствует применению модели в реальности. Стабилен ли победитель, когда вы генерируете новые пулы? Нарисуйте таблицу 3x3 mse ошибок на трёх пулах в этих трёх методах.
Как падает ошибка на пуле №3 с ростом размеров пулов №1 и №2?
Задача 3.8. Пусть реальность такова, что
– это шум, случайное число из , . факторы
– независимые случайные величины с равномерным распределением на отрезке , . – это линейная функция с коэффициентами из . – это квадратичная однородная функция, в которой большая часть коэффициентов равна нулю, кроме случайных , которые были сгенерированы из из . – это кубическая однородная функция, в которой большая часть коэффициентов равна нулю, кроме случайных которые были сгенерированы из из .
Какая будет mse ошибка прогноза в среднем на достаточно больших тестовых и обучающих пулах по различным вариантам функции
(а0)
с истинными значениями коэффициентов. (б0)
с истинными значениями коэффициентов. (в0)
с истинными значениями коэффициентов. (а1)
с обучением (то есть с коэффициентами, полученными регрессией). (б1)
с обучением, без знания, какие коэффициенты равны 0. (в1)
с обучением, без знания, какие коэффициенты равны 0. (в2)
с обучением и знанием, какие именно коэффициенты равны 0. (г1)
нейросеть глубины d = 5, размер внутренних слоёв h=5 (внутренние матрицы имеют размер h x h).
Достаточно большой обучающий пул – это такой пул, удвоение которого не даёт заметного уменьшения ошибки на тесте.
Достаточно большой тестовый пул – это такой пул, конечность размера которого не вносит ошибки, сравнимой с ошибкой самой модели. То есть достаточно большой тестовый пул не позволит вам критично ошибиться в ранжировании моделей. Разрешающая способность тестового пула – это разница в качествах модели, которую тестовый пул позволяет с уверенностью констатировать. В нашей задаче нужно правильно ранжировать перечисленные 6 моделей.
Пронаблюдайте явление переобучения в этих моделях (кроме первых двух), уменьшив размер обучающего пула до некоторого значения. Для каждой модели это будет свой размер. Попробуйте избавится от явления переобучения
1) добавляя к Loss-функции регуляризационные члены
2) используя early stopping;
3) используя SGD;
4) меняя архитектуру нейросети;
5) добавляя Dropout;
6) комбинацию перечисленных методов.
Интересно также на этой задаче изучить как растёт степень переобучения и падает качество модели с ростом количества (лишних) параметров. В модели (в1) для начала можно взять только те коэффициенты, которые на самом деле не равны нулю. И потом можно проверить несколько вариантов с добавлением в модель какого-то количества случайно выбранных лишних коэффициентов. Нарисуйте график роста ошибки модели от логарифма числа коэффициентов в модели. Нарисуйте график изменения ошибки нейросетевой модели (г1) как функцию от числа внутренних слоёв и размера слоёв.
Задача 3.9. Пусть реальность такова, что
где
веса
разово сэмплированы из ; – это шум, случайное число из , . величины
– независимые случайные величины с нормальным распределением .
Как зависит ошибка определения весов
Ответ
В первом приближении ответ равен
И это хорошее приближение для случая
При n = 0 наилучшая оценка весов равна 0, и ошибка этой оценки равна 1, и она медленно убывает при росте n до числа m. Затем ошибка падает заметно быстрее и с ростом n приближается к асимптоте (1). С помощью численных экспериментов можно получить такой график:
Если у кого-то есть хороший ответ про аналитическое приближение в окрестности n ~ m, пишите в личку.
Задача 3.10. Пусть реальность такова, что
где
веса
разово сэмплированы из ; – это шум, случайное число из , . величины
– независимые случайные величины с нормальным распределением ; вам даны факторы с шумом:
, где случайный шум в каждом примере сэмплируется из распределения (это записывается как где размеры шумов известны и равны .
Как будет выглядеть наилучший прогноз, если вам известны точные значения весов
Как лучше всего реализовать обучение в этой задаче (когда веса неизвестны и их надо "обучить")?
Ответ
Рассмотрим частную задачу про добавление нового фактора
Можно ли уменьшить ошибку mse, взяв новый прогноз
Текущая ошибка равна дисперсии
Давайте построим последовательность улучшений прогноза
Числа
Потом, если мы возьмём первый фактор, ошибка будет равна
Логично брать новый фактор
В итоге ошибка конечного прогноза равна
Итак в случае линейного прогноза и известных весов
Пусть у нас есть два несмещённых прогноза
Тогда, если бы они были абсолютно независимыми, то из них можно было бы сконструировать новый более точный прогноз о формуле
И погрешность этого прогноза была бы равна
То есть
Почему это верно для независимых прогнозов, предлагается разобраться самостоятельно. Это случай, когда, например, две независимые группы исследователей выдают свои оценки массы бозона Хиггса с погрешностями и нужно их скомбинировать.
В нашем случае оценки зависимы, в ошибках
есть общая часть
где
Итого:
И ошибка у такого прогноза будет
что меньше погрешностей
Итоговая формула наилучшего линейного прогноза выглядит так
А ошибка этого прогноза равна
Итак, при известных весах все факторы пригодятся. Но когда у нас веса неизвестны и недостаточно большой обучающий пул, приходится некоторые факторы откидывать.
Веса можно оценить по формуле
Посмотрим, чему равно это выражение в пределе, когда обучающий лог большой и avg можно заменить на мат. ожидание. Если все факторы изначально отнормированы так, чтобы их среднее было равно нулю, то
А средний квадрат фактора равен
Таким образом выражение
Если мы не берём в прогноз слагаемое
Здесь мы просто
вынесли за скобки
разделили выражение в скобках на две части, которые являются независимыми случайными величинами со средним равным 0.
Если это выражение больше
Таким образом, если относительная погрешность
Из этого ответа можно вывести следующую интуитивную идею – если при градиентном спуске (обычном или стохастическом) во время последних итераций какой-то вес в модели менял знак, то лучше его выставить в 0.
Квадратичная Loss-функция и Mutual Information
Обычно задача прогноза формулируется как задача минимизации ошибки:
ML-task №3.1: По данному обучающему пулу обучите модель
Но можно попробовать сформулировать задачу прогноза как задачу максимизации MI.
ML-task №3.2: По данному обучающему пулу обучите модель
значение predict имеет максимально возможное значение взаимной информации с
то есть ; является несмещённым прогнозом , а именно, мат. ожидание невязки равно 0 при условии для любого .
Это короткая, но не совсем правильная формулировка, требующая ряд уточнений. А именно, уточнения требуют следующие моменты:
В каком смысле пара
может интерпретироваться как пара зависимых случайных величин? Требование несмещённости выглядит недостижимым, если множество данных, на котором мы обучаемся и тестируемся, конечно и фиксированно.
Эти моменты, в принципе, решаются просто. При тестировании мы как бы сэмплируем пример из потенциально бесконечного пула и получаем пару случайных величин
Подробнее
Детерминированная функция
Требование несмещённости следует воспринимать как несмещённость в среднем при рассмотрении обучающего и тестового пулов как случайных величин. То есть конкретный конечный обучающий пул однозначно даст модель со смещённым прогнозом – среднее значение разницы
Но мне требование несмещённости потребовалось, чтобы переформулировать задачу прогноза в терминах максимизации MI.
Итак, мы будем позволять себе воспринимать тестовый пул как источник случайных примеров и использовать терминологию теории вероятности.
Определение 3.2: Loss-функцию равную мат. ожиданию квадратичной ошибки
Утверждение 3.1: Пусть ваша модель в задаче ML-task №3.2.2 или ML-task №3.2.1 такова, что невязка
Является нормальной величиной с нулевым средним (то есть прогноз не смещён) при любом фиксированное значении
. Имеет дисперсию, которая не зависит от
.
Тогда задачи ML-task №3.1 и ML-task №3.2 эквивалентны для Loss=mse, то есть задача "maximize MI" даёт тот же ответ, что и задача "minimize mse-ошибку".
Конечно, описанные в утверждении свойства редко встречаются на практике, но тем не менее, этот факт интересен.
Во-первых, эти свойства достижимы тогда, когда вектор из
В этом случае
где
Надо понимать, что хотя чистый и не зависящий от
Точнее так — если колокол распределения
А сейчас попробуем доказать утверждение про эквивалентность задач "maximize MI" и "minimize L2" для случая, описанного в утверждении 3.1.
Введём короткие обозначения t = target, p = predict.
Доказательство основано на том, что мы просто записываем значение
Величина
Выражение
Если
Максимизация этого выражения равносильна минимизации mse. Конец доказательства.
Для большего понимания распишем более подробно выражение
Интегрирование
снова соответствует просто усреднению по пулу, а выражение
ML-task №3.3: По данному обучающему пулу обучите модель
В этой задаче имеется в виду наивное кодирование чисел, когда записываются все значащие цифры. Например, пусть фиксирована точность
В этой формулировке мы как бы невольны назначать свою Loss-функцию. Некоторые склонны рассматривать это как критерий правильного выбора Loss-функции: если вы минимизируйте mse, то хорошо, когда
Видимо, при определённых условиях, верны рассуждения и в другую сторону. Если у вас есть идеальное решение задачи ML-task №3.3, то изучив распределение невязки для её решения, вы узнаёте какую Loss-функцию нужно использовать, чтобы извлечь максимум информации о сигнале.
Log-Likelihood и Mutual Information
Пример задачи из жизни: Реализуйте детерминированную функцию
прогнозирующую вероятность p того, что пользователь кликнет на данное рекламное объявление.
Задачи такого типа, когда нужно спрогнозировать булеву величину (величину, принимающую значения "Да" или "Нет"), называются задачами бинарной классификации (Binary Classification Problems).
Для их решения обычно используется метод максимизации правдоподобия, а именно, предполагается, что прогноз
Обычно максимизируется не просто вероятность, а комбинация этой вероятности и регуляризационной компоненты. Никто не ограничивает разработчиков прогнозаторов в том, как именно должна выглядеть эта регуляризационная компонента. И вообще, алгоритм обучения может быть любым, важны лишь следующие два момента:
во время обучения алгоритм не "видит" данных из тестового пула;
прогнозаторы сравниваются по оценке вероятностей событий на тестовом пуле.
Вероятность видеть то, что мы видим в пуле, в применении к модели называется правдоподобием модели (model likelihood). То есть мы говорим 'вероятность события' и 'правдоподобие модели', но не говорим 'вероятность модели' или 'правдоподобие событий'.
Вот пример тестового пула из трёх строчек:
i | f1 | f1 | f1 | target | predict= | P(target=0) |
1 | ... | ... | ... | 0 | ||
2 | ... | ... | ... | 1 | ||
3 | ... | ... | ... | 0 | ||
Удобнее оперировать значением LogLikelihood:
Строчки с
В упрощённом виде задача бинарной классификации выглядит так:
ML-task №3.4: Дан обучающий лог. Найдите детерминированную функцию
Сформулируем аналогичную задачу в терминах максимизации MI.
ML-task №3.5: Найдите детерминированную функцию
Утверждение 3.2: Если ваша модель такова, что
То, что прогноз не смещён или, другими словами, не требует калибровки не является сложным требованием. В задачах классификации, если вы используете Gradient Boosted Trees или нейросети с правильными гиперпараметрами (скорость обучения, число итераций) прогноз получается несмещённым. А именно, если вы берёте события с
В задачах классификации строчки, у которых target = 1 мне привычно называть кликами (clicks), а строчки с target = 0 – некликами (notclicks). Клики + неклики дают множество всех событий, которые называются показами (impressions). Фактическое отношение кликов к показам называется CTR — Click Through Rate.
Чтобы доказать утверждение 3.2, давайте воспользуемся решением задачи:
Задача 3.10. Как по N измерениям двух случайных величин — дискретной величины
Можно думать про эту задачу так:
Для решения этой задачи удобно воспользоваться формулой
Значение
Значение
.
Давайте займёмся первым слагаемым и запишем его в виде суммы по классам:
Подставив это в выражение для MI, и поместив обе части в одну сумму по классам, получим итоговое выражение для MI:
В последнем равенстве мы заменили суммирование по классам на суммирование по строчкам лога, чтобы показать близость формулы с формулой LogLikelihood.
В случае, когда классы есть просто корзины прогноза, и прогноз не смещён, то есть средний прогноз в корзине совпадает с реальным
А если прогноз равен константе
Замена
B здесь мы видим, что итоговое выражение для MI есть просто нормированная разница двух выражений для LogLikelihood:
То есть
Кстати, величина
Итак, для несмещённого прогноза величина MI между прогнозом и сигналом равна удельному (нормированному на число строк) Log Likelihood Ratio вашего прогноза и наилучшего константного прогноза.
Оценка Mutual Information = Machine Learning
Два утверждения — 3.1 и 3.2 — говорят о том, что Mutual Information является метрикой качества, которая в некоторых допущениях соответствует двум метрикам в задачах прогноза — квадратичной ошибке в задаче прогноза вещественной величины с нормальным распределением и LogLikelihood в задаче бинарной классификации.
Сама величина Mutual Information не может использоваться как Loss-функция, потому что она не является метрикой на данных, то есть не представляется как сумма значений Loss-функции по элементам пула. Смысл "соответствия" можно пояснить так: практически все Loss-функции в конечном итоге занимаются максимизацией Mutual Information predict-а и target-а, но с разными дополнительными добавками.
Возможно, свет на это прольют следующие два утверждения (опять без доказательства):
Утверждение 3.3: Если у вас есть прогноз на факторах
Произвольное монотонное преобразование прогноза будем называть калибровкой прогноза.
Утверждение 3.4 (требует уточнения условий): Если вы нашли такое изменение весов (ака внутренних параметров) вашей модели, которое увеличивает
В этих утверждениях нельзя заменить MI на какую-то Loss-функцию. Например, если вы делаете изменение весов вашей модели, которое уменьшает
Задача 3.11: Докажите, что для случая, когда
Задача 3.12: Приведите пример модели и реального target, когда Loss-функции
Утверждение 3.5: Задача оценки
Это утверждение говорит, что истинное значение mi примерно равно supremum
ML-метод ::= ("структура модели", "метод получения весов модели"),
"метод получения весов модели" ::= ("алгоритм", "гиперпараметры алгоритма"),
а равенство тем точнее, чем больше обучающий пул.
Собственно та пара (ML-метод, Loss-функция), которая даст самое большое значение
Итак: Мы сформулировали две глубокие связи между задачами прогноза и MI:
Во-первых, максимизация MI в некотором смысле соответствует задаче минимизации какой-то Loss-функции
Во-вторых, "оценка MI" = "ML", а именно, задача оценки
эквивалентна задаче построения прогноза для какой-то Loss-функции. И собственно, ML-метод и Loss-функция, которые дают максимум и является наиболее правдоподобной моделью.