Машинное обучение — это набор методов, которые позволяют компьютеру решать сложные задачи, не используя точный алгоритм действий. Вместо следования указаниям, описанным человеком в программе, компьютер на имеющихся данных сам обучается решать поставленную задачу.
Новостные заголовки всё чаще пестрят терминами «машинное обучение» и «искусственный интеллект». Постепенно во всё большем количестве областей машинное обучение позволяет достичь если не прорыва, то существенного прогресса: AlphaFold успешно решает одну из главных задач биологии и медицины, PaLM способна отвечать на вопросы, генерировать программный код, суммаризовать тексты, а DALL-E по простому текстовому запросу генерирует изображения, качество которых сопоставимо с работами профессиональных иллюстраторов. Из-за этого может показаться, что машинное обучение — явление относительно новое. Однако на самом деле первые методы машинного обучения появились ещё в 1950-х.
Не точные алгоритмы, а обучение
Компьютер — всего лишь исполнитель. Он исполняет описанный в виде программы алгоритм действий. Алгоритм — это последовательность действий, которая приводит к определенному результату. Программа — это описание алгоритма на языке, который понятен компьютеру (на языке программирования). Компьютер не способен выполнить любое действие, которое понятно обычному человеку. Например, нельзя компьютеру дать команду «реши уравнение x^2 + 1 = 26». Чтобы компьютер смог решить эту задачу, человеку пришлось бы детально описать в программе следующий алгоритм действий:
- Вычесть из 26 единицу (результат = 25).
- Посчитать квадратный корень из результата, полученного на первом шаге. (результат равен 5)
- Вывести на экран результат второго шага и результат второго шага, умноженный на -1. То есть, вывести два числа: 5 и -5
Стоит оговориться, что во всех высокоуровневых (то есть таких, где за одной командой может стоять большой готовый алгоритм действий) языках программирования (например, Python, С++, Java) уже доступно множество арифметических операций, а также есть возможность вывода текста на экран, поэтому описывать их отдельно компьютеру не нужно..
Для задачи решения уравнения существует формальный алгоритм, который относительно просто запрограммировать. Однако что делать, если задача не настолько формальная?
Допустим, необходимо написать программу, которая определяла бы, кто на изображении — кот или собака. Для написания подобной программы программисту пришлось бы придумывать алгоритм, с помощью которого определялись характерные признаки животных (форма ушей, длина лап и хвоста, и другие), далее понадобился бы алгоритм, который по этим характерным признакам отличал кошек от собак. Сложность создания таких алгоритмов объясняется большой вариативностью изображений с животными: могут меняться породы животных, условия освещения, стиль, цветовая гамма, ракурс съемки, расположение объектов и огромное количество других факторов. Всё это многообразие нужно каким-то образом учитывать при формулировании алгоритма.
То есть, существуют задачи, решение которых сложно (если вообще возможно) формализовать. Методы машинного обучения позволяют обойти эту проблему с помощью процедуры обучения, посредством которой компьютер сам выделяет из данных закономерности и признаки, необходимые для решения задачи.
Модель и обучение
Сначала поясним, что же именно обучается.
Все данные (изображения, текст, звук) можно представить в виде набора чисел, который компьютер умеет преобразовывать. Например, картинку всегда можно представить в виде числовых значений трех цветов для каждого пикселя. Собственно, так она и хранится на компьютере. Далее изображение в виде набора чисел можно путём последовательных арифметических преобразований трансформировать в одно число (или набор чисел).
Зачем трансформировать один набор в другой (или в одно число)? Ответим на этот вопрос в контексте примера задачи с собаками и кошками. Нам бы хотелось следующего: компьютер принимает на вход изображение, затем производит какие-то действия с ним и на выходе выдаёт одно число — метка того, что изображён кот, а не собака (например, число 1 — метка собак, 0 — метка кошек). Конкретные действия, которые бы трансформировали изображение в правильную метку животного, нам неизвестны. Но мы можем «пробовать» разные последовательности преобразований и выбрать из них ту, что даёт ответы, наиболее близкие к правильным.
Последовательность преобразований и тип преобразований задают тип модели. Например, если единственными преобразованиями, которые используются, являются умножение элемента входа (элемента набора чисел) на произвольное число и сложение полученных произведений, то тогда модель линейная (подробнее — в статье про линейную регрессию).
Если же к этим двум преобразованиям добавить нелинейные преобразования (график таких преобразований отличается от прямой, о линейности можно почитать здесь) — например, добавить операцию возведения в степень — то получим нейронную сеть.
Преобразование может зависеть от параметров (также их называют весами): например, если преобразование заключается в умножении входа (результата предыдущего преобразования) на число, то это число и будет является параметром. Совокупность типа модели и параметров называется моделью. Если получится задать модель таким образом, что выход модели (результат всех преобразований) будет несильно отличаться от правильного ответа, то удастся решить задачу.
Под процедурой обучения подразумевают подбор оптимальных (с точки зрения качества решения задачи) параметров модели. Оптимальность модели определяется функцией потерь, которая показывает, насколько ответ модели близок к правильному. Существует бесконечное количество возможных наборов параметров. Для поиска оптимального набора имеется большое количество алгоритмов оптимизации; наиболее часто используемый в машинном обучении — градиентный спуск (но он применяется не всегда — например, модель решающих деревьев обучается иначе).
Выше не раз упоминались «правильные» ответы. В случае нашего примера это метка животного, которое присутствует на фотографии. Набор данных, содержащий входы (например, изображения котов и собак) и правильные ответы для них, называется обучающей выборкой. На ней как раз и проводится обучение модели.
С учителем и без: виды машинного обучения
Выше описывался случай, когда обучающая выборка содержит не только входные данные (изображения, звук, текст), но и выходные данные, которые модель должна вернуть (метка животного, присутствующего на изображении; транскрипция звуковой дорожки; число, отображающее тональность текста). В таком сценарии при обучении модель учится восстанавливать зависимость между входом и выходом. Методы машинного обучения, которые используют такие обучающие выборки, называются методами машинного обучения с учителем.
Такое название объясняется тем, что в процессе обучения мы явно, как учитель, «указываем» модели на её ошибки. К задачам, которые решаются такими методами, можно отнести задачи детекции, классификации и регрессии.
Но есть методы, для работы которых разметка обучающей выборки не требуется. Такие методы называются машинным обучением без учителя. Пример обучения без учителя — задача кластеризации: имеется большое множество сущностей, его необходимо разбить на группы (кластеры) так, чтобы в каждой группе сущности были, во-первых, похожи друг на друга, а во-вторых, сущности одной группы максимально отличались от сущностей другой группы. Например, есть множество покупателей магазина, задача — сгруппировать покупателей по их покупкам, в одной группе — садоводы, в другой — любители выпечки и т. д.
Другой пример обучения без учителя — построение векторных представлений, которые будут отражать семантические близости слов. В случае представлений слов для этого часто используют модели word2vec, glove, для обучения которых требуется только корпус текстов. Многие ведущие исследователи машинного обучения считают, что именно методы машинного обучения без учителя позволят приблизиться к общему искусственному интеллекту.