fbpx

Каталог статей

Каталог статей для размещения статей информационного характера

Как выучить

Самоучитель машинного обучения с примерами: Введение в теорию МЛ и ее применение

Самоучитель машинного обучения с примерами: Введение в теорию МЛ и ее применение

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

Николас – профессиональный инженер-программист со страстью к качественному мастерству. Он любит создавать архитектуру и писать первоклассный код.

Читайте испанскую версию этой статьи в переводе Мариселы Ордаз

Примечание редактора: Эта статья была обновлена нашей редакцией 09/12/22. Она была изменена с учетом последних источников и в соответствии с нашими текущими редакционными стандартами.

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

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

Основы машинного обучения: Что такое машинное обучение?

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

Тем не менее, существуют некоторые основные общие черты, а всеобъемлющая тема лучше всего выражается в часто цитируемом высказывании Артура Сэмюэла, сделанном в 1959 году: “[Машинное обучение – это] область исследований, которая дает компьютерам способность обучаться без явного программирования”.

В 1997 году Том Митчелл предложил “хорошо сформулированное” определение, которое оказалось более полезным для инженеров: “Считается, что компьютерная программа учится на опыте E в отношении некоторой задачи T и некоторой меры производительности P, если ее производительность на T, измеряемая P, улучшается с опытом E”.

“Считается, что компьютерная программа учится на опыте E в отношении некоторой задачи T и некоторой меры производительности P, если ее производительность на T, измеряемая P, улучшается с опытом E.” — Том Митчелл, Университет Карнеги-Меллон.

Таким образом, если вы хотите, чтобы ваша программа предсказывала, например, характер движения на оживленном перекрестке (задача T), вы можете пропустить ее через алгоритм машинного обучения с данными о прошлом характере движения (опыт E) и, если она успешно “обучится”, она будет лучше предсказывать будущий характер движения (мера производительности P).

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

Среди различных типов задач ОД существует важное различие между контролируемым и неконтролируемым обучением:

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

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

Контролируемое машинное обучение

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

На практике x почти всегда представляет собой несколько точек данных. Так, например, при прогнозировании цены на жилье может учитываться не только площадь дома (x1), но и количество спален (x2), количество ванных комнат (x3), этажность (x4), год постройки (x5), почтовый индекс (x6) и так далее. Определение того, какие входные данные использовать, является важной частью разработки ML. Однако для объяснения проще всего принять одно входное значение.

Допустим, наш простой предиктор имеет такую форму:

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

Оптимизация предиктора h(x) осуществляется с помощью обучающих примеров. Для каждого обучающего примера мы имеем входное значение x_train , для которого заранее известен соответствующий выходной результат y . Для каждого примера мы находим разницу между известным, правильным значением y и нашим предсказанным значением h(x_train). При достаточном количестве обучающих примеров эти различия дают нам полезный способ измерения “неправильности” h(x). Затем мы можем подкорректировать h(x), изменяя значения параметров и , чтобы сделать его “менее неправильным”. Этот процесс повторяется до тех пор, пока система не сойдется на лучших значениях для и . Таким образом, предиктор становится обученным и готов к прогнозированию в реальном мире.

Примеры машинного обучения

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

Учитывая это, давайте рассмотрим еще один простой пример. Допустим, у нас есть следующие учебные данные, в которых сотрудники компании оценивают свою удовлетворенность по шкале от 1 до 100:

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

Это несколько напоминает знаменитое высказывание Джорджа Э. П. Бокса, британского математика и профессора статистики: “Все модели ошибочны, но некоторые из них полезны”.

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

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

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

Если мы спросим этот предиктор об удовлетворенности сотрудника, зарабатывающего $60 000, он выдаст оценку 27:

Очевидно, что это ужасное предположение и что эта машина не знает очень многого.

Теперь давайте дадим этому предиктору все зарплаты из нашего обучающего набора и обратим внимание на различия между полученными в результате прогнозируемыми оценками удовлетворенности и фактическими оценками удовлетворенности соответствующих сотрудников. Если мы проведем небольшую математическую хитрость (которую я опишу позже в статье), мы сможем с очень большой уверенностью вычислить, что значения 13,12 для и 0,61 для дадут нам лучший предиктор.

И если мы повторим этот процесс, скажем, 1 500 раз, наш предиктор в итоге будет выглядеть следующим образом:

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

Теперь у нас что-то получается.

Регрессия машинного обучения: Замечание о сложности

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

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

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

Градиентный спуск: Минимизация “неправильности”

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

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

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

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

Теперь мы видим, что наша цель – найти такой предиктор h(x), чтобы функция стоимости была как можно меньше. Для достижения этой цели мы обратимся к силе исчисления.

Рассмотрим следующий график функции затрат для некоторой конкретной задачи машинного обучения:

Здесь мы видим затраты, связанные с различными значениями и . Мы видим, что график имеет форму небольшой чаши. Дно чаши представляет собой самую низкую стоимость, которую наш предсказатель может дать нам на основе данных обучения. Цель состоит в том, чтобы “скатиться вниз по склону” и найти и , соответствующие этой точке.

Именно здесь в этом учебнике по машинному обучению появляется исчисление. Чтобы это объяснение было понятным, я не буду приводить здесь уравнения, но, по сути, мы берем градиент от , который представляет собой пару производных от (одна над и одна над ). Градиент будет разным для каждого значения и , и определяет “наклон холма” и, в частности, “какой путь вниз” для этих конкретных s. Например, когда мы подставляем наши текущие значения и в градиент, он может сказать нам, что небольшое прибавление к и небольшое вычитание из приведут нас в направлении функции затрат – дна долины. Поэтому мы прибавляем немного к , вычитаем немного из , и вуаля! Мы завершили один раунд нашего алгоритма обучения. Наш обновленный предиктор, h(x) = + x, будет давать лучшие прогнозы, чем раньше. Теперь наша машина стала немного умнее.

Thi

Регрессионные системы машинного обучения – системы, в которых прогнозируемое значение находится где-то на непрерывном спектре. Эти системы помогают нам в вопросах “Сколько?” или “Сколько?”.

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

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

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

  • Здесь представлены результаты исследования качества печенья, где все обучающие примеры были помечены как “хорошее печенье” (y = 1) синим цветом или “плохое печенье” (y = 0) красным цветом.
  • В классификации регрессионный предиктор не очень полезен. Обычно нам нужен предиктор, который делает предположение где-то между 0 и 1. В классификаторе качества печенья предсказание 1 будет означать очень уверенное предположение, что печенье идеально и аппетитно. Предсказание 0 означает высокую уверенность в том, что печенье является позором для индустрии печенья. Значения, попадающие в этот диапазон, представляют меньшую уверенность, поэтому мы можем спроектировать нашу систему таким образом, чтобы прогноз 0,6 означал: “Мужик, это трудный выбор, но я соглашусь, ты можешь продавать это печенье”, в то время как значение ровно посередине, 0,5, может представлять полную неопределенность. Не всегда так распределяется уверенность в классификаторе, но это очень распространенная схема, и она подходит для целей нашей иллюстрации.

Оказывается, есть хорошая функция, которая хорошо отражает такое поведение. Она называется сигмоидной функцией, g(z), и выглядит примерно так:

z – это некоторое представление наших входов и коэффициентов, таких как:

Таким образом, наш предиктор становится:

Обратите внимание, что сигмоидная функция преобразует наш выход в диапазон между 0 и 1.

Логика, лежащая в основе построения функции стоимости, также отличается в классификации. Мы снова задаем вопрос: “Что значит, если предположение неверно?”, и на этот раз очень хорошим эмпирическим правилом является то, что если правильное предположение было 0, а мы предположили 1, то мы полностью ошиблись, и наоборот. Поскольку вы не можете ошибиться больше, чем полностью, штраф в этом случае огромен. В качестве альтернативы, если правильное предположение было равно 0, а мы угадали 0, наша функция затрат не должна добавлять никаких затрат каждый раз, когда это происходит. Если предположение было верным, но мы не были полностью уверены (например, y = 1, но h(x) = 0,8), это должно сопровождаться небольшими затратами, а если предположение было неверным, но мы не были полностью уверены (например, y = 1, но h(x) = 0,3), это должно сопровождаться значительными затратами, но не такими большими, как в случае полной ошибки.

Это поведение отражает логарифмическая функция, такая как:

Опять же, функция стоимости дает нам среднюю стоимость по всем нашим обучающим примерам.

Итак, здесь мы описали, как предсказание

Введение в нейронные сети

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

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

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

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

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

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

Применение теории на практике

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

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

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

Благодарность

Эта статья в значительной степени основана на материалах, преподаваемых профессором Стэнфорда доктором Эндрю Нг в его бесплатном и открытом курсе “Supervised Machine Learning”. В нем очень подробно рассматривается все, что обсуждается в этой статье, и дается масса практических советов для практиков ML. Я не могу рекомендовать его тем, кто заинтересован в дальнейшем изучении этой увлекательной области.

Похожие статьи:

Понимание основ

Что такое глубокое обучение?

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

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

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

Машинное обучение против искусственного интеллекта: В чем разница?

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

Как научиться машинному обучению?

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

Что такое чрезмерная подгонка в машинном обучении?

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

Что такое модель машинного обучения?

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *