Машинное обучение для всех

Простыми словами. С реальными примерами. Да, снова

Это Билли. Билли хочет купить машину. Он пытается подсчитать, сколько ему нужно откладывать ежемесячно для этого. Он просмотрел десятки объявлений в Интернете и узнал, что новые автомобили стоят около 20 000 долларов, подержанные годовалые — 19 000 долларов, двухлетние — 18 000 долларов и так далее.

Билли, наш гениальный аналитик, начинает видеть закономерность: значит, цена автомобиля зависит от его возраста и падает на 1000 долларов каждый год, но не опускается ниже 10 000 долларов США.

С точки зрения машинного обучения Билли изобрел регрессию — он предсказал значение (цену) на основе известных исторических данных. Люди делают это все время, когда пытаются оценить разумную стоимость подержанного iPhone на eBay или выяснить, сколько ребрышек купить для вечеринки с барбекю. 200 грамм на человека? 500?

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

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

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

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

Это было рождением машинного обучения.

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

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

Данные Хотите обнаружить спам? Получите образцы спам-сообщений. Хотите прогнозировать акции? Найдите историю цен. Хотите узнать предпочтения пользователей? Проанализируйте их активность в Facebook (нет, Марк, хватит собирать, хватит!). Чем разнообразнее данные, тем лучше результат. Десятки тысяч строк — это минимум для отчаянных.

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

Автоматический подход дешевле — вы собираете все, что можете найти, и надеетесь на лучшее.

Некоторые умники, такие как Google, используют своих клиентов для бесплатной маркировки данных. Помните ReCaptcha, которая заставляет вас «Выбрать все уличные знаки»? Это именно то, что они делают. Бесплатная рабочая сила! Хороший. На их месте я бы начал показывать капчу все больше и больше. О, подожди…

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

Функции Также известны как параметры или переменные. Это может быть пробег автомобиля, пол пользователя, курс акций, частота слов в тексте. Другими словами, это те факторы, на которые машина должна обращать внимание.

Когда данные хранятся в таблицах, все просто — функции — это имена столбцов. Но какие они, если у вас есть 100 Гб фотографий котов? Мы не можем рассматривать каждый пиксель как функцию. Вот почему выбор правильных функций обычно занимает больше времени, чем все остальные части машинного обучения. Это также основной источник ошибок. Мясные мешки всегда субъективны. Они выбирают только функции, которые им нравятся или которые они считают «более важными». Пожалуйста, не будь человеком.

Алгоритмы Наиболее очевидная часть. Любую проблему можно решить по-разному. Выбранный метод влияет на точность, производительность и размер конечной модели. Но есть один важный нюанс: если данные дерьмовые, то даже самый лучший алгоритм не поможет. Иногда это называют «мусор на входе — мусор на выходе». Так что не обращайте слишком много внимания на процент точности, попробуйте сначала получить больше данных.

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

Искусственный интеллект — это название целой области знаний, похожей на биологию или химию.

Машинное обучение — это часть искусственного интеллекта. Важная часть, но не единственная.

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

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

Общее правило — сравнивать вещи на одном уровне. Вот почему фраза «заменят ли нейронные сети машинное обучение» звучит как «заменят ли колеса автомобили». Уважаемые СМИ, это сильно подрывает вашу репутацию.

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

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

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

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

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

Крупные технологические компании являются большими поклонниками нейронных сетей. Очевидно. Для них точность в 2% — это дополнительные 2 миллиарда дохода. Но когда ты маленький, это не имеет смысла. Я слышал истории о командах, которые потратили год на новый алгоритм рекомендаций для своего веб-сайта электронной коммерции, прежде чем обнаружили, что 99% трафика поступает из поисковых систем. Их алгоритмы были бесполезны. Большинство пользователей даже не открывали главную страницу.

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

Классическое машинное обучение часто делится на две категории — Обучение с учителем и Обучение без учителя.

В первом случае у машины есть «надзиратель» или «учитель», который дает машине все ответы, например, кошка на картинке или собака. Учитель уже разделил (пометил) данные на кошек и собак, и машина использует эти примеры для обучения. По одному. Собака за кошкой.

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

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

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

Сегодня используется для:
— фильтрации спама
— определения языка
— поиска похожих документов
— анализа тональности
— распознавания рукописных символов и цифр
- Обнаружение мошенничества

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

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

Машинное обучение в основном связано с классификацией вещей. Машинка здесь как ребенок учится сортировать игрушки: вот робот, вот машинка, вот робо-машинка… Ой, подождите. Ошибка! Ошибка!

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

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

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

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

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

Для этого у нас есть Дерева решений. Все данные автоматически делятся на вопросы да/нет. С человеческой точки зрения они могут показаться немного странными, например, зарабатывает ли кредитор больше $128,12? Однако машина придумывает такие вопросы, чтобы наилучшим образом разделить данные на каждом этапе.

Вот так делается дерево. Чем выше ветка — тем шире вопрос. Любой аналитик может взять это и объяснить потом. Он может и не понять, но объяснить легко! (типичный аналитик)

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

Двумя наиболее популярными алгоритмами формирования деревьев являются CART и C4.5.

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

Когда вы что-то гуглите, это именно кучка тупых деревьев, которые ищут для вас ряд ответов. Поисковые системы любят их, потому что они быстрые.

Машины опорных векторов (SVM) по праву являются самым популярным методом классической классификации. С его помощью классифицировали все существующее: растения по внешнему виду на фотографиях, документы по категориям и т. д.

Идея SVM проста — он пытается провести две линии между вашими точками данных с наибольшим расстоянием между ними. Посмотрите на картинку:

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

Сегодня нейронные сети чаще используются для классификации. Ну, для этого они и созданы.

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

Всего пять лет назад можно было найти классификатор лиц, построенный на SVM. Сегодня проще выбирать из сотен предварительно обученных сетей. Однако для спам-фильтров ничего не изменилось. Они все еще написаны с помощью SVM. И нет веских причин переключаться с него куда-либо.

Даже на моем сайте обнаружен спам на основе SVM в комментариях ¯_(ツ)_/¯

«Проведите линию через эти точки. Да, это машинное обучение».

Сегодня это используется для:

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

Популярными алгоритмами являются Линейная и Полиномиальная регрессии.

Регрессия — это в основном классификация, в которой мы прогнозируем число вместо категории. Примерами являются цена автомобиля по пробегу, трафик по времени суток, объем спроса по росту компании и т. д. Регрессия идеальна, когда что-то зависит от времени.

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

Когда линия прямая — это линейная регрессия, когда кривая — полиномиальная. Это два основных типа регрессии. Остальные более экзотичны. Логистическая регрессия — черная овца в стаде. Не позволяйте этому обмануть вас, так как это метод классификации, а не регрессии.

Однако можно возиться с регрессией и классификацией. Многие классификаторы после некоторой настройки превращаются в регрессионные. Мы можем не только определить класс объекта, но и запомнить, насколько он близок. Вот и регресс.

Unsupervised придумали чуть позже, в 90-х. Он используется реже, но иногда у нас просто нет выбора.

Размеченные данные — это роскошь. Но что, если я хочу создать, скажем, автобусный классификатор? Должен ли я вручную фотографировать миллионы долбаных автобусов на улицах и маркировать каждый из них? Ни в коем случае, на это уйдет целая жизнь, а у меня до сих пор так много игр, в которые я не играл в своей учетной записи Steam.

В этом случае надежды на капитализм немного. Благодаря социальному расслоению у нас есть миллионы дешевых рабочих и сервисов вроде Механического турка, готовых выполнить вашу задачу за 0,05 доллара. И вот как обычно дела обстоят здесь.

Или вы можете попробовать использовать неконтролируемое обучение. Но я не могу вспомнить ни одного хорошего практического применения для этого. Обычно он полезен для исследовательского анализа данных, но не в качестве основного алгоритма. Специально обученный мясник с оксфордским дипломом скармливает машине тонну мусора и наблюдает за ней. Есть кластеры? Нет. Какие-то видимые отношения? Нет. Ну, тогда продолжайте. Вы хотели работать в области науки о данных, верно?

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

В настоящее время используются:

Популярные алгоритмы: K-means_clustering, Mean-Shift, DBSCAN.

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

Отличный пример кластеризации — маркеры на веб-картах. Когда вы ищете все веганские рестораны поблизости, механизм кластеризации группирует их в BLOB-объекты с номером. В противном случае ваш браузер завис бы, пытаясь отобразить все три миллиона веганских ресторанов в этом хипстерском центре.

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

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

Однако у вас могут возникнуть проблемы с цветами, такими как голубые◼︎ цвета. Он зеленый или синий? А вот и алгоритм К-средних.

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

Все сделано. Кластеры определенные, стабильные, и их ровно 32. Вот более реалистичное объяснение:

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

K-means здесь не подходит, но DBSCAN может помочь. Допустим, наши точки — это люди на городской площади. Найдите любых трех человек, стоящих рядом друг с другом, и попросите их взяться за руки. Затем скажите им, чтобы они начали хватать за руки тех соседей, до которых они могут дотянуться. И так далее, и так далее, пока никто другой не сможет взять чью-либо руку. Это наш первый кластер. Повторяйте процесс, пока все не будут сгруппированы. Сделанный.

Приятный бонус: человек, которому не с кем держаться за руку — это аномалия.

В движении все выглядит круто:

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

Этот подход работает не так хорошо по сравнению с классификационным, но попробовать никогда не помешает.

"Объединяет отдельные функции в более высокоуровневые"

В настоящее время используется для:

Популярные алгоритмы: Анализ главных компонентов (PCA), Разложение по сингулярным значениям (SVD), Скрытое распределение Дирихле (LDA), Скрытый семантический анализ (LSA, pLSA, GLSA), t-SNE (для визуализация)

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

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

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

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

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

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

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

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

"Ищите шаблоны в потоке заказов"

В настоящее время используется:

  • Для прогнозирования продаж и скидок
  • Для анализа товаров, купленных вместе
  • Для размещения продуктов на полках
  • Для анализа шаблонов веб-серфинга

Популярные алгоритмы: Априори, Евклат, FP-рост

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

Скажем, покупатель берет шесть банок пива и идет к кассе. Должны ли мы положить арахис на пути? Как часто люди покупают их вместе? Да, это, вероятно, работает для пива и арахиса, но какие еще последовательности мы можем предсказать? Может ли небольшое изменение в расположении товаров привести к значительному увеличению прибыли?

То же самое касается электронной коммерции. Там задача еще интереснее — что клиент купит в следующий раз?

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

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

"Бросьте робота в лабиринт и дайте ему найти выход"

В настоящее время используется для:

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

Наконец, мы добираемся до чего-то похожего на настоящий искусственный интеллект. Во многих статьях обучение с подкреплением помещается где-то посередине между обучением с учителем и обучением без учителя. У них нет ничего общего! Это из-за имени?

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

Нейросеть играет Марио

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

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

Более действенный способ здесь — построить виртуальный город и позволить беспилотному автомобилю сначала научиться всем своим премудростям. Именно так мы сейчас обучаем автопилотов. Создайте виртуальный город на основе реальной карты, заселите его пешеходами и дайте машине научиться убивать как можно меньше людей. Когда робот будет достаточно уверен в этой искусственной GTA, его можно будет испытать на реальных улицах. Веселье!

Может быть два разных подхода — на основе модели и без модели.

Model-Based означает, что автомобиль должен запоминать карту или ее части. Это довольно устаревший подход, поскольку бедная беспилотная машина не может запомнить всю планету.

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

Помните новость о том, что ИИ побеждает топ-игрока в игре Го? Несмотря на то, что незадолго до этого было доказано, что количество комбинаций в этой игре больше, чем количество атомов во Вселенной.

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

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

Такая машина может тестировать миллиарды ситуаций в виртуальной среде, запоминая, какие решения привели к большему вознаграждению. Но как он может отличить ранее увиденные ситуации от совершенно новой? Если беспилотный автомобиль стоит на перекрестке и загорается зеленый сигнал светофора — значит, теперь он может двигаться? Что делать, если по улице мчится скорая помощь?

Сегодня ответ никто не знает. Нет простого ответа. Исследователи постоянно ищут его, но пока только находят обходные пути. Некоторые жестко запрограммировали все ситуации вручную, что позволило им решать исключительные случаи, такие как проблема тележки. Другие углубились бы и позволили нейронным сетям разобраться в этом. Это привело нас к эволюции Q-обучения под названием Deep Q-Network (DQN). Но и они не панацея.

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

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

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

Человечество так и не смогло придумать задачи, где они были бы эффективнее других методов. Но они отлично подходят для студенческих экспериментов и позволяют людям без особых усилий заинтересовать своих университетских руководителей «искусственным интеллектом». И ютубу бы понравилось.

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

В настоящее время используется для:

  • Все, что подходит к классическому алгоритму (но работает лучше)
  • Поисковые системы (★)
  • Компьютерное зрение
  • Обнаружение объекта

Популярные алгоритмы: Random Forest, Gradient Boosting.

Пришло время современных, взрослых методов. Ансамбли и нейронные сети — два главных бойца, прокладывающих нам путь к сингулярности. Сегодня они дают самые точные результаты и широко используются в производстве.

Однако сегодня весь ажиотаж достался нейронным сетям, а такие слова, как «буст» или «бэггинг», — редкость для хипстеров на TechCrunch.

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

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

Собственно, это то, что нам нужно.

Мы можем использовать любой известный нам алгоритм для создания ансамбля. Просто добавьте кучу классификаторов, приправьте регрессией и не забудьте измерить точность. Из моего опыта: даже не пробуйте здесь байесовский или kNN. Хотя они и «тупые», они действительно стабильны. Это скучно и предсказуемо. Как твой бывший.

Вместо этого есть три проверенных в боях метода создания ансамблей.

Стекирование Вывод нескольких параллельных моделей передается в качестве входных данных последней, которая принимает окончательное решение. Как та девушка, которая спрашивает своих подружек, встречаться ли с тобой, чтобы самой принять окончательное решение.

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

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

Бэггинг или Bootstrap AGGregatING. Используйте тот же алгоритм, но обучите его на разных подмножествах исходных данных. В итоге — просто средние ответы.

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

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

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

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

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

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

Хотите реальный пример прокачки — откройте Facebook или Google и начните вводить поисковый запрос. Слышите ли вы, как армия деревьев ревет и бьется друг о друга, чтобы отсортировать результаты по релевантности? Это потому, что они используют повышение.

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

Используется сегодня для:

Популярные архитектуры: Персептрон, Сверточная сеть (CNN), Рекуррентные сети (RNN), Автоэнкодеры.

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

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

Вот пример простого, но полезного в жизни нейрона: суммировать все числа с входов и, если эта сумма больше N — дать в результате 1. В противном случае — ноль.

Связи похожи на каналы между нейронами. Они соединяют выходы одного нейрона со входами другого, чтобы посылать друг другу цифры. Каждое соединение имеет только один параметр — вес. Это как сила соединения для сигнала. Когда число 10 проходит через соединение с весом 0,5, оно превращается в 5.

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

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

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

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

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

После того, как мы построили сеть, наша задача состоит в том, чтобы назначить правильные пути, чтобы нейроны правильно реагировали на поступающие сигналы. Настало время вспомнить, что у нас есть данные, которые представляют собой образцы «входов» и «выходов». Мы покажем нашей сети рисунок той же цифры 4 и скажем ей: «Адаптируйте свои веса, чтобы всякий раз, когда вы видите этот ввод, ваш вывод выдавал 4».

Начнем с того, что все веса назначаются случайным образом. После того, как мы показываем ему цифру, он выдает случайный ответ, потому что веса еще не правильные, и мы сравниваем, насколько этот результат отличается от правильного. Затем мы начинаем перемещаться по сети в обратном направлении от выходов к входам и говорим каждому нейрону: «Эй, ты действительно активировался здесь, но ты проделал ужасную работу, и все пошло на юг отсюда вниз, давайте меньше обращать внимание на эту связь и больше на ту, ладно? '.

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

Мое второе любимое видео подробно описывает этот процесс, но все же очень доступно.

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

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

А затем десять лет назад глубокое обучение поднялось.

В 2012 году сверточные нейронные сети одержали сокрушительную победу в конкурсе ImageNet, заставившую мир внезапно вспомнить о методах глубокого обучения, описанных в далеких 90-х. Теперь у нас есть видеокарты!

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

Расскажу о двух основных на сегодняшний день видах.

Сверточные нейронные сети сейчас в моде. Они используются для поиска объектов на фотографиях и в видео, распознавания лиц, передачи стиля, генерации и улучшения изображений, создания эффектов типа замедленной съемки и улучшения качества изображения. В настоящее время CNN используются во всех случаях, связанных с изображениями и видео. Даже в вашем iPhone некоторые из этих сетей просматривают ваши обнаженные тела, чтобы обнаружить в них объекты. Если есть что обнаружить, хех.

Изображение выше — результат, созданный Detectron, исходный код которого недавно был открыт Facebook.

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

Проблем с рукоделием много.

Во-первых, если кошка опустила уши или отвернулась от камеры: у вас проблемы, нейросеть ничего не увидит.

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

Таким образом, это означает, что машина должна изучать такие функции самостоятельно, опираясь на базовые линии. Сделаем следующее: сначала разобьем все изображение на блоки размером 8x8 пикселей и каждому присвоим тип доминирующей линии — либо горизонтальную [-], либо вертикальную [|], либо одну из диагоналей [/]. Также может быть, что несколько будут сильно видны — это случается, и мы не всегда абсолютно уверены.

Результатом будет несколько таблиц палочек, которые на самом деле являются простейшими функциями, представляющими края объектов на изображении. Это изображения сами по себе, но построенные из палочек. Итак, мы можем еще раз взять блок 8x8 и посмотреть, как они сочетаются друг с другом. И снова и снова…

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

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

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

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

Для этого у меня даже есть годный несмешной анекдот:

Дайте вашей нейронной сети рыбу, и она сможет обнаруживать рыбу до конца своей жизни. Дайте вашей нейронной сети удочку, и она сможет обнаруживать удочки до конца своей жизни…

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

Помните Microsoft Sam, синтезатор речи старой школы из Windows XP? Этот забавный парень строит слова буква за буквой, пытаясь склеить их вместе. Теперь посмотрите на Amazon Alexa или Assistant от Google. Они не только четко произносят слова, но и расставляют правильные акценты!

Нейронная сеть пытается говорить

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

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

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

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

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

Так появились рекуррентные сети.

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

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

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

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

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

Просто, но это работает!

Вы можете брать образцы речи из любого места. BuzzFeed, например, взял выступления Обамы и обучил нейронную сеть имитировать его голос. Как видите, аудиосинтез — это уже простая задача. С видео еще есть проблемы, но это вопрос времени.

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

Первоначально опубликовано на https://vas3k.com 21 ноября 2018 г.