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

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

Машинное обучение имеет долгую историю, и если мы посмотрим на его временную шкалу, то увидим, что знаменитая Теорема Байеса датируется 1763 годом. Компьютеры, играющие в нарды, и IBM Deep Blue, выигравшие чемпиона мира по шахматам Каспарова, датируются 1992 и 1997 годами соответственно.

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

Что такое машинное обучение?

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

«Говорят, что компьютерная программа учится на опыте E в отношении некоторого класса задач T и меры производительности P, если ее производительность при выполнении задач в T, измеряемый параметром P, улучшается с опытом E».

Том М. Митчелл

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

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

Что, если мы хотим построить систему для обнаружения спама в электронной почте? Если мы просто решим создать множество условных операторов, таких как if и else, возможно, нам потребуются сотни или тысячи простых условий, вероятно, основанных на символах/строках из заголовка или содержимого электронной почты. Помимо этой проблемы, как мы можем обновлять нашу систему? Каждый новый спам может привести к большему количеству условных утверждений, так что это не очень хорошая идея, согласны? Вручную обновлять довольно скучно, и со временем появляется тенденция иметь все больше и больше утверждений.

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

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

Типы машинного обучения

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

Неконтролируемое обучение

Этот вид обучения состоит в создании кластеров в заданном наборе данных. Представьте, что у вас есть N выборок с K признаками (если бы мы говорили о структуре человека, такими признаками могли бы быть рост и вес). После того, как мы собрали данные, можно представить каждую выборку по ее стоимостным характеристикам. Представьте, что у нас есть потребители, и у каждого из них есть множество характеристик, например, что они покупают, сколько платят, сколько раз посещают магазин. Было бы интересно, если бы мы могли найти группы потребителей со схожими характеристиками и попытаться сопоставить новых потребителей с одной из этих групп, чтобы мы могли сделать конкретный подход и сделать предложения более интересными.

Выше вы видите три кластера, каждый из которых должен иметь высокую однородность среди выборок внутри кластеров и высокую гетерогенность между любыми другими кластерами. К счастью, каждый образец имеет только две функции X1 и X2, но если у нас есть более трех функций, мы не сможем построить график, иллюстрирующий кластеры. K-means — известный и простой алгоритм обучения без учителя. В K-средних наши кластеры основаны на прототипах, где выборка принадлежит ближайшему прототипу кластера.

контролируемое обучение

Это самый распространенный тип машинного обучения. Мой первый контакт с машинным обучением был с использованием контролируемых методов. В этом случае нам нужно пометить каждый из наших образцов. Машине необходимо учиться, используя помеченные данные, и каждый новый ввод будет получать прогноз на основе этого контролируемого метода. В 2019 и 2020 годах я работал с этим типом машинного обучения. В 2019 году я смог разработать свою собственную систему подсчета насекомых, в которой я использовал методы обработки изображений, чтобы найти насекомых на изображении и извлечь признаки из их контура, я создал таблицу с характеристиками контура и соответствующими метками, в нашем случае: количество насекомые. После этого я применил случайный лес для классификации количества насекомых. Система была достаточно проста, чтобы работать на Raspberry Pi Zero. К сожалению, я не могу поделиться изображениями с контурами или созданной мной таблицей, но вы можете получить некоторое представление из изображения ниже.

В 2020 году начинаю работать с распознаванием лиц. Мой первый контакт с этой проблемой был в 2019 году в моем выпускном проекте по предмету в моем университете. Здесь мы можем найти некоторые интересные проекты, которые я сделал в области компьютерного зрения. Изначально я использовал библиотеку face_recognition на питоне. Однако мне нужен был более надежный способ сделать это в реальных условиях, поэтому я просто перешел на FaceNet из Google (FaceNet: унифицированное встраивание для распознавания лиц и кластеризации). По сути, мы извлекаем 128 признаков из изображения лица и классифицируем их, представьте, что у нас есть тысячи лиц, то есть векторы признаков, если мы хотим узнать вас, мы просто берем евклидово расстояние до этих векторов и классифицируем их как ближайший вектор. . Обычно у нас есть более одного вектора для одного и того же человека, поэтому рекомендуется использовать KNN и выбрать наиболее часто встречающегося человека из этих k ближайших соседей.

Обучение с подкреплением

Этот тип обучения действительно интересен и отличается от других, упомянутых ранее. Теперь вам нужно иметь агента в заданной среде, где каждое действие вознаграждается, поэтому хорошие действия получают положительные награды, а плохие действия — штрафы или отрицательные вознаграждения. Мой первый контакт с обучением с подкреплением был в мае этого года. Я начал читать книгу Саттона и Барто Обучение с подкреплением: введение. В этой книге мы изучим основы обучения с подкреплением и основные техники. Обучение с подкреплением приобретает актуальность и с каждым годом у нас появляется все больше и больше техник. Некоторые методы, такие как PPO, DDPG, A2C, дают потрясающие результаты. Одним из интересных приложений является проектирование игровых уровней, я рекомендую эту замечательную статью: PCGRL — Генерация процедурного контента с помощью обучения с подкреплением.

Проблемы прикладного машинного обучения

Когда нам нужно иметь дело с машинным обучением, у нас есть две основные проблемы: проблемы с данными и проблемы с подбором алгоритмов. Что касается проблем с данными, у нас небольшое количество данных, нерепрезентативные данные, плохо собранные данные, выбросы, коллинеарность. Если у вас плохие данные, у вас будет плохая модель машинного обучения, потому что «мусор на входе — мусор на выходе». Поэтому довольно часто приходится тратить много времени на работу с данными, пытаясь понять их и получить от них пользу. Этот процесс называется исследовательским анализом данных, и, возможно, это будет самая важная часть вашего пайплайна.

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

Тестирование и оценка

При создании модели машинного обучения важно иметь 3 набора данных: обучающий, проверочный и тестовый. Данные обучения используются для соответствия вашей модели, проверка поможет точно настроить, где вы можете использовать такие методы, как поиск по сетке или случайный поиск. Тестовые данные — это место, где вы проверяете, насколько хорошо ваша модель обобщает данные из набора обучающих данных. Тестовые данные должны использоваться только в конечном конвейере. Если вы используете тестовые данные для настройки гиперпараметров, вы столкнетесь с такими проблемами, как утечка данных. Я очень рекомендую эту книгу: Жажда машинного обучения. Эндрю Нг говорит о важных темах, и этот материал, который открывает мне глаза, действительно представляет собой данные для обучения, проверки и тестирования. Я также хотел бы сказать, что если у вас небольшой набор данных, вероятно, вы собираетесь использовать методы перекрестной проверки, такие как K-fold. Разделение данных при обучении и валидации — это лишь один из способов справиться с валидацией, вы можете изучить больше.

Дополнительный раздел

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