0
Обложка: 4 вопроса для проверки знаний по машинному обучению

4 вопроса для проверки знаний по машинному обучению

Недавно у Школы анализа данных Яндекса появился свой онлайн-учебник по ML, над каждой главой которого трудились преподаватели, выпускники, учёные и практики из индустрии. Он будет полезен начинающим ML-специалистам, разработчикам, аналитикам и исследователям и поможет разобраться в таких темах, как линейные модели и градиентный бустинг, функции потерь и оценка качества моделей. Учебник будет дополняться другими разделами машинного обучения и полезной для data science математики.

Руководитель Школы анализа данных в Москве Стас Федотов составил список вопросов, которые помогут проверить себя и узнать, какие темы по ML вам стоит подкачать прямо сейчас.

Станислав Федотов
Станислав Федотов

Руководитель Школы анализа данных в Москве

1. Чем метрика отличается от функции потерь?

Метрика — это то, что мы на самом деле хотим минимизировать или максимизировать. При этом метрики бывают очень разными. Есть продуктовые метрики (например, доход), которые можно косвенно оптимизировать с помощью машинного обучения. Впрочем, в курсах по ML чаще всего речь идёт об обычных офлайн-метриках, с помощью которых мы понимаем, хорошо ли решена задача.

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

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

Что изучить по теме: оценка качества моделей, функции потерь, метрики.

2. Что такое ансамбли моделей машинного обучения? Какие вы знаете стратегии построения ансамблей?

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

  • Бэггинг. Его идея в том, чтобы просто агрегировать предсказания, выдаваемые базовыми моделями (например, усреднять или брать самое популярное предсказание). Чтобы результат получился качественным, нужно, чтобы каждая модель была достаточно сильной (основной пример бэггинга — случайный лес — использует глубокие, переобученные решающие деревья).
  • Бустинг. Эта стратегия предполагает, что базовые модели строятся последовательно, и каждая следующая уточняет предсказание всех предыдущих. Обычно в качестве базовых берутся слабые модели, чаще всего деревья небольшой глубины.
  • Стекинг. Предлагается использовать предсказания базовых моделей в качестве новых признаков, а поверх них обучить какую-нибудь ещё модель. Стекать можно что угодно, хоть нейросети, хоть детерминированные пайплайны извлечения фичей. Стекинг вполне встречается и в продакшене, хотя часто от него стараются избавляться в пользу end-to-end обучения, то есть одной большой модели, которая обучается целиком, а не поэтапно.

Что изучить по теме: ансамбли.

3. Случайный лес основан на принципе бэггинга — усреднения предсказания нескольких независимых моделей. Но вот проблема: обучающая выборка у нас одна. Как мы можем получить независимые модели? Почему это не приводит к проблемам?

На практике оказывается, что строгое выполнение предположения о независимости не обязательно. Достаточно, чтобы алгоритмы были в некоторой степени не похожи друг на друга. Достаточная непохожесть обеспечивается тем, что при обучении каждого дерева мы:

  • берём случайное подмножество обучающей выборки;
  • берём случайное подмножество признаков.

Что изучить по теме: ансамбли.

4. Какие гиперпараметры вы бы стали настраивать для борьбы с переобучением у градиентного бустинга?

Объяснение обычно строится на основе разложения ошибки на смещение и разброс. Грубо говоря, смещение показывает, насколько модели, обученные на разных выборках, в среднем ошибаются, а разброс — насколько разными будут модели, обученные на разных выборках.

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

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

Если речь идёт о бустинге над деревьями, то стоит уменьшить их глубину (кстати, по этой причине в бустинге обычно используются деревья небольшой глубины). Так как базовые модели становятся проще, имеет смысл увеличить их количество, но при этом нам не хочется, чтобы они слишком быстро приблизили таргет на обучающей выборке (это тоже было бы переобучением) — поэтому бывает полезно одновременно уменьшить learning rate (темп обучения).

Что изучить по теме: градиентный бустинг.