Превью статьи
Искусственный интеллект
Машинное обучение
16 марта
15 минут

О машинном обучении простым языком

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

Вячеслав Гораш avatar

Вячеслав Гораш

Разработчик в области 3D графики и машинного обучения с 6-ти летним опытом

Это статья из цикла про основы машинного обучения.

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

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

Алгоритмы, ML и торты

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

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

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

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

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

С учителем или без?

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

Допустим, мы учим ребенка названиям животных. У нас есть набор картинок, мы показываем их ребенку и спрашиваем, кто на ней. Если ребенок называет животное неправильно, мы подсказываем ему, кто там на самом деле. И таким образом ребенок постепенно выучит названия всех. Такой вариант называется обучением с учителем. Иными словами, он подразумевает наличие того, кто знает все ответы и может проверять ответы обучающегося.

С точки зрения машинного обучения все будет очень похоже. Тут нам придется впервые прибегнуть к математическим обозначениям. Итак, наша модель (напомню, это тот алгоритм, который мы меняем при обучении) мы обозначим буквой FF. Входные данные (в нашем случае — картинка, которую мы показываем модели) — XX. Для каждой картинки модель выдает свое предсказание (что за животное на картинке). Обозначим такое предсказание символом y^\widehat{y} (читается как "игрек с крышкой"). В итоге мы получим:

y^ = F(X)\widehat{y}\ = \ F(X)

Также для каждого XX мы знаем и правильный ответ yy (игрек, но уже без крышки). Теперь нам осталось сравнить их и понять, насколько далеко ответ модели от истины. Для этого введем такое понятие, как функция потерь. Эта функция (обозначим ее LL) сравнивает ответ модели с правильным и выдает число ll:

l = L(y, y^)l\ = \ L(y,\ \widehat{y})

Если ответ модели совпадает с правильным, число ll будет равно нулю. В противном случае оно будет тем больше, чем дальше ответ модели от правильного. Отсюда мы можем сделать вывод, что модель должна обучиться так, чтобы ll для любого XX было как можно меньше, в идеале равным нулю. Для этого мы, согласно определенным правилам, меняем нашу модель, то есть функцию FF. То есть, если говорить языком математики, задача обучения с учителем сводится к подбору такой функции FF, чтобы сумма всех потерь была минимальной:

i=1NL(yi, F(Xi))  0\sum_{i = 1}^{N}{L(y_{i},\ F(X_{i}))}\ \rightarrow \ 0

NN в этой формуле - количество обучающих примеров (данные + правильный ответ), которые у нас есть.

Общая компонентная схема обучения с учителем

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

В случае обучения без учителя формально описать процесс чуть сложнее. Обозначения будут похожи на случай с учителем. У нас есть наша функция F(X)F(X), которая выдает результат y^\widehat{y}. Но никакого заведомо правильного yy у нас в этом случае нет. Что же нам в таком случае оптимизировать?

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

Общая компонентная схема обучения без учителя

Есть еще третий вариант обучения. Но чтобы описать его, давайте перейдем от обучения ребенка к другому примеру (почему — сейчас поймете). Допустим, мы теперь ученые-биологи, и изучаем поведение мышей. В клетке у мыши есть две кнопки. Если мышь нажмет на первую, она получит корм. Если на вторую — ее ударит током. Понятное дело, что мышь через какое-то время будет нажимать только на первую кнопку. Теперь поменяем условие: корм будет появляться от нажатий на кнопки по очереди. Мышь поначалу будет жать на первую, но, к своему удивлению, вместо корма получит удар током. Через какое-то количество попыток мышь найдет вариант, как нужно нажимать кнопки.

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

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

Что может обучение с учителем?

Теперь, когда мы разобрались, как можно научить алгоритм чему-либо, давайте посмотрим, как это можно применить на практике.

И в первую очередь рассмотрим задачи, которые может решить обучение с учителем. Напомню, в этом случае у нас уже есть заведомо правильные ответы. И первой такой задачей будет классификация. На самом деле про эту задачу мы уже говорили. Да, это то самое угадывание названий животных. В случае классификации для каждого набора входных данных (это не обязательно картинка, может быть текст, видео, числа, граф и еще много чего). Самая главная черта задачи — то, что мы ждем на выходе. А ждем мы класс, то есть один элемент из конечного множества. Например, в случае, описанном выше, это будут названия животных. Причём тут очень важна ограниченность множества. То есть классов может быть 10, 100, 1000, но не бесконечность. И количество классов неизменно, мы не можем добавить новый в процессе работы алгоритма. Обычно классы кодируются числами. Для этого просто нумеруем классы от нуля до максимального значения. Это делается, потому что с числом компьютеру работать гораздо легче, чем с текстом.

Сама классификация тоже делится на виды в зависимости от того, сколько классов и как могут быть определены. Самый простой вид классификации — двухклассовая. Название говорит само за себя. У нас выбор из двух вариантов. Например, да или нет. Если вариантов больше двух — это уже многоклассовая классификация.

И очень важно не путать с ней многометочную (multi-label) классификацию. Тут мы можем присвоить сразу несколько меток классов. Представим себе ситуацию, когда нам нужно различать фотографии собак и кошек. У нас получается три класса (собака, кошка, никого нет). Но что делать, если на картинке есть и собака, и кошка? Можно ввести четвертый класс (собака и кошка вместе). Но если бы вариантов было не два, как у нас, а больше, то число классов очень быстро превысило бы все разумные пределы (для трех видов — это уже 8 классов, для четырех — 16 и так далее). Гораздо практичнее разрешить присваивать не только один класс, а сразу несколько (или ноль). Тогда нам достаточно всего двух меток классов. Если на картинке никого нет, на выходе ноль меток. Если на картинке собака или кошка, будет одна метка. Если оба — сразу две метки.

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

Варианты классификации

Кстати, стоит заметить, что задачу классификации можно представить в виде регрессии. Например, у нас два класса. Тогда мы можем выдавать число от 0 до 1. Если число меньше 0.5 — это первый класс. Если больше — второй. Это число, по сути, вероятность того, что у нас класс 2. Аналогично с multi-label. Только мы предсказываем не одно такое число, а несколько, по одному на каждый класс. Если число больше порога (в нашем случае 0.5), мы считаем, что этот класс есть.

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

Следующие две задачи касаются по большей части обработки изображений и видео. Это сегментация и детекция. Здесь нам нужно не просто сказать, что объект есть на картинке, а показать, где он конкретно. Разница между ними в том, как мы показываем это. При детекции мы рисуем прямоугольник вокруг объекта (так называемый bounding box). При сегментации мы закрашиваем весь объект целиком. То есть это более точное описание границ объекта. В случае детекции выходные данные — это центры и размеры рамок, а также метки их классов. В случае сегментации просто чисел нам недостаточно. Здесь выход уже другое изображение, на котором закрашены области, где мы нашли объекты (это так называемая маска сегментации).

Различие сегментации и детекции

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

Что может обучение без учителя?

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

Понижение размерности — это достаточно близкая к кластеризации, но чуть более сложная для понимания задача. Здесь мы стараемся закодировать объекты числами или наборами чисел так, чтобы расстояние (разница между числами) было тем меньше, чем ближе объекты друг к другу. Допустим, мы кодируем слова. Пусть слово "красный" — это 1. Тогда "алый" кодируем как 2 (близко к красному), "розовый" — 5 (чуть дальше), а "синий" — 40 (далеко). То есть мы представляем наши объекты в более компактном виде, но сохраняем связи между ними.

На сегодняшний день обучение без учителя активно используется в задачах генерации. Это и всем известные GPT-модели (расшифровывается как Generative Pretrained Transformer, о трансформерах планируется отдельная статья в будущем), и генераторы изображений, и генераторы видео. Стоит, однако, заметить, что обучение таких моделей — это очень сложный процесс, и обучение без учителя может быть только одним из многих этапов.

Заключение

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

Вопросы и ответы

Обсудить проект

Опишите вашу задачу, мы проведём исследование и ответим вам как можно скорее.

С радостью проконсультируем вас любым из доступных способов.

Оставляя заявку, вы соглашаетесь с политикой обработки данных