Машинное обучение и TensorFlow - Нишант Шакла - E-Book

Машинное обучение и TensorFlow E-Book

Нишант Шакла

0,0

Beschreibung

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

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 246

Veröffentlichungsjahr: 2023

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Нишант Шакла
Машинное обучение и TensorFlow
2021

Научный редактор П. Ковалёв

Переводчик А. Макарова

Технический редактор А. Руденко

Литературные редакторы А. Бульченко, Е. Самородских

Художники Л. Егорова, С. Заматевская

Корректоры Н. Викторова, И. Тимофеева

Верстка Л. Егорова

Нишант Шакла

Машинное обучение и TensorFlow. — СПб.: Питер, 2021.

ISBN 978-5-4461-0826-8

© ООО Издательство "Питер", 2021

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

Оглавление

Предисловие
Благодарности
Об этой книге
Содержание книги
Исходный код
Форум книги
Об авторе
Об обложке
От издательства
Часть I. Ваше снаряжение для машинного обучения
1. Одиссея машинного обучения
1.1. Основы машинного обучения
1.2. Представление данных и признаки
1.3. Метрики расстояния
1.4. Типы обучения
1.5. Библиотека ТensorFlow
1.6. Обзор предстоящих глав
1.7. Краткие итоги
2. Основы TensorFlow
2.1. Убедитесь, что TensorFlow работает
2.2. Представление тензоров
2.3. Создание операторов
2.4. Выполнение операторов во время сеанса
2.5. Написание кода в Jupyter
2.6. Использование переменных
2.7. Сохранение и загрузка переменных
2.8. Визуализация данных с помощью TensorBoard
2.9. Краткие итоги
Часть II. Основные алгоритмы обучения
3. Линейная и нелинейная регрессия
3.1. Формальные обозначения
3.2. Линейная регрессия
3.3. Полиномиальная модель
3.4. Регуляризация
3.5. Применение линейной регрессии
3.6. Краткие итоги
4. Краткое введение в классификацию
4.1. Формальные обозначения
4.2. Оценка эффективности
4.3. Использование для классификации линейной регрессии
4.4. Использование логистической регрессии
4.5. Многоклассовая классификация
4.6. Применение классификации
4.7. Краткие итоги
5. Автоматическая кластеризация данных
5.1. Обход файлов в TensorFlow
5.2. Извлечение признаков из звукозаписи
5.3. Кластеризация методом k-средних
5.4. Сегментация звуковых данных
5.5. Кластеризация с самоорганизующимися картами
5.6. Применение кластеризации
5.7. Краткие итоги
6. Скрытое марковское моделирование
6.1. Пример неинтерпретируемой модели
6.2. Модель Маркова
6.3. Скрытое марковское моделирование
6.4. Алгоритм прямого хода
6.5. Декодирование Витерби
6.6. Применение скрытых марковских моделей
6.7. Применение скрытых марковских моделей
6.8. Краткие итоги
Часть III. Парадигма нейронных сетей
7. Знакомство с автокодировщиками
7.1. Нейронные сети
7.2. Автокодировщики
7.3. Пакетное обучение
7.4. Работа с изображениями
7.5. Применение автокодировщиков
7.6. Краткие итоги
8. Обучение с подкреплением
8.1. Формальные обозначения
8.2. Применение обучения с подкреплением
8.3. Реализация обучения с подкреплением
8.4. Исследование других областей использования обучения с подкреплением
8.5. Краткие итоги
9. Сверточные нейронные сети
9.1. Недостатки нейронных сетей
9.2. Сверточные нейронные сети
9.3. Подготовка изображения
9.4. Использование сверточной нейронной сети в TensorFlow
9.5. Советы и трюки по повышению эффективности
9.6. Применение сверточных нейронных сетей
9.7. Краткие итоги
10. Рекуррентные нейронные сети
10.1. Контекстная информация
10.2. Введение в рекуррентные нейронные сети
10.3. Использование рекуррентной нейронной сети
10.4. Прогностическая модель данных временного ряда
10.5. Применение рекуррентных нейронных сетей
10.6. Краткие итоги
11. Модели sequence-to-sequence для чат-бота
11.1. Построения на основе классификации и RNN
11.2. Архитектура seq2seq
11.3. Векторное представление символов
11.4. Собирая все вместе
11.5. Сбор данных диалога
11.6. Краткие итоги
12. Ландшафт полезности
12.1. Модель предпочтения
12.2. Встраивание изображения
12.3. Ранжирование изображений
12.4. Краткие итоги
12.5. Что дальше?
Приложение. Установка
П.1. Установка TensorFlow с помощью Docker
П.2. Установка Matplotlib

Предисловие

Я, как и большинство моих сверстников, всегда был увлечен последними тенденциями в интернете. Помню, как в 2005 году были популярны сообщества FARK, YTMND и Delicious — с бесконечными обновлениями на темы развлечений и новостей. Теперь же я заглядываю то в сообщество Reddit, то в Hacker News, и так я в конечном итоге стал свидетелем церемонного дебюта фреймворка TensorFlow, который состоялся 9 ноября 2015 года. Стоило сообщению об этом дебюте оказаться на главной странице Hacker News, как под ним тут же появилась сотня комментариев — это событие напрочь затмило все остальные новости на сайте.

В тот период инструменты машинного обучения представляли собой набор отдельных «разношерстных» библиотек; вся экосистема базировалась на экспериментальных пакетах программного обеспечения от научных лабораторий и проприетарных решениях гигантов индустрии. Когда компания Google представила библиотеку TensorFlow, реакция сообщества была неоднозначной. Несмотря на то что в истории Google были случаи с закрытием полюбившихся многим проектов (таких как, например, Google Reader, iGoogle, Knol и Google Wave), компания известна также и тем, что выпустила ряд проектов с открытым исходным кодом (Android, Chromium, Go и Protobuf).

Решение о том, использовать TensorFlow или нет, нужно было принимать сразу же. Многие предпочли подождать окончания разработки библиотеки, но были и те, кто тут же «погрузился в нее с головой». Я пробежался по официальной документации, изучил основы и уже был готов использовать эту технологию в своем исследовании на степень доктора наук в Калифорнийском университете Лос-Анджелеса. Я кропотливо накапливал информацию и даже не предполагал, что страницы, которые я писал для себя, чтобы лучше ориентироваться в документации TensorFlow, позже превратятся в книгу.

Приблизительно в то же время мне написал рецензент издательства Manning Publications с просьбой дать заключение независимого специалиста о новом учебнике Haskell — это было стандартной процедурой проверки авторов на добросовестность. Он обратился ко мне, поскольку я был автором Haskell Data Analysis Cookbook (Книга рецептов по анализу данных на Haskell, 2014 год). Долгое путешествие по пути написания книги, которую вы читаете сейчас, началось с моего ответа: «Отступая от темы вашего письма, слышали ли Вы о новой библиотеке Google по машинному обучению под названием TensorFlow?»

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

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

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

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

Моральную поддержку на протяжении долгих месяцев написания книги оказывали мне мои друзья по колледжу, мои Крутейшие Крутыши-Диджеи: Алекс Кац (Alex Katz), Аниш Симхал (Anish Simhal), Ясдев Сингх (Jasdev Singh), Джон Гиллен (John Gillen), Джонатан Блончек (Jonathon Blonchek), Кельвин Грин (Kelvin Green), Шив Синха (Shiv Sinha) и Винай Дандекар (Vinay Dandekar).

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

Я хотел бы выразить признательность за потрясающую обратную связь, которую получил от интернет-сообществ: внимание читателей к моим постам в Reddit (r/artificial, r/machinelearning, r/Python, r/Tensor-Flow, а также r/Programming) и Hacker News принесло невероятные плоды. Я благодарен тем, кто оставлял сообщения на официальном форуме книги и вносил свой вклад в репозиторий GitHub. Кроме того, благодарю удивительную группу рецензентов, возглавляемую Александром Драгосавлиевичем (Aleksandar Dragosavljevic). В нее также входят Нии Аттох-Окине (Nii Attoh-Okine), Томас Баллинджер (Thomas Ballinger), Джон Берриман (John Berryman), Гил Бирауд (Gil Biraud), Микаэль Дотрей (Mikael Dautrey), Хамиш Диксон (Hamish Dickson), Мигель Эдуардо (Miguel Eduardo), Питер Хэмптон (Peter Hampton), Майкл Дженсен (Michael Jensen), Дэвид Криф (David Krief), Нат Луенгнаруэмитхай (Nat Luengnaruemitchai), Томас Пиклак (Thomas Peklak), Майк Штауфенберг (Mike Staufenberg,), Урсин Штосс (Ursin Stauss), Ричард Тобиас (Richard Tobias), Уильям Уилер (William Wheeler), Брад Видерхольт (Brad Wiederholt) и Артур Зубарев (Arthur Zubarev). Они исправляли технические ошибки, ошибки в терминологии и опечатки, а также вносили предложения по разделам книги. Содержание рукописи формировалось и дополнялось на каждом этапе редактирования, с каждым добавленным предложением, поступившим с форума.

Особую благодарность я хотел бы выразить Кену Фрикласу (Ken Fricklas), который сыграл роль старшего научного редактора, Джерри Гейнсу (Jerry Gaines), редактору-консультанту по техническим вопросам, и Дэвиду Фомбелла Помбалу (David Fombella Pombal), научному редактору книги. О лучших научных редакторах я не мог и мечтать.

И наконец, я хотел бы поблагодарить сотрудников издательства Manning Publi­cations, которые сделали возможным появление этой книги: это издатель Марьян Бэйс (Marjan Bace) и все сотрудники издательского и производственного отделов, в том числе Джанет Вэйл (Janet Vail), Тиффани Тейлор (Tiffany Taylor), Шерон Уилки (Sharon Wilkey), Кэти Теннант (Katie Tennant), Деннис Далинник (Dennis Dalinnik), а также многие другие, чья работа осталась за кадром. Из всего множества других контактов, которыми я обзавелся в издательстве Manning, я выражаю мою глубочайшую признательность Тони Арритола (Toni Arritola), редактору, ответственному за работу с читателями книги. Ее непрестанное руководство и наставления на всем протяжении процесса подготовки издания сделали книгу доступной для значительно более широкой аудитории.

Об этой книге

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

Содержание книги

Книга разделена на три части:

• Часть I начинается с изучения того, что такое машинное обучение, и в ней описывается ключевая роль TensorFlow. В главе 1 вводится терминология и дается теория машинного обучения. В главе 2 рассказывается о том, что вам нужно знать, чтобы начать использовать TensorFlow.

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

• Часть III раскрывает истинную мощь TensorFlow — нейронные сети. Главы 7–12 знакомят с автокодировщиками, обучением с подкреплением, сверточными нейронными сетями, рекуррентными нейронными сетями, моделями sequence-to-sequence («последовательность-в-последовательность») и с практическим использованием сетей соответственно.

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

Исходный код

Идеи, лежащие в основе этой книги, неподвластны времени; и благодаря сообществу это также относится и к тем листингам программного кода, которые приведены в качестве примеров. Исходный код доступен на веб-сайте книги по адресу www.manning.com/books/machine-learning-with-tensorflow, а обновленная версия программного обеспечения хранится в официальном репозитории книги на GitHub, https://github.com/BinRoot/TensorFlow-Book. Вы также можете внести свой вклад в этот репозиторий через pull request (запрос на включение изменений) или загрузив на GitHub новые версии.

Форум книги

Покупка книги «Машинное обучение и TensorFlow» включает бесплатный доступ к частному веб-форуму (форум на английском языке), организованному издательством Manning Publi­cations, где можно оставлять комментарии о книге, задавать технические вопросы, а также получать помощь от автора и других пользователей. Чтобы получить доступ к форуму, перейдите на https://forums.manning.com/forums/machine-learning-with-tensorflow. Узнать больше о других форумах на сайте издательства Manning и познакомиться с правилами вы сможете на странице https://forums.manning.com/forums/about.

Издательство Manning обязуется предоставить своим читателям место встречи, на которой может состояться содержательный диалог между отдельными читателями и между читателями и автором. Однако со стороны автора отсутствуют какие-либо обязательства уделять форуму внимание в каком-то определенном объеме — его присутствие на форуме остается добровольным (и неоплачиваемым). Мы предлагаем задавать автору неожиданные вопросы, чтобы его интерес не угасал! Форум и архивы предыдущих обсуждений будут доступны на сайте издательства, пока книга находится в печати.

Об авторе

Нишант Шакла (http://shukla.io) является соискателем на степень доктора наук Калифорнийского университета Лос-Анджелеса, основные темы его исследований: методы машинного обучения и компьютерного зрения в робототехнике. Имеет степень бакалавра Computer Science и степень бакалавра математики Университета Вирджинии. В университете учредил лигу Hack.UVA (http://hackuva.io), а также читал один из самых посещаемых курсов лекций по Haskell (http://shuklan.com/haskell). Занимался разработкой для таких компаний, как Microsoft, Facebook и Foursquare, а также работал инженером по машинному обучению в компании SpaceX; является автором книги Haskell Data Analysis Cookbook (http://haskelldata.com). Кроме того, опубликовал ряд научных статей по широкому кругу тем — от аналитической химии до обработки естественного языка (http://mng.bz/e9sk). Свободное время проводит за настольными играми «Поселенцы Катана» и «Гвинт» (и периодически проигрывает).

Об обложке

Рисунок на обложке «Машинное обучение и TensorFlow» подписан как «Человек с острова Паг, Далмация, Хорватия». Эта иллюстрация взята с репродукции, опубликованной в 2006 году в книге коллекций костюмов и этнографических описаний XIX века под названием «Далмация» профессора Фрейна Каррара (1812–1854), археолога и историка, а также первого директора Музея античности города Сплита в Хорватии. Иллюстрации были любезно предоставлены библиотекарем Музея этнографии (в прошлом — Музея античности), расположенного в римском центре старого Сплита: руины дворца императора Диоклетиана относятся к 304 году н.э. Книга содержит превосходные цветные рисунки людей из разных областей Далмации, сопровождающиеся описанием их костюмов и повседневной жизни.

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

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

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

Часть I. Ваше снаряжение для машинного обучения

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

Чтобы подготовить надежную основу для машинного обучения, требуется учесть два аспекта. Первый аспект раскрывается в главе 1 и состоит в том, что необходимо освоить язык и теорию машинного обучения. Чтобы говорить на эту тему на одном языке, исследователи в своих публикациях дали точную терминологию и формулировки.  Поэтому нам тоже лучше придерживаться этих правил, чтобы избежать путаницы. Второй аспект раскрывается в главе 2 и касается всего, что необходимо знать, чтобы начать использовать библиотеку TensorFlow. У самураев есть самурайский меч, у музыкантов — музыкальные инструменты, а у специа­листов-практиков в машинном обучении есть TensorFlow.

1. Одиссея машинного обучения

Эта глава охватывает следующие темы:

• Основы машинного обучения

• Представление данных, признаки и нормы векторов

• Причины выбора TensorFlow

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

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

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

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

Алгоритмы обучаются по данным аналогично тому, как люди учатся на собственном опыте. Люди учатся, читая книги, анализируя ситуации, обучаясь в школе, обмениваясь информацией во время разговоров и просматривая веб-сайты, и это помимо множества других методов. Как может машина развить способность обучаться? Окончательного ответа на этот вопрос нет, но исследователи мирового уровня разработали разумные программы для разных областей. В различных реализациях этих программ ученые заметили повторяющиеся образы в решении задач этого типа, что привело к возникновению специализированной области, которую сегодня называют машинным обучением (МО, machine learning).

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

Надежный результат машинного обучения

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

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

1.1. Основы машинного обучения

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

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

Полный вперед!

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

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

Машинное обучение называют также индуктивным обучением (inductive learning), потому что код старается выявить структуру только лишь на основе данных. Это все равно что отправиться на каникулы за границу и читать местный журнал мод, пытаясь понять, как одеться, чтобы сойти «за своего». Изучая изображения людей в местной одежде, вы сможете сформировать в своем представлении некий образ локальной культуры. Такой способ обучения называют индуктивным.

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

Рис. 1.1. Каждая пара целых чисел при их суммировании дает четное или нечетное число. Перечисленные соответствия входа и выхода носят название контрольного набора данных (ground-truth dataset)

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

• Для любого целого числа n выражение 2n + 1 дает нечетное число. Более того, любое нечетное число можно записать как 2n + 1 для некоторого целого числа n. Число 3 можно записать как 2(1) + 1. А число 5 можно записать как 2(2) + 1.

• Пусть у нас два нечетных числа, 2n + 1 и 2m + 1, где n и m — целые числа. Сложение двух нечетных чисел дает (2n + 1) + (2m + 1) 2n + 2m + 2 2(n + m + 1). Это — четное число, потому что умножение любого целого числа на 2 дает четное число.

Аналогичным образом мы видим, что сумма двух четных чисел тоже является четным числом: 2m + 2n 2(m + n). И наконец, мы также приходим к выводу, что сумма четного и нечетного чисел является нечетным числом: 2m + (2n + 1) 2(m + n) + 1. На рис. 1.2 эта логика представлена более понятно.

Рис. 1.2. Таблица раскрывает внутреннюю логику соответствия выходных данных входным парам целых чисел

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

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

1.1.1. Параметры

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

Машинное обучение может решать задачи, не проникая в суть предмета

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

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

УПРАЖНЕНИЕ 1.1

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

ОТВЕТ

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

1.1.2. Обучение и вывод

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

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

ПРИМЕЧАНИЕВектор признаков объекта, признаковое описание (feature vector), представляет собой упрощенное представление исходных данных. Вектор признаков можно рассматривать как сводку характеристик реальных объектов. Стадии обучения и вывода используют вектор признаков, а не сами исходные данные.

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

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

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

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

1.2. Представление данных и признаки

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

Главными элементами всех форм представления данных выступают признаки, которые являются наблюдаемыми свойствами объекта:

• Векторы имеют плоскую и простую структуру и обычно, в большинстве приложений для машинного обучения, представляют собой объединение данных. У них есть два атрибута: размерность вектора (это натуральное число) и тип его элементов (например, действительные числа, целые числа и т.п.). В качестве напоминания вот некоторые примеры двумерных целочисленных векторов: (1, 2) и (–6, 0) — некоторые примеры трехмерных векторов действительных чисел, такие как (1,1; 2,0; 3,9) и (, /2, /3). Вы, вероятно, уже догадались: все это собрание чисел одного типа. В программе, использующей машинное обучение, вектор применяют для измерения свойств данных, таких как цвет, плотность, сила звука, близость к чему-либо, то есть всего того, что можно описать с помощью последовательности чисел — по одному числу для каждого оцениваемого свойства.

• А вектором векторов является матрица. Если каждый вектор описывает признаки одного объекта в наборе данных, то матрица описывает признаки всех объектов, при этом каждый элемент вектора является узлом, представляющим собой список признаков одного объекта.

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

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

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

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

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

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

Рис. 1.6. Конструирование признаков является процессом выбора наиболее значимых из них для рассматриваемой задачи

Проклятие размерности

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

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

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

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

УПРАЖНЕНИЕ 1.2

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

Робот пытается сложить футболку. Какие признаки футболки целесообразно отслеживать?

ОТВЕТ

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

УПРАЖНЕНИЕ 1.3