МАШИННОЕ ОБУЧЕНИЕ
 
ВВЕДЕНИЕ
Машинное обучение (Machine Learning) – это обширный подраздел искусственного интеллекта, изучающий методы построения алгоритмов, способных обучаться.

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

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

1. Зачем обучать машины
2. Что нужно для обучения машин
3. Как устроен мир машинного обучения
ЗАЧЕМ ОБУЧАТЬ МАШИНЫ
И В ЧЁМ РАЗНИЦА МЕЖДУ МАШИННЫМ ОБУЧЕНИЕМ И ИСКУССТВЕННЫМ ИНТЕЛЛЕКТОМ
ЦЕЛЬ МАШИННОГО ОБУЧЕНИЯ – ПРЕДСКАЗАТЬ РЕЗУДЬТАТ ПО ВХОДНЫМ ДАННЫМ
Предположим, вы хотите купить автомобиль и считаете сколько денег для этого нужно накопить. Пересмотрев десятки объявлений в интернете, вы замечаете, что новые автомобили стоят около $20 000, годовалые – примерно $19 000, двухлетние – $18 000 и так далее.

В уме можно легко вывести формулу: адекватная цена автомобиля начинается от $20 000 и падает на $1000 каждый год, пока не упрётся в $10 000.

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

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

Люди не могут или не хотят справляться с такими задачами, поэтому придумали машинное обучение для них. Пусть машина посмотрит на наши данные, найдёт в них закономерности и научится предсказывать для нас ответ. Самое интересное, что в итоге она стала находить даже такие закономерности, о которых люди не догадывались.
МАШИННОЕ ОБУЧЕНИЕ vs ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ

Многие считают, что машинное обучение, искусственный интеллект и нейросети – это одно и то же. На самом деле, это не так.

Искусственный интеллект – название всей области, как биология или химия.

Машинное обучение – это раздел искусственного интеллекта. Важный, но не единственный.

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

ЧТО НУЖНО ДЛЯ ОБУЧЕНИЯ МАШИН
ТРИ СОСТАВЛЯЮЩИЕ МАШИННОГО ОБУЧЕНИЯ
1

ДАННЫЕ
Хотим определять спам – нужны примеры спам-писем, предсказывать курс акций – нужна история цен, узнать интересы пользователя – нужны его лайки или посты. Данных нужно как можно больше. Десятки тысяч примеров – это самый минимум для отчаянных.

Данные собирают как могут. Кто-то вручную – получается дольше, меньше, зато без ошибок. Кто-то автоматически – просто сливает машине всё, что нашлось, и верит в лучшее. Самые хитрые используют своих же пользователей для бесплатной разметки. Вспомните ReCaptcha в Google, которая иногда требует «найти на фотографии все дорожные знаки» – это оно и есть.

За хорошими наборами данных (датасетами) идёт большая охота. Крупные компании, бывает, раскрывают свои алгоритмы, но датасеты – крайне редко.
2

ПРИЗНАКИ (ФИЧИ)
Фичи (features), свойства, характеристики, признаки – ими могут быть пробег автомобиля, пол пользователя, цена акций, даже счетчик частоты появления слова в тексте может быть фичей.

Машина должна знать, на что ей конкретно смотреть. Хорошо, когда данные просто лежат в табличках – названия их колонок и есть фичи. А если у нас сто гигабайт картинок с котами? Когда признаков много, модель работает медленно и неэффективно. Зачастую отбор правильных фич занимает больше времени, чем всё остальное обучение.

3

АЛГОРИТМ
Одну задачу всегда можно решить разными методами. От выбора метода зависит точность, скорость работы и размер готовой модели. Правда, стоит учитывать один нюанс: если данные некачественные, то даже самый лучший алгоритм не поможет.
КАК УСТРОЕН МИР МАШИННОГО ОБУЧЕНИЯ
ОБШИРНАЯ КЛАССИФИКАЦИЯ ОСНОВНЫХ АЛГОРИТМОВ МАШИННОГО ОБУЧЕНИЯ ПРОСТЫМ ЯЗЫКОМ
Классифицировать алгоритмы можно десятком способов. Здесь выбран этот, потому что он является самым удобным для повествования. Надо понимать, что не бывает так, чтобы задачу решал только один метод. Далее будут упоминаться известные примеры применений различных методов, но нужно держать в уме, что все приведённые примеры также всегда могут быть решены нейросетями.

Начнём с базового обзора. Сегодня в машинном обучении есть всего четыре основных направления: Классическое обучение, Обучение с подкреплением, Ансамбли, Нейросети и глубокое обучение.
Ниже подробно разберёмся с каждым из четырёх основных направлений, их классификациями и конкретными методами.
1. КЛАССИЧЕСКОЕ ОБУЧЕНИЕ
Первые алгоритмы пришли к нам из чистой статистики еще в 1950-х. Они решали формальные задачи – искали закономерности в цифрах, оценивали близость точек в пространстве и вычисляли направления.

Сегодня на классических алгоритмах держится добрая половина интернета. Когда вы встречаете блок «Рекомендованные статьи» на сайте, или банк блокирует все ваши деньги на карточке после первой же покупки кофе за границей – это почти всегда дело рук одного из этих алгоритмов.

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

Классическое обучение любят делить на две категории – с учителем и без. Часто можно встретить их английские наименования – Supervised и Unsupervised Learning.

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

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

ОБУЧЕНИЕ С УЧИТЕЛЕМ

Очевидно, что с учителем машина обучится быстрее и точнее, поэтому в боевых задачах данный подход используют намного чаще. Эти боевые задачи бывают двух типов: классификация – предсказание категории объекта, и регрессия – предсказание места на числовой прямой.

1) КЛАССИФИКАЦИЯ

«Разделяет объекты по заранее известному признаку. Носки по цветам, документы по языкам, музыку по жанрам»

Применение:
  • Спам-фильтры
  • Определение языка
  • Поиск похожих документов
  • Анализ тональности
  • Распознавание рукописных букв и цифр
  • Определение подозрительных транзакций

Популярные алгоритмы: Наивный Байес, Деревья Решений, Логистическая Регрессия, K-ближайших соседей, Машины Опорных Векторов

Классификация вещей – самая популярная задача во всём машинном обучении. Машина в ней как ребёнок, который учится раскладывать игрушки: роботов в один ящик, танки в другой.

Для классификации всегда нужен учитель – размеченные данные с признаками и категориями, которые машина будет учиться определять по этим признакам. Дальше классифицировать можно что угодно: пользователей по интересам – так делают алгоритмические ленты, статьи по языкам и тематикам – важно для поисковиков, музыку по жанрам – вспомните плейлисты Спотифая и Яндекс.Музыки, даже письма в вашем почтовом ящике.

Раньше все спам-фильтры работали на алгоритме Наивного Байеса. Машина считала сколько раз определённое слово встречается в спаме, а сколько раз в нормальных письмах, затем перемножала эти две вероятности по формуле Байеса, складывала результаты всех слов и готово! Позже спамеры научились обходить это, но метод навсегда остался в учебниках как самый простой, красивый и один из первых практически полезных.
Возьмем другой пример полезной классификации. Представьте, что вы берёте кредит в банке. Как банку удостовериться, вернёте вы его или нет? Точно никак, но у банка есть тысячи профилей других людей, которые уже брали кредит до вас. Там указан их возраст, образование, должность, уровень зарплаты и главное – кто из них вернул кредит, а с кем возникли проблемы.

Да, все догадались, где здесь данные и какой надо предсказать результат. Обучим машину, найдём закономерности, получим ответ – вопрос не в этом. Проблема в том, что банк не может слепо доверять ответу машины, без объяснений (вдруг сбой или хакерская атака).

Для этой задачи придумали Деревья Решений. Машина автоматически разделяет все данные по вопросам, ответы на которые «да» или «нет». Машина придумывает их так, чтобы на каждом шаге разбиение было самым точным.

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

Идея SVM по своей сути проста – он ищет, как так провести две прямые между категориями, чтобы между ними образовался наибольший зазор. На картинке видно нагляднее:
У классификации есть полезная обратная сторона – поиск аномалий. Когда какой-то признак объекта сильно не вписывается в наши классы, мы ярко подсвечиваем его на экране. Сейчас так делают в медицине: компьютер подсвечивает врачу все подозрительные области МРТ или выделяет отклонения в анализах. Научив компьютер «как правильно», мы автоматически получаем и обратный классификатор – как неправильно.

Сегодня для классификации всё чаще, вместо классического обучения, используют нейросети, ведь по сути их для этого и изобрели.
2) РЕГРЕССИЯ

«Нарисуй линию вдоль моих точек»

Применение:
  • Прогноз стоимости ценных бумаг
  • Анализ спроса, объема продаж
  • Медицинские диагнозы
  • Любые зависимости числа от времени
  • акций

Популярные алгоритмы: Линейная или Полиномиальная Регрессия

Регрессия – та же классификация, только вместо категории мы предсказываем число. Стоимость автомобиля по его пробегу, количество пробок по времени суток, объем спроса на товар от роста компании и т.д. На регрессию идеально ложатся любые задачи, где есть зависимость от времени.

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

Когда регрессия рисует прямую линию, её называют линейной, когда кривую – полиномиальной.
ОБУЧЕНИЕ БЕЗ УЧИТЕЛЯ
Обучение без учителя (Unsupervised Learning) было изобретено позже, в 1990-е, и на практике используется реже. Но бывают задачи, где выбора просто нет. Что делать если нужно, например, написать классификатор автобусов – идти на улицу и руками фотографировать миллион штук?

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

Обучение без учителя используется для трёх типов задач: кластеризации, уменьшения размерности (обобщения), поиска правил (ассоциации).
1) КЛАСТЕРИЗАЦИЯ

«Разделяет объекты по неизвестному признаку. Машина сама решает как лучше»

Применение:
  • Сегментация рынка (типов покупателей, лояльности)
  • Объединение близких точек на карте
  • Сжатие изображений
  • Анализ и разметки новых данных
  • Детекторы аномального поведения

Популярные алгоритмы: Метод K-средних, Mean-Shift, DBSCAN
Кластеризация – это классификация, но без заранее известных классов. Она сама ищет похожие объекты и объединяет их в кластеры. Количество кластеров можно задать заранее или доверить это машине. Похожесть объектов машина определяет по тем признакам, которые мы ей разметили – у кого много схожих характеристик, тех она определяет в один класс.

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

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

Сжатие изображений – ещё одна популярная проблема. Сохраняя картинку в PNG, вы можете установить палитру, скажем, в 32 цвета. Тогда кластеризация найдёт все «примерно красные» пиксели изображения, высчитает из них «средний красный по больнице» и заменит все красные на него. Меньше цветов – меньше файл.

Но с некоторыми цветами не очень просто понять, к какому среднему цвету они ближе. Например, цвет Cyan ближе к синему или зелёному? Тут нам поможет популярный алгоритм кластеризации – Метод К-средних (K-Means). Мы случайным образом бросаем на палитру цветов наши 32 точки, называя их центроидами. Все остальные точки относим к ближайшему центроиду от них – получаются как бы созвездия из самых близких цветов. Затем двигаем центроид в центр своего созвездия и повторяем пока центроиды не перестанут двигаться. Кластеры обнаружены, стабильны и их ровно 32 как и надо было. Нагляднее видно на примере с ларьками с шаурмой:
Искать центроиды удобно и просто, но в реальных задачах кластеры могут быть совсем не круглой формы. Представьте, что вы геолог, которому нужно найти на карте схожие по структуре горные породы – ваши кластеры не только будут вложены друг в друга, но вы ещё и не знаете сколько их вообще получится.

Здесь поможет метод DBSCAN. Он сам находит скопления точек и строит вокруг кластеры. Его легко понять, если представить, что точки – это люди на площади. Находим трёх любых близко стоящих человека и говорим им взяться за руки. Затем они начинают брать за руку тех, до кого могут дотянуться. Так по цепочке, пока никто больше не сможет взять кого-то за руку – это и будет первый кластер. Повторяем, пока не поделим всех. Те, кому вообще некого брать за руку – это выбросы, аномалии. В динамике выглядит довольно красиво:

Как и классификация, кластеризация тоже может использоваться как детектор аномалий, однако с этой функцией она справляется хуже, чем классификация.
2) УМЕНЬШЕНИЕ РАЗМЕРНОСТИ (ОБОБЩЕНИЕ)

«Собирает конкретные признаки в абстракции более высокого уровня»

Применение:
  • Рекомендательные Системы (★)
  • Красивые визуализации
  • Определение тематики и поиска похожих документов
  • Анализ фейковых изображений
  • Риск-менеджмент

Популярные алгоритмы: Метод главных компонент (PCA), Сингулярное разложение (SVD), Латентное размещение Дирихле (LDA), Латентно-семантический анализ (LSA, pLSA, GLSA), t-SNE (для визуализации)
Уменьшение размерности (обобщение) – это объединение нескольких признаков в один и получение абстракции. Например, собаки с треугольными ушами, длинными носами и большими хвостами соединяются в полезную абстракцию «овчарки».

Например, это хорошо подходит для определения тематик текстов (Topic Modelling). Мы смогли абстрагироваться от конкретных слов до уровня смыслов даже без привлечения учителя со списком категорий. Алгоритм назвали Латентно-семантический анализ (LSA), и его идея была в том, что частота появления слова в тексте зависит от его тематики: в научных статьях больше технических терминов, в новостях о политике – имён политиков. Да, мы могли бы просто взять все слова из статей и кластеризовать, как мы делали с ларьками выше, но тогда мы бы потеряли все полезные связи между словами, например, что батарейка и аккумулятор, означают одно и то же в разных документах.

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

Оказалось, что с этой задачей легко справляется Сингулярное разложение (SVD). Оно выявляет для нас полезные тематические кластеры из слов, которые встречаются вместе.

Ещё одно мега-популярное применение метода уменьшения размерности нашли в рекомендательных системах и коллаборативной фильтрации. Оказалось, если абстрагировать ими оценки пользователей фильмам, получается неплохая система рекомендаций кино, музыки, игр и вообще чего угодно .
3) ПОИСК ПРАВИЛА (АССОЦИАЦИЯ)

«Ищет закономерности в потоке заказов»

Применение:
  • Прогноз акций и распродаж
  • Анализ товаров, покупаемых вместе
  • Расстановка товаров на полках
  • Анализ паттернов поведения на веб-сайтах

Популярные алгоритмы: Apriori, Euclat, FP-growth
Сюда входят все методы анализа продуктовых корзин, стратегий маркетинга и других последовательностей.

Предположим, покупатель берёт в дальнем углу магазина пиво и идёт на кассу. Стоит ли ставить на его пути орешки? Часто ли люди берут их вместе? Орешки с пивом, наверное да, но какие ещё товары покупают вместе? Когда вы владелец сети гипермаркетов, ответ для вас не всегда очевиден, но одно тактическое улучшение в расстановке товаров может принести хорошую прибыль.

То же касается интернет-магазинов, где задача еще интереснее – за каким товаром покупатель вернётся в следующий раз?

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

2. ОБУЧЕНИЕ С ПОДКРЕПЛЕНИЕМ


«Брось робота в лабиринт и пусть ищет выход»

Применение:
  • Самоуправляемые автомобили
  • Роботы пылесосы
  • Игры
  • Автоматическая торговля
  • Управление ресурсами предприятий

Популярные алгоритмы: Q-Learning, SARSA, DQN, A3C, Генетический Алгоритм
Наконец мы дошли до вещей, которые, вроде, выглядят как настоящий искусственный интеллект.

Обучение с подкреплением (REINFORCEMENT LEARNING) используют там, где задачей стоит не анализ данных, а выживание в реальной среде.

Знания об окружающем мире такому роботу могут быть полезны, но чисто для справки. Не важно сколько данных он соберёт, у него всё равно не получится предусмотреть все ситуации. Потому его цель – минимизировать ошибки, а не рассчитать все ходы. Робот учится выживать в пространстве с максимальной выгодой: собранными монетками в Марио или временем поездки в Тесле.

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

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

Запоминать сам город машине не нужно – такой подход называется Model-Free. Конечно, тут есть и классический Model-Based, но в нём нашей машине пришлось бы запоминать модель всей планеты, всех возможных ситуаций на всех перекрёстках мира. Такое просто не работает. В обучении с подкреплением машина не запоминает каждое движение, а пытается обобщить ситуации, чтобы выходить из них с максимальной выгодой.

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

Эта идея лежит в основе алгоритма Q-learning и его производных (SARSA и DQN). Буква Q в названии означает слово Quality, то есть робот учится поступать наиболее качественно в любой ситуации, а все ситуации он запоминает как простой марковский процесс.

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

Но как понять, когда у нас сложилась известная ситуация, а когда абсолютно новая? Вот самоуправляемый автомобиль стоит у перекрестка и загорается зелёный – значит можно ехать? А если справа мчит скорая помощь с мигалками?

Ответ – никак, магии не бывает. Исследователи постоянно этим занимаются. Одни прописывают все ситуации руками, что позволяет им обрабатывать исключительные случаи типа проблемы вагонетки. Другие идут глубже и отдают эту работу нейросетям, пусть сами всё найдут. Так вместо Q-learning'а у нас появляется Deep Q-Network (DQN).


3. АНСАМБЛИ


«Куча глупых деревьев учится исправлять ошибки друг друга»

Применение:
  • Всё, где подходят классические алгоритмы (но работают точнее)
  • Поисковые системы (★)
  • Компьютерное зрение
  • Распознавание объектов

Популярные алгоритмы: Random Forest, Gradient Boosting
Теперь к настоящим серьёзным методам. Ансамбли и нейросети сегодня дают самые точные результаты и используются всеми крупными компаниями. Только, в отличие то нейросетей, ансамбли почему-то не находятся на слуху.

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

Причём даже лучше, когда взятые алгоритмы максимально нестабильны и сильно плавают от входных данных. Поэтому чаще берут Регрессию и Деревья Решений, которым достаточно одной сильной аномалии в данных, чтобы поехала вся модель. А вот Байеса и K-NN не берут никогда – они очень стабильные.

Ансамбль можно собрать как угодно, правда, тогда за их никто не ручается. Потому есть три проверенных способа делать ансамбли: Стекинг, Беггинг, Бустинг.

СТЕКИНГ
Идея стекинга в том, что мы обучаем несколько разных алгоритмов и передаём их результаты на вход последнему, который принимает итоговое решение. Работу этого алгоритма можно хорошо понять, если представить девочку, которая сначала опрашивает всех своих подружек, чтобы потом самостоятельно принять решение встречаться с парнем или нет.

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

На практике стекинг применяется редко, потому что два других метода обычно точнее.
БЕГГИНГ
Идея беггинга (Bootstrap AGGregatING) в том, что мы обучаем один алгоритм много раз на случайных выборках из исходных данных, а в самом конце усредняем ответы.

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

Самый популярный пример беггинга – алгоритм Random Forest, беггинг на деревьях, который нарисован на картинке ниже. Когда вы открываете камеру на телефоне и видите как она очертила лица людей в кадре желтыми прямоугольниками – скорее всего это их работа. Нейросеть будет слишком медлительна в реальном времени, а беггинг идеален, ведь он может считать свои деревья параллельно на всех шейдерах видеокарты.

Хорошая способность параллелиться даёт беггингу преимущество даже над следующим методом, который работает точнее, но только в один поток.
БУСТИНГ
Идея бустинга в том, что мы обучаем алгоритмы последовательно, а каждый следующий уделяет особое внимание тем случаям, на которых ошибся предыдущий.

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

Главный плюс данного метода – очень высокая точность классификации.

Главный минус уже был назван – этот метод не параллелится. Хотя, стоит отметить, что всё равно работает быстрее нейросетей.

Нужен реальный пример работы бустинга – откройте Яндекс и введите запрос. Да, работа поисковика Яндекса построена именно на этом методе.


4. НЕЙРОСЕТИ И ГЛУБОКОЕ ОБУЧЕНИЕ


«У нас есть сеть из тысячи слоёв, десятки видеокарт, но мы всё еще не придумали где это может быть полезно. Пусть рисует котиков!»

Применение:
  • Вместо всех вышеперечисленных алгоритмов вообще
  • Определение объектов на фото и видео
  • Распознавание и синтез речи
  • Обработка изображений, перенос стиля
  • Машинный перевод

Популярные архитектуры: Перцептрон, Свёрточные Сети (CNN), Рекуррентные Сети (RNN), Автоэнкодеры
Любая нейросеть – это набор нейронов и связей между ними. Нейрон лучше всего представлять просто как функцию с кучей входов и одним выходом. Задача нейрона – взять числа со своих входов, выполнить над ними функцию и отдать результат на выход. Простой пример полезного нейрона: просуммировать все цифры со входов, и если их сумма больше N – выдать на выход единицу, иначе – ноль.

Связи – это каналы, через которые нейроны шлют друг другу цифры. У каждой связи есть свой вес – её единственный параметр, который можно условно представить как прочность связи. Когда через связь с весом 0.5 проходит число 10, оно превращается в 5. Сам нейрон не разбирается, что к нему пришло и суммирует всё подряд – веса и нужны для того, чтобы управлять на какие входы нейрон должен реагировать, а на какие нет.

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

Если создать достаточное количество слоёв и правильно расставить веса в такой сети, получается следующее – подав на вход, скажем, изображение написанной от руки цифры 4, чёрные пиксели активируют связанные с ними нейроны, те активируют следующие слои, и так далее и далее, пока в итоге не загорится самый выход, отвечающий за четвёрку. Результат достигнут.

Когда мы построили сеть, наша задача правильно расставить веса, чтобы нейроны реагировали на нужные сигналы. Тут нужно вспомнить, что у нас же есть данные – примеры «входов» и правильных «выходов». Будем показывать нейросети рисунок той же цифры 4 и говорить «подстрой свои веса так, чтобы на твоём выходе при таком входе всегда загоралась четвёрка».

Сначала все веса просто расставлены случайно, мы показываем сети цифру, она выдаёт какой-то случайный ответ (весов-то нет), а мы сравниваем, насколько результат отличается от нужного нам. Затем идём по сети в обратном направлении, от выходов ко входам, и говорим каждому нейрону – так, ты вот тут зачем-то активировался, из-за тебя всё пошло не так, давай ты будешь чуть меньше реагировать на вот эту связь и чуть больше на вон ту, ок?

Через тысяч сто таких циклов «прогнали-проверили-наказали» есть надежда, что веса в сети откорректируются так, как мы хотели. Научно этот подход называется Backpropagation или «Метод обратного распространения ошибки».

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

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

Решение было найдено в глубоком обучении (deep learning).

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

На сегодняшний момент среди глубоко обучаемых нейросетей выделяют два главных типа: Свёрточные нейросети (CNN) и Рекуррентные нейросети (RNN).
СВЁРТОЧНЫЕ НЕЙРОСЕТИ (CNN)
Свёрточные сети (cnn) сейчас на пике популярности. Они используются для поиска объектов на фото и видео, распознавания лиц, переноса стиля, генерации и дорисовки изображений, создания эффектов типа слоу-мо и улучшения качества фотографий. Сегодня CNN применяют везде, где есть картинки или видео.
Проблема с изображениями всегда была в том, что непонятно, как выделять на них признаки. Текст можно разбить по предложениям, взять свойства слов из словарей. Картинки же приходилось размечать руками, объясняя машине, где у котика на фотографии ушки, а где хвост. Такой подход даже назвали «handcrafting признаков» и раньше все использовали именно его.

Проблем у ручного крафтинга много.

Во-первых, если котик на фотографии прижал ушки или отвернулся – всё, нейросеть ничего не увидит.

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

Получается, машине надо самой учиться искать эти признаки, составляя из каких-то базовых линий. Будем делать так: для начала разделим изображение на блоки 8x8 пикселей и выберем какая линия доминирует в каждом – горизонтальная [-], вертикальная [|] или одна из диагональных [/]. Могут и две, и три, так тоже бывает, мы не всегда точно уверены.

На выходе мы получим несколько массивов палочек, которые по сути являются простейшими признаками наличия очертаний объектов на картинке. По сути это тоже картинки, просто из палочек. Значит мы можем вновь выбрать блок 8x8 и посмотреть уже, как эти палочки сочетаются друг с другом. А потом ещё и ещё.

Такая операция называется свёрткой, откуда и пошло название метода. Свёртку можно представить как слой нейросети, ведь нейрон – абсолютно любая функция.

Когда мы прогоняем через нашу нейросеть кучу фотографий котов, она автоматически расставляет большие веса тем сочетаниям из палочек, которые увидела чаще всего. Причём неважно, это прямая линия спины или сложный геометрический объект типа мордочки – что-то обязательно будет ярко активироваться.

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

Красота идеи в том, что у нас получилась нейросеть, которая сама находит характерные признаки объектов. Нам больше не надо отбирать их руками. Мы можем сколько угодно "кормить" её изображениями любых объектов, просто нагуглив миллион картинок с ними – сеть сама составит карты признаков из палочек и научится определять что угодно.
РЕКУРРЕНТНЫЕ НЕЙРОСЕТИ (RNN)
Рекуррентные нейросети (RNN) – это вторая по популярности архитектура на сегодняшний день. Благодаря рекуррентным сетям у нас есть такие полезные вещи, как машинный перевод текстов и компьютерный синтез речи. На них решают все задачи, связанные с последовательностями – голосовые, текстовые или музыкальные.

Ранее голосовые синтезаторы произносили слова по буквам, пытаясь как-то склеить их между собой. Сегодня же у нас есть, например, Amazon Alexa или Алиса от Яндекса – они не просто произносят слова без ошибок, они даже расставляют акценты в предложении!

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

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

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

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

Когда нейросеть не умеет забывать – её нельзя обучить (с людьми тоже так).

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

Когда нейрону было нужно поставить себе напоминалку на будущее – он писал это в ячейку, когда наоборот вся история становилась ненужной (например, предложение закончилось) – ячейки сбрасывались, оставляя только «долгосрочные» связи, как в классическом перцептроне. Другими словами, сеть обучалась не только устанавливать текущие связи, но и ставить напоминалки.



ОБЩАЯ КАРТА МИРА МАШИННОГО ОБУЧЕНИЯ
ТА ЖЕ, ЧТО БЫЛА И В НАЧАЛЕ, НО ТЕПЕРЬ НАМНОГО ПОНЯТНЕЕ
А КОГДА НА ВОЙНУ С МАШИНАМИ?
СТАНУТ ЛИ В КАКОЙ-ТО МОМЕНТ МАШИНЫ УМНЕЕ ЛЮДЕЙ
Вопрос «когда машины станут умнее нас и всех поработят?» заранее неправильный. В нём слишком много скрытых условий, которые принимаются как данность.

Что мы имеем в виду под «станут умнее нас»? Значит мы подразумеваем, что существует некая единая шкала интеллекта, наверху которой находится человек, собаки пониже, а глупые голуби в самом низу? Получается человек должен превосходить нижестоящих животных во всём, так?

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

Ну и ещё один вопрос – почему мы заранее считаем, что возможности человеческого мозга ограничены? Часто можно увидеть графики, на которых технологический прогресс обозначен экспонентой, а возможности людей константой. Но так ли это?

Вот попробуйте прямо сейчас в уме умножить 1680 на 950. Да, вы даже пытаться не станете. Но дай вам калькулятор, это займёт две секунды. Значит ли это, что вы только что расширили возможности своего мозга с помощью калькулятора? Можно ли продолжать их расширять другими машинами? Если вы, например, используете заметки на телефоне – значит ли это, что вы расширяю свою память с помощью машины?

Получается, мы уже успешно расширяем способности нашего мозга с помощью машин.

Did you like this article?
СЛЕДУЮЩИЕ МАТЕРИАЛЫ