Сколько статей на хабре про машинное обучение? Обозначим их количество за и напишем
-ю.
Это попытка собрать цельное понимание: пройти путь от «что это вообще такое» до условных трансформеров и связать всё в одну логичную цепочку.
Попробую всё описать максимально простым языком, минимально опираясь на математическую терминологию.
Как говорится, буду разбирать так, как сам это вижу и понимаю — без лишней теории, но и без магии.
Возможно, важно
Скорее всего, серия в первую очередь подойдёт тем, кто хочет сделать первые шаги в ML, но если среди читателей окажутся люди, которые хорошо разбираются в теме — буду только рад замечаниям и исправлениям в комментариях.
Итак, поехали!
0. Введение
Итак, что такое машинное обучение?
Если коротко, это способ строить алгоритмы, которые по данным находят закономерности и используют их, чтобы делать предсказания для новых данных.
На практике данные обычно устроены так: есть признаки (features) — то, что описывает объект, и целевая переменная (target) — то, что мы хотим предсказать.
Классический пример — задача, в которой мы предсказываем цены квартир. В таком случае features — это площадь, этаж, количество комнат, а target — цена. Цель — построить на имеющихся данных модель.
Забегая вперёд, стоит отметить, что целевая переменная не обязательно одна — бывают задачи с несколькими target‑ами. Но пока будем рассматривать случай с одной целевой переменной.
Дальше удобно перейти к формальному описанию: как эти данные и предсказания записываются в виде обозначений.
Обозначим пространство признаков через , а каждый объект из этого пространства — вектором признаков вида
, где
— это
‑й признак (например, площадь, этаж и так далее). Также обозначим пространство таргетов за
, а его элементы —
.
Тогда задача машинного обучения сводится к поиску отображения , которое по признакам объекта предсказывает соответствующий таргет.
То, насколько «ошибается» при переводе
в
, называется потерей (loss). Ясное дело, что степень «ошибки» можно измерять по‑разному (модуль разности, квадрат разности и так далее). Функция, которая считает loss, называется функцией потерь (Loss Function) и обозначается (как ни странно) буквой
. Выбор функции потерь — это критически важный этап, который напрямую зависит от типа решаемой задачи и особенностей данных.
Итак, задача машинного обучения формулируется как поиск функции из некоторого класса функций
, минимизирующей ошибку на данных:
Чуть подробнее о классе функций
Это набор всех возможных моделей конкретного типа. Например:
-
Если мы решили, что зависимость линейная
, то
— это класс линейных функций
-
Если мы строим дерево решений, то
— это множество всех деревьев заданной глубины
-
и так далее
Зачем вообще ограничивать?
Казалось бы, почему не взять «вообще все мыслимые функции»?
-
Вычислимость: Нам нужно уметь математически искать лучшую функцию. Если класс функций слишком сложный, мы просто не сможем найти минимум ошибки.
-
Обобщающая способность: Если
слишком богат (например, функция может изгибаться как угодно), модель просто «зазубрит» тренировочные данные.
Всё через компромисс:
-
Слишком простой
: (например, прямая там, где нужна кривая) — модель будет ошибаться. Это называется недообучением (Underfitting).
-
Слишком сложный
: (нейросеть с миллиардом параметров на 10 примеров) — модель идеально подстроится под шум. Это переобучение (Overfitting).
Получается, если отбросить модные слова и маркетинг, то работа ML-инженера зачастую сводится к сборке «конструктора» из четырех ключевых деталей:
-
Данные (Data): Получение, обработка и очистка данных. Качественные данные — половина успеха.
-
Определение класса (
): Выбор пространства, в котором ищем решение. Будет это простая линейная модель, дерево решений, или огромная нейросеть?
-
Выбор функции потерь (
): Определение «санкций». Что хуже: ошибиться на чуть-чуть на многих объектах, или сильно промахнуться на одном?
-
Выбор метода оптимизации: Сам поиск. Как именно мы будем перебирать функции из
, чтобы найти среди них ту самую, которая минимизирует
?
Подведя итог: машинное обучение — это не магия и не «черный ящик», а вполне логичный инженерный конструктор. Мы берем данные, выбираем подходящее семейство функций (модель), определяем линейку, которой будем измерять ошибки (Loss), и запускаем алгоритм оптимизации, чтобы найти лучшее решение.
Эта формула — база, на которой строится всё: от предсказания цены квартиры до современных языковых моделей.
Далее, пройдемся по конкретным сетапам вышеуказанных четырех всадников апокалипсиса пунктов. Рассмотрим, как изменив этот набор, можно получить линейную регрессию, дерево решений, нейросеть и так далее.
1. Линейная регрессия
Сначала поймем, что она из себя представляет.
Представим обычный серый двумерный мир. У нас есть (например рост человека) и
(размер обуви). Мы хотим понять как по росту человека подбирать ему обувь. В этом контексте линейная регрессия — это просто построение прямой, которая проходит максимально близко ко всем точкам.
Однако, одним ростом сыт не будешь. В реальном мире признаков обычно много (рост, вес, пол, возраст и так далее), так что признаков обычно у нас много, но идея не сильно сложнее школьной
Теперь, чуть ближе к делу.
Определим линейную регрессию таким образом։ линейная регрессия — это модель, в которой мы предполагаем, что таргет аппроксимируется через линейную комбинацию фич и свободного коэффициента. К слову, свободный коэффициент имеет своё название — смещение (bias)
где называются весами (weight). И нашей задачей является нахождение таких
, при которых ошибка у нас будет минимальна.
Сразу добавлю, что веса и «такие» числа, которые «подберет для нас компьютер» называются параметрами модели. Также, в будущем мы встретим числа, которые инженеры подбирают вручную (грубо говоря, конфигурация модели). Они, в свою очередь, называются гиперпараметрами
Сейчас мы имеем формулу вида Сделаем один необязательный шаг и немножко улучшим качество нашей жизни.
Дабы избавиться от «бесячего хвостика» , скажем что у нас имеется фиктивная фича под названием
, которая всегда равна
и не влияет ни на что. Перепишем формулу таким образом
для самых маленьких (скалярное произведение)
Выражение является так называемым скалярным произведением (В
-мерном вещественном евклидовом пространстве)
«Согрешил, батюшка» (о типах данных)
Опытные читатели, возможно, не обратили внимание, но я упустил весьма (не побоюсь этого слова) ключевой момент. В примере выше у нас был рост, вес и пол. Ладно уж рост, это число типа float (так называемый количественный признак), мы его умножим на какое‑то и получим число.
Что делать с полом? Достаточно очевидно, что эту фичу можно закодировать бинарно условно (0 — женщина, 1 — мужчина)
А что, если у нас не количественный и даже не бинарный признак, а к примеру номер автомобиля, класс билета в самолете, или кличка кота?
Такие признаки называются категориальными. Они в свою очередь бывают двух типов։ Номинальные и Порядковые.
Порядковые признаки — это те, для которых определены операции сравнения (к примеру одежда размера S меньше одежды размера XL).
А номинальные признаки несравнимы (например, любимые музыкальные группы)
С порядковыми признаками работать относительно легко. В самом простом случае их можно просто нумеровать. А номинальные признаки, зачастую, требуют более хитрых методов (от one hot encoding, до embeddings). Когда как и что обычно делают — Разберемся позже.
Таким образом мы определили класс функций (модель), в котором мы ищем подходящую нам функцию.
Настала очередь второго шага — выбора loss функции . На самом деле, это та часть, по которой будут подобраны наши параметры.
Для задач линейной регрессии, обычно, в качестве функции потерь выбирают так называемую среднеквадратическую ошибку (Mean Square Error / MSE). Выглядит она таким образом
И целью становится минимизация функции потерь, то есть нахождение такого вида
Почему именно MSE
-
Дифференцируемость (Гладкость)։ имеем возможность посчитать градиенты
-
Выпуклость: У MSE в линейной регрессии только один минимум (дно чаши). Мы никогда не застрянем в «ложной» яме.
-
Гауссовое распределение: Если шум в данных распределен нормально (по Гауссу), то минимизация MSE — это то же самое, что метод максимального правдоподобия.
Здесь показывает насколько отличается реальный ответ
от «пророчества» нашей модели.
Возведение в квадрат имеет двойной смысл. Во‑первых, мы не попадаем в неприятные ситуации когда из‑за того, что , Loss уменьшается.
Во‑вторых, малые ошибки штрафуются слабо (ответ был 5, модель выдала 4 — квадрат разности всего 1), а большие ошибки штрафуются сильно (ответ был 5, модель выдала 10 — квадрат разности уже 25).
Из‑за этого модель думает։ «бро, я лучше совершу 10 мелких ошибок, чем одну крупную».
Есть и, конечно, альтернативные подходы. К примеру, нашему MSE не уступает по популярности так называемый Mean Absolute Error / (MAE)։
Почти то же самое, но штраф теперь линейный. В случае MAE модель может подумать «а давай лучше разочек накосячу, зато, в остальных случаях всё будет правильно».
Тут мы введем еще одно модное слово — Robustness (или по‑простому — устойчивость к выбросам). Это «пофигизм» модели к сильным отклонениям в данных (выбросам). Робастная модель не будет пытаться угодить одному странному объекту, если это портит общую картину.
Вопрос на засыпку: а хорошо ли это всегда? Что, если выгоднее сильно ошибаться в определении размера обуви человека нестандартного телосложения, зато, чуть ли не идеально подбирать обувь для остальных?
На самом деле ответ зависит от множества факторов, в том числе от задачи, которую мы решаем. Подробнее расскажу об этом в будущем, в статье про метрики.
Заключение
На самом деле тема довольна обширная, потому, решил не запихать в одну статью и введение и аналитическое решение задачи линейной регрессии и градиентный спуск.
Подведем краткий итог. В этой статье мы
-
Поняли, что из себя представляет машинное обучение
-
Сформулировали «скелет» задачи в виде четырех шагов
-
Узнали, что такое линейная регрессия
-
Поняли, что такое параметры, веса и смещение
-
Рассмотрели пару функций потерь, и поняли, что её выбор неоднозначен
В следующей статье поговорим уже о матрицах, попробуем решить задачу линейной регрессии математически, поймем, где возникают проблемы и какие есть обходные пути. Также разберем один из столпов в машинном обучении — понятие градиентного спуска.
ссылка на оригинал статьи https://habr.com/ru/articles/1036884/