Что вообще такое машинное обучение? Как машина может чему-то учиться? Говорит ли это о наличии у компьютера разума? В первой части книги мы поговорим о широком контексте нашего предмета изучения - о том, что отличает машинное обучение от других отраслей информационных наук, при чем здесь искусственный интеллект и науки о данных. Еще упомянем какими предварительными знаниями нужно обладать чтобы начать работать в машинном обучении.
Машинное обучение сегодня - очень популярная тема в среде программистов и не только. При знакомстве с этой сферой мы встречаем множество терминов, которые могут легко запутать новичков. Прежде всего, давайте разберемся, что такое машинное обучение, чем оно отличается от искусственного интеллекта и причем здесь науки о данных. Стоит отметить, что вокруг этой темы существует большое количество мифов и заблуждений, которым подвержены даже специалисты в смежных отраслях.
Многие воспринимают машинное обучение и искусственный интеллект как некую “магию”, которую можно просто “включить” и любая задача будет решаться автоматически. К сожалению, это не так. Каждую конкретную прикладную задачу надо решать индивидуально, а машинное обучение, как и интеллектуальные технологии - это всего лишь продвинутые инструменты решения сложных задач.
Самый широкий термин, относящийся к этой теме - это искусственный интеллект. Еще в середине 20-го века ученые и программисты стали разрабатывать программы, которые имитировали естественные процессы. Иногда такие алгоритмы становились полезными для решения определенных задач, которые было сложно или почти невозможно решить традиционным алгоритмическим программированием. Например, генетические алгоритмы - это очень удобный механизм оптимизации определенных неявно заданных функций, который вдохновлялся процессом биологической эволюции. Совокупность таких методов со временем стали называть искусственным интеллектом (ИИ, AI, artificial intelligence) - так как это была попытка сымитировать естественные мыслительные процессы. Все методы и алгоритмы искусственного интеллекта объединяет одно - попытка решить какую-то вычислительную задачу неявно, без подробного описания прямого алгоритма, шаг за шагом приводящего к решению поставленной проблемы.
К технологиям искусственного интеллекта относится множество методов, алгоритмов и методик. Их всех объединяет одно - стремление эмулировать поведение человека или других природных объектов. Надо различать сильный и слабый искусственный интеллект. “Сильный” искусственный интеллект (strong AI) - это попытка создать мыслящую машину, разумный компьютер, который сравнится по когнитивным способностям с человеком, а может - и превзойдет его. Так воспринимают ИИ обыватели, философы и писатели-фантасты. Но надо понимать, что на сегодняшний день в прикладной науке такая задача даже не стоит. Мы еще слишком плохо понимаем в принципе природу разума, еще слишком ограничены в вычислительных возможностях, чтобы задумываться о разумных алгоритмах. Все ученые, которые занимаются интеллектуальными технологиями решают задачи так называемого “слабого” ИИ (weak AI) - то есть создают методы и алгоритмы, которые решают четко определенный класс задач. Они не претендуют на общую “разумность”, но в своей узкой сфере могут бесспорно превосходить человека.
Искусственный интеллект - это способ заставить компьютер решить определенную задачу без описания явного алгоритма решения задачи через имитацию естественных и биологических процессов..
Например, сейчас известны алгоритмы, которые умеют играть в шахматы лучше, чем любой гроссмейстер. Однако такая программа не может построить диалог, не может узнать объект на картинке, она не умеет решать такие задачи в принципе. И наоборот, программа распознавания картинок не сможет синтезировать речь, проанализировать тематику текста и так далее. Вопрос того, насколько программа “понимает” окружающий мир, насколько она разумна - оставим философам. Мы будем говорить о прикладных методах создания таких интеллектуальных программ.
Основная характеристика интеллектуальных технологий (методов, алгоритмов и инструментов, относящихся к ИИ) - способность сформулировать задачу не напрямую, а косвенно. Так, чтобы можно было ее решить без составления явного алгоритма. Этим интеллектуальные технологии существенно отличаются от классического программирования. В нем, чтобы решить задачу нужно прописать явный и подробный алгоритм действий, который шаг за шагом приводит к точному решению задачи, или к выполнению определенных действий. В интеллектуальном программировании мы представляем задачу так, чтобы можно было решить ее “не решая”. Конкретные способы этого разнятся. Поэтому такой подход и называется искусственным интеллектом - складывается впечатление, что машина сама учится решать определенную задачу. И как раз машинное обучение - это один из способов такого неявного решения задач.
Именно поэтому машинное обучение и искусственный интеллект сейчас так популярны. Они дают возможность подступиться к решению таких задач, которые считались попросту невозможными для классического программирования. Например, сейчас вовсю разрабатываются беспилотные автомобили. Представьте, чего стоило бы написать явный алгоритм для автоматического водителя. Даже если оставить за скобками задачу распознавания образов на картинке или видео (что само по себе нетривиально и очень сложно), то даже профессиональный водитель сам наверняка не сможет написать подробную и исчерпывающую инструкцию, что нужно делать в каждой возможной ситуации. Слишком много будет внешних факторов, условий, вариантов и развилок. Такая программа будет просто слишком сложна, чтобы кто-то смог ее полностью понимать. И, конечно, ее просто невозможно будет проверять, тестировать и поддерживать.
Машинное обучение (МО, ML, machine learning) предлагает другой подход к решению таких задач. Нам просто надо собрать много данных о том, в каких ситуациях какие правильные действия нужно сделать, и подобрать достаточно сложную, “емкую” модель, которая сможет подстроить свое поведение под эти данные. Если данных будет достаточно для “покрытия” всех возможных ситуаций, то и модель сможет принимать правильные решения в таких ситуациях и в похожих на те, что она видела при своем “обучении”. Конечно, это довольно неформальное определение, более строго мы определим и модели и данные и алгоритмы обучения дальше.
Машинное обучение - это численная оптимизация параметрических моделей для описания определенного набора данных.
Поэтому именно с помощью машинного обучения сейчас стали решаться задачи, которые раньше считались чисто “человеческими” - распознавание визуальных образов, обработка текстов на естественных языках, задачи принятия сложных решений - все это стало возможно автоматизировать при помощи интеллектуальных систем. И машинное обучение является самой универсальной и популярной методикой в технологиях искусственного интеллекта. Некоторые задачи решаются другими интеллектуальными методами, но абсолютное большинство - именно машинным обучением.
Машинное обучение строится на основе определенных “примитивов” - конкретных моделей, которые решают простые задачи - такие как регрессия и классификация. Комбинируя такие “простые” задачи можно строить более сложные системы, которые направлены на решение более общих проблем. Поэтому при изучении машинного обучения сначала всегда знакомятся с простыми моделями, а потом - с их более прикладными сложными вариантами. Так и мы сконцентрируем свое внимание именно на понимании работы таких элементарных алгоритмов и моделей. И в их основе лежат довольно простые математические модели. Это фундаментальный уровень машинного обучения: на нем все основывается и без него ничего не работает. А понять сложные прикладные модели невозможно без понимания общих принципов. О них мы и поговорим далее.
Отличительная черта машинного обучения, которая выделяет его среди других методов искусственного интеллекта - это то, что модели машинного обучения работают на основе подстройки к определенному набору данных. Этот набор данных должен быть предварительно собран, приведен к определенному виду, и, желательно, проанализирован. Поэтому машинное обучение, как никакая другая сфера искусственного интеллекта, работает с данными и связана с такой областью человеческой деятельности, как науки о данных. Науки о данных (data science) - это набор методов, алгоритмов и инструментов, предназначенных для сбора, обработки и анализа наборов данных о реальном мире. Предтечей наук о данных стала математическая статистика, но с развитием технологий искусственного интеллекта работа с данными приобрела такой размах и разнообразие, что методы работы с различными типами данных вышли за пределы обычной статистики и стали выделяться в отдельную отрасль наук. Из-за этой связи невозможно говорить о машинном обучении, не затрагивая обработку и анализ данных, так как именно данные определяют качество и полезность обученных моделей. В общем, машинное обучение и науки о данных - это пересекающиеся, но не совпадающие области. В науках о данных есть много того, что не используется в машинном обучении. И наоборот, машинное обучение - это нечто большее, чем просто анализ данных.
Традиционной сферой применения машинного обучения явлется круг тех задач, к которым непонятно, как вообще подступиться традиционными методами. Это, например, все, что связано с обработкой и интерпретацией естественного языка. Как в устной форме - распознавание речи, идентификация по голосу, синтезирование речи, распознавание эмоций в голосе. Так и в письменной - распознавание объектов на изображении, идентификация объектов, сегментация изображений, генерация изображений и видео.
Основные области применения машинного обучения:
Еще одно замечание. Когда говорят о машинном обучении зачастую вспоминают один конкретный вид моделей - искусственные нейронные сети (ИНС, artificial neural networks, ANN). Это только один из множества применяемых в машинном обучении видов моделей, однако он приобрел такую популярность и является настолько универсальным, что доминирует в этой отрасли. Особенно часто нейронные сети используются для построения очень сложных моделей. Они так устроены, что по сравнению с другими видами моделей машинного обучения (которые мы дальше будем называть классическими моделями и методами) они позволяют относительно легко строить модели с огромным количеством параметров, которые способны решать очень сложные задачи (обработка изображений, голоса, текста, видео). Поэтому методы работы с ИНС, особенно с сетями с большим количеством слоев имеет свои специфические особенности, которые сильно отличают их от других моделей машинного обучения. Из-за того, что такие сети называются глубокими, отрасль работы с ними называется глубоким обучением. Но не стоит забывать, что и кроме нейронных сетей и глубокого обучения в “классическом” машинном обучении есть еще много чего. И классическое обучение не теряет своей актуальности. А из-за того, что оно гораздо проще и понятнее новичку, и его понятия и алгоритмы используются и в глубоком, мы начнем свое изучение машинного обучения именно с классических моделей.
Глубокое обучение - подраздел машинного обучения, посвященный построению, обучению и применению глубокий искусственных нейронных сетей.
Выводы:
Источник: Medium.
Машинное обучение - это довольно сложная сфера. И его изучение, а главное - активная работа, потребует от специалиста некоторых предварительных навыков. Конечно, вы можете изучать алгоритмы и приемы машинного обучения с нуля, но это займет гораздо больше времени и сил. Поэтому здесь кратко обсудим, с какими дисциплинами пересекается машинное обучение и что нужно знать для начала его изучения.
Машинное обучение, как научная дисциплина, основывается на инструментарии математической многокритериальной оптимизации. Поэтому для понимания принципов работы основных алгоритмов требуется довольно приличное знание математики. Для понимания самого принципа обучения вам понадобятся знания из области математического анализа, а именно - дифференцирование функций нескольких переменных (multivariate calculus). Оценка качества модели, достоверности и надежности предсказания потребуют знания основ теории вероятности и математической статистики. Если вы хотите понимать доказательства работоспособности алгоритмов машинного обучения, готовьтесь применять глубокие знания в математическом анализе и линейной алгебре.
Но не надо думать, что если у вас есть пробелы в каких-то из этих смежных областей, вам полностью заказана дорога в машинное обучение и анализ данных. Данная книга как раз старается изложить главные принципы интеллектуальных технологий с минимальными предварительными требованиями. Поэтому если вам чего-то из перечисленного и не будет хватать, все равно попробуйте постигнуть основы машинного обучения. Пробелы в математике и программировании можно устранить и по мере возникновения надобности. Тем более, что так обучения пойдет даже легче - ведь вы будете знать, зачем ва изучать, например, математический анализ.
Даже если вы хотите всего лишь уметь применять простые модели, вам необходимо владеть основами программирования. Вообще, машинное обучение как раздел математики не привязан к конкретному языку программирования, но традиционно, существуют языки, более широко применяющиеся для машинного обучения и имеющие развитую систему библиотек, фреймворков и других инструментов. В частности, одним из самых распространенных языков для данных целей является Python. В его экосистеме присутствуют все необходимые библиотеки для использования практически всех существующих алгоритмов и методов машинного обучения и анализа данных.
Данная книга использует большое количество примеров на языке программирования Python. Если вы совсем не владеете программированием, то все все равно сможете ориентироваться на текстовые объяснения. Но очень рекомендуем изучить программирование (и именно на языке Python), ведь без этого невозможно на практике заниматься машинным обучением.
Для практического применения обучающихся моделей также неплохо бы владеть теорией вычислений и методами анализа асимптотик алгоритмов. Ведь машинное обучение - это часто очень вычислительно емкие программы. А поэтому, важно понимать, почему некоторые алгоритмы выполняются долго и как сделать так, чтобы они выполнялись быстрее. То есть нужно владеть хотя бы основами оптимизации алгоритмов. Хотя бы для того, чтобы не писать машинное обучение внутри трех вложенных циклов, что будет выполняться просто космически долго.
Еще один критически важный навык для специалиста по машинному обучению - уверенное владение английским языком. Хорошо это ли плохо, большинство актуальной информации по этой теме появляется именно на английском языке. И если вы хотите быть в курсе последних новостей, было бы неплохо уметь воспринимать информацию из первоисточника. Ведь перевод, если он вообще появится, может запоздать, и быть не очень адекватным.
На практике машинное обучение, как и любой анализ данных существует не в вакууме, а применяется к конкретной задаче. И для эффективной работы очень важно понимать ту предметную область, для которой вы разрабатываете и применяете модели машинного обучения. Можно не быть мировым экспертом, например, по финансовым рынкам, но если вы планируете заниматься машинным обучением для финансового анализа, то совершенно необходимо понимать хотя бы основы финансовых инструментов, главные понятия и законы. Это относится к любой сфере деятельности. К сожалению, машинное обучение еще не достигло той стадии развития, когда можно было бы просто собрать сырые данные, засунуть их в какую-то универсальную модель и получить результат. Всегда приходится обрабатывать данные руками, понимать, что оставить, что выбросить, а что преобразовать (и как именно), какие данные еще собрать, как оценить модель на адекватность. А для всего этого требуется знание предметной области.
Выводы:
Почему машинное обучение так сильно развивается именно сейчас? Какие главные компоненты необходимо обеспечить, чтобы стало возможно решить проблему методами машинного обучения? В этой главе мы ответим на эти два, казалось бы, несвязанных вопроса. Поговорим о трех главных факторах, нужных для машинного обучения.
Для того, чтобы машинное обучение смогло эффективно решить какую-то конкретную прикладную проблему, должно сложиться три главных фактора или компонента, без которого системы машинного обучения будут просто полностью бесполезны. Первый - это математический аппарат, сами модели. Прикладную задачу надо суметь сформулировать в терминах этих моделей. Обычно, надо представить практическую задачу как оптимизацию некоторой функции. С эти обычно не бывает особых проблем. Математический аппарат машинного обучения известен уже несколько десятилетий, формализовать постановку задачи - вопрос элементарной математической сноровки.
Второй обязательный элемент машинного обучения - вычислительные ресурсы. Алгоритмы численной оптимизации могут быть очень сложными, а обучение моделей поэтому может занимать большое количество процессорного времени. Поэтому в середине XX века, когда только зарождалась эта дисциплина, она не получила глобального распространения именно потому, что вычислительные мощности не были настолько доступны, как сейчас. А в настоящее время они не просто несоизмеримо больше, они еще и постоянно растут и дешевеют. Но несмотря на это большие и сложные модели и сейчас могут требовать суперкомпьютерного уровня вычислений. Но чем больше ресурсов нам становится доступно, тем более сложные задачи мы становимся способны решать. Можно сказать, что сейчас вычислительные ресурсы ограничивают множество потенциальных задач, которые нам доступны.
Но самый главный, принципиальный ограничивающий фактор - это наличие данных для обучения. Ведь без данных проведение машинного обучения в принципе невозможно. Поэтому мы можем решать только те задачи, по которым существует достаточно большой набор пригодных к использованию данных. Или если мы придумаем способ, как такие данные сгенерировать. Возьмем тот же пример с беспилотными автомобилями. Решить эту задачу явным алгоритмом решительно нельзя. А как к ней подступиться через машинное обучение? Ведь для этого нужна база данных со всеми возможными дорожными ситуациями и правильными действиями водителя. Вручную такие данные собрать или создать тоже абсолютно невозможно.
И только когда инженеры придумали способ генерировать такую обучающую выборку, наступил долгожданный прогресс в беспилотниках. В настоящее время такие данные собирают, оборудовав обычный автомобиль всем датчиками и записывая действия обычного, живого водителя и информацию с внешних сенсоров. То есть собирают набор данных “что бы сделал человек”. И так во многих других областях. Например, принципиальный прогресс в обработке естественных текстов наступил именно тогда, когда научились обучать сложные языковые модели на неразмеченных текстах. Как только мы придумываем способ генерировать большое количество данных или использовать существующие, мы учимся решать те проблемы, которые раньше не умели.
В настоящее время объем данных, которые генерирует человек в своей деятельности, экспоненциально увеличивается. Специалисты оценивают, что только за первое десятилетие XXI века человечество создало больше информации, чем за всю предыдущую свою историю. И это не только и не столько информация в виде книг, статей, картин, видео. Основной объем информации составляет всякого рода служебная информация, отражающая всяческие аспекты жизни человека: экономическая и социальная, данные о продажах товаров, услуг, биржевые сводки, логи поведения пользователей Интернет, персональных компьютеров, мобильных устройств, телефонные разговоры. Примеров собираемой информации можно придумать бесконечное количество. И с каждым днем все больше и больше аспектов каждодневного человеческого поведения не просто происходит в физической реальности, а протоколируется, сохраняется и обрабатывается теми или иными операторами обработки данных.
Кроме того, параллельно растет и объем научной информации. Астрономы собирают данные о небе с большим разрешением и в большем диапазоне частот. Биологи научились строить компьютерные модели синтеза протеинов. Медики могут наблюдать за работой человеческого тела при помощи новейших технологий визуализации. Физики строят сложнейшие математические модели и проводят грандиозные эксперименты. Все это порождает колоссальный объем информации, которую нужно хранить и анализировать.
Технологической предпосылкой для развития науки о данных послужило развитие вычислительной техники и систем хранение больших объемов информации. Это позволило сохранять практически всю информацию, которая может понадобиться в будущем. Если раньше информация хранилась и передавалась в основном в письменном виде (а еще раньше - вообще в устной форме), то сегодня мы располагаем технологиями хранения, поиска и доступа к большим объемам данных.
Конечно, мало толку просто хранить информацию. Если она не используется для анализа и извлечения знаний - она бесполезна. В достоверных данных почти всегда содержатся скрытые закономерности, тенденции, зависимости. Извлечением таких скрытых знаний в массивах информации и занимается анализ данных (data mining).
Преобразование информации в знания так или иначе сопровождается созданием каких-либо моделей реального мира. Например, анализируя какой-либо массив экономических данных мы можем проследить зависимость одного показателя от другого и, используя методы математической статистики, проверить достоверность такой зависимости и даже вывести формулу расчета одного показателя на основании другого (или нескольких других). Однако, в настоящее время информации накопилось настолько много, что вручную проанализировать такой объем при помощи людей-ученых не представляется возможным. В таком случае, в игру вступают методы машинного обучения, которые способны на основании большого объема данных самостоятельно (более или менее) построить модель задачи, алгоритм решения которой человек даже не может подробно описать.
Вспомним опять одну из весьма популярных сейчас задач - создание беспилотных автомобилей. Эту задачу невозможно решить без применения машинного обучения. Ведь, даже если вы - прекрасный водитель, вы не сможете написать подробную программу для компьютера, которая учитывала все факторы и была бы способна вести автомобиль хотя бы так же хорошо, как человек. Слишком много обстоятельств пришлось бы принимать в расчет - конфигурация дороги, разметка, наличие, положение, скорость и ускорение других автомобилей, наличие пешеходов. Кроме того, не стоит забывать, что чтобы вообще выделить такие высокоуровневые понятия как “автомобиль” и “пешеход”, их нужно распознавать на изображении с камер и сенсоров, при помощи которых беспилотный автомобиль получает информацию об окружающем мире. А это отдельная и совсем нетривиальная задача. Программировать беспилотный автомобиль без машинного обучения было бы кошмарно кропотливым, невероятно сложных и обидно неблагодарным занятием, ведь при малейшем изменении обстановки, вся логика работы программы может в корне измениться.
С другой стороны, не стоит воспринимать машинное обучение как решающую все проблемы магию, способную справиться с любой задачей. Методы машинного обучения основаны на довольно простых математических алгоритмах, имеют множество проблем и ограничений и способны решать только определенные задачи. Основные ограничения машинного обучения связаны со скоростью этого самого процесса обучения. Грамотно спроектированная модель может решать невероятно сложные задачи, например, распознавания образов. Но кто сказал, что это происходит мгновенно? Сложные глубокие нейронные сети требуют работы суперкомпьютеров и этот процесс может занимать часы, дни и даже месяцы. Хотя, более простые модели можно создавать и обучать практически мгновенно на довольно скромных вычислительных машинах.
Машинное обучение, как и другие методы искусственного интеллекта - это лишь способ, трюк, позволяющий решить какую-то сложную задачу, не решая ее явно. За это мы платим стохастичностью (то есть некоторой долей случайности), приблизительностью полученного решения, невозможностью явного доказательства его оптимальности и, зачастую, невозможностью его интерпретировать. Поэтому почти всегда если есть хоть небольшая возможность реализовать явный, строгий алгоритм решения задачи, стоит сделать именно так, а не обращаться к машинному обучению.
Выводы:
В зависимости от того, какие данные есть в нашем распоряжении, и на какой вопросы мы хотим ответить, создавая систему машинного обучения, нам будут нужны разные виды моделей. В общем, любая проблема машинного обучения может быть отнесена к одной из двух широких классов задач - обучения с учителем (иногда еще называют контролируемое обучение, supervised learning) и обучение без учителя (unsupervised learning, неконтролируемое обучение).
Есть еще обучение с подкреплением (reinforcement learning) но это очень специфический класс задач, и мы о нем не будем говорить специально. Большинство практических применений машинного обучения в экономике, промышленности и финансах относятся именно к задачам обучения либо с учителем либо без учителя.
В обучении с учителем нам предоставляется набор данных и уже известно, как должен выглядеть наш правильный вывод, имея представление о том, что между входом и выходом существует взаимосвязь. Все проблемы обучения с учителем можно представить как предсказание некоторой величины, характеристики объекта, по известным значениям других характеристик, факторов.
Задачи обучения с учителем подразделяются на проблемы регрессии и классификации. В задаче регрессии мы пытаемся предсказать результаты по непрерывной шкале, что означает, что мы пытаемся сопоставить входные переменные с некоторой непрерывной функцией. В проблеме классификации мы вместо этого пытаемся предсказать результаты в дискретной шкале. Другими словами, мы пытаемся отобразить входные переменные в дискретные категории.
Пример: учитывая данные о размерах домов на рынке недвижимости, предсказать их цену. Цена как функция цены - это непрерывная выходная переменная, поэтому это проблема регрессии. Мы могли бы превратить этот пример в проблему классификации, вместо этого сделав наш вывод о том, продает ли дом больше или меньше запрашиваемой цены. Здесь мы классифицируем дома по цене на две дискретные категории.
Вообще, почти все задачи регрессии можно переформулировать как задачи классификации. Поэтому часто в программных пакетах методы регрессии и классификации не разделяются четко как два принципиально разных класса задач. Даже если алгоритмы для решения довольно существенно различаются, между этими двумя классами задач, несомненно существует взаимосвязь.
Обучение с учителем - это задачи предсказания (моделирования) значения некоторой переменной (целевой), которые решаются путем обучения по набору данных, в которых описаны объекты с известными значениями этой переменной.
Обучение без учителя, с другой стороны, позволяет нам решать проблемы, без полного понимания, как выглядят наши результаты. Мы можем получить структуру из данных, в которых мы не обязательно знаем влияние переменных. Мы можем получить эту структуру, объединив данные на основе отношений между переменными в данных. При обучении без учителя нет обратной связи, основанной на известных значениях выходной переменной, то есть нет учителя, который бы исправил нашу модель.
Обучение без учителя - это задача поиска и описания внутренней структуры в данных, в которых не выделяется отдельно целевая переменная.
Пример - кластеризация: возьмите сборник из 1000 эссе, написанных об одной теме, и найдите способ автоматически группировать эти эссе на небольшие группы, которые каким-то образом похожи разными переменными, такими как частота слов, длина предложения, количество страниц и так далее. Другой пример: «Алгоритм коктейльной вечеринки», который может найти структуру в беспорядочных данных (например, идентификация отдельных голосов и музыки из сетки звуков на вечеринке).
Кроме кластеризации к задачам обучения без учителя относятся такие задачи как понижение размерности и обнаружение аномалий. В задачах понижения размерности мы представляем данный набор многомерных секторов в пространстве значительно меньшей размерности так, чтобы потерять как можно меньше информации. Эта задача полезна для нахождения оптимального алгоритма сокращения объема данных, для оптимальной визуализации данных, для сокращение количества признаков. В задаче обнаружения аномалий мы пытаемся найти такие объекты в некоторой выборке, которые по совокупности своих характеристик значительно отличаются от остальных. Можно заметить, что все задачи обучения без учителя - это по сути задачи обнаружения внутренней структуры в данных.
Многие ошибочно полагают, что то, какую модель нужно использовать, зависит от имеющихся данных. Например, если в данных есть ответы - это задача обучения с учителем, а если нет - то без учителя. Это неправильно. Два этих класса задач принципиально разные и отвечают на совершенно разные вопросы о данных и об объектах предметной области. То есть нужно подбирать данных исходя из поставленной задачи, а не выбирать модели исходя из данных.
В основе любой задачи машинного обучения лежит модель. Модель машинного обучения - это некоторая параметрическая функция, которая может выдавать разные значения на выходе, в зависимости от значений на входе и своих внутренних параметров. Причем, эти внутренние параметры - численные, их оптимальные значения как раз и подбираются в процессе обучения. А вот сами эти модели могут принимать разные формы.
Выводы:
Мы уже вплотную подошли к главному определяющему вопросу: а как вообще машина может учиться? И что значит, “машина”? В этой главе поговорим о том, как понимается в науках о данных термин “обучение”. Ведь его определение может не совпасть с тем, что вы себе представляете, когда говорите это слово в обиходе.
В настоящее время общепринятыми являются два определения машинного обучения. Артур Самуэль определяет его как «поле обучения, которое дает компьютерам возможность учиться, не будучи явно запрограммированным». Это более старое, неформальное определение. И в контексте более широкого обсуждения, это определение больше подходит именно технологиям искусственного интеллекта.
Том Митчелл предлагает более современное определение:
Говорят, что компьютерная программа обучается на основе опыта E по отношению к некоторому классу задач T и меры качества P, если качество решения задач из T, измеренное на основе P, улучшается с приобретением опыта E.
(Том Митчелл)
В этом определении явно прослеживаются три главных компонента машинного обучения - опыт (данные), задача (модель) и метрика. Эти три принципиальные составляющие существуют в любой задаче, которую представляют как задачу машинного обучения. И без них машинное обучение невозможно. Они же соотносятся с ключевыми факторами развития машинного обучения, которые мы рассматривали в предыдущей главе.
Рассмотрим простой пример задачи, которую можно решить при помощи машинного обучения: игра в шашки. В такой задаче, чтобы рассматривать ее как потенциальную задачу машинного обучения необходимо формализовать три главные части задачи, например, таким образом:
Таким образом, если мы можем сформулировать три этих аспекта в виде математических формул или программных алгоритмов, мы можем начать решать эту задачу методами машинного обучения.
Так в чем же конкретно заключается процесс машинного обучения? Под обучением здесь понимается процесс подбора параметров некоторой численной модели таким образом, чтобы она наилучшим образом соответствовала определенному набору данных. Это более конкретное определение, которое аналогично по своей структуре формулировке Митчелла и содержит три основных компонента:
Как мы уже говорили использование наборов данных - отличительная черта систем машинного обучения. Нельзя переоценить то, насколько важны правильные данные для эффективной работы всей системы. Как и во многих других областях здесь работает правило “garbage in - garbage out”, то есть качество и релевантность данных напрямую влияет на эффективность обученной системы. Другими словами, если у вас плохой, недостаточный, нерелевантный набор данных, в них есть пропуски, выбросы, систематические ошибки - то уже совершенно неважно, насколько крутую модель вы используете, все равно на выходе получится неэффективная система. Модели подстраиваются под данные, поэтому обработка данных, их анализ, сбор, очистка - это очень важные части технологий машинного обучения. Так что данные не зря стоят на первом месте в этой тройке - именно они определяют качество работы интеллектуальной системы.
Что касается самих моделей - то их существует огромное множество. И в этом курсе мы познакомимся с некоторыми их них. Но всех их объединяют следующие качества:
Обучение - подбор параметров численной модели так, чтобы она наилучшим образом соответствовала определенному набору данных.
Внутри себя модели могут быть устроены как угодно. Зачастую используются математические функции. Например, линейная функция - она имеет два параметра - свободный и параметр при аргументе. Но кроме гладких аналитических функций в качестве моделей машинного обучения могут использоваться, например, кусочные функции, алгоритмы с ветвлениями, какие-то стратегии, практически все, что угодно, что удовлетворяет предыдущим трем условиям.
Давайте рассмотрим для примера в качестве модели самую простую математическую функцию - линейную. Ее формула \(a x + b\) или в других обозначениях \(y = b_0 + b_1 x\). Здесь $y$ - выходная переменная, значение или целевая переменная, $x$ - входная переменная, аргумент или фактор (в данном случае, это одно значение, но несложно обобщить эту функцию на произвольное количество факторов, этим мы займемся в следующих главах), $\vec{b}$ - параметры модели, их мы уже сразу обозначим именно как вектор. В данном случае это двумерный вектор параметров или можно просто сказать, что у этой модели два параметра. Понятно, что в зависимости от значения вектора параметров линейная функция будет принимать различные значения. Если добавить сюда данные, то может получиться картина типа такой:
<!– Источник: Wikimedia.
–> И вот здесь на первый план выходит понятие метрики качества или функции ошибки. На нужен какой-то способ измерить, насколько хорошо конкретная функция (то есть модель с конкретными значениями параметров) “легла в точки”. Причем, нам нужен способ измерять это автоматически, без помощи человека, потому что в процессе обучения нам придется вычислять эту метрику много тысяч или миллионов раз. Для такой функции можно несложно придумать меры среднего расстояния до точек, и конкретные метрики качества мы будем проходить дальше. Также дальше мы скажем, чем отличаются метрики качества и функции ошибки (хотя они очень похожи, это все-таки разные понятия).
Выводы: