Глубокое обучение на R - Франсуа Шолле - E-Book

Глубокое обучение на R E-Book

Франсуа Шолле

0,0

Beschreibung

Глубокое обучение — Deep learning — это набор алгоритмов машинного обучения, которые моделируют высокоуровневые абстракции в данных, используя архитектуры, состоящие из множества нелинейных преобразований. Согласитесь, эта фраза звучит угрожающе. Но всё не так страшно, если о глубоком обучении рассказывает Франсуа Шолле, который создал Keras — самую мощную библиотеку для работы с нейронными сетями. Познакомьтесь с глубоким обучением на практических примерах из самых разнообразных областей. Книга делится на две части, в первой даны теоретические основы, вторая посвящена решению конкретных задач. Это позволит вам не только разобраться в основах DL, но и научиться использовать новые возможности на практике. Эта книга написана для людей с опытом программирования на R, желающих быстро познакомиться с глубоким обучением на практике, и является переложением бестселлера Франсуа Шолле "Глубокое обучение на Python", но использующим примеры на базе интерфейса R для Keras.

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: 426

Veröffentlichungsjahr: 2022

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.



Франсуа Шолле
Глубокое обучение на R

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

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

Литературный редактор А. Бульченко

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

Корректор Н. Викторова

Верстка Л. Соловьева

Франсуа Шолле

Глубокое обучение на R. — СПб.: Питер, 2021.

ISBN 978-5-4461-0902-9

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

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

Оглавление

Предисловие
Благодарности
Об этой книге
Кому адресована эта книга
Содержание книги
Требования к программному/аппаратному обеспечению
Исходный код
Форум книги
От издательства
Об авторах
Об иллюстрации на обложке
Часть I. Основы глубокого обучения
1. Что такое глубокое обучение?
1.1. Искусственный интеллект, машинное и глубокое обучение
1.2. Что было до глубокого обучения: краткая история машинного обучения
1.3. Почему глубокое обучение? Почему сейчас?
2. Прежде чем начать: математические основы нейронных сетей
2.1. Первое знакомство с нейронной сетью
2.2. Представление данных для нейронных сетей
2.3. Шестеренки нейронных сетей: операции с тензорами
2.4. Механизм нейронных сетей: оптимизация на основе градиента
2.5. Взгляд назад на первый пример
Краткие итоги главы
3. Начало работы с нейронными сетями
3.1. Анатомия нейронной сети
3.2. Введение в Keras
3.3. Настройка рабочей станции для глубокого обучения
3.4. Классификация отзывов к фильмам: пример бинарной классификации
3.5. Классификация новостных лент: пример классификации в несколько классов
3.6. Предсказание цен на дома: пример регрессии
Краткие итоги главы
4. Основы машинного обучения
4.1. Четыре раздела машинного обучения
4.2. Оценка моделей машинного обучения
4.3. Обработка данных, конструирование признаков и обучение признаков
4.4. Переобучение и недообучение
4.5. Обобщенный процесс решения задач машинного обучения
Краткие итоги главы
Часть II. Глубокое обучение на практике
5. Глубокое обучение для распознавания образов
5.1. Введение в сверточные нейронные сети
5.2. Обучение сверточной нейронной сети с нуля на небольшом наборе данных
5.3. Использование предварительно обученной сверточной нейронной сети
5.4. Визуализация знаний, заключенных в сверточной нейронной сети
Краткие итоги главы
6. Глубокое обучение для текста и последовательностей
6.1. Работа с текстовыми данными
6.2. Рекуррентные нейронные сети
6.3. Улучшенные методы использования рекуррентных нейронных сетей
6.4. Обработка последовательностей с помощью сверточных нейронных сетей
Краткие итоги главы
7. Лучшие практики глубокого обучения продвинутого уровня
7.1. За рамками последовательной модели: функциональный API фреймворка Keras
7.2. Исследование и мониторинг моделей глубокого обучения с использованием обратных вызовов Keras и TensorBoard
7.3. Извлечение максимальной пользы из моделей
Краткие итоги главы
8. Генеративное глубокое обучение
8.1. Генерирование текста с помощью LSTM
8.2. DeepDream
8.3. Нейронная передача стиля
8.4. Генерирование изображений с вариационными автокодировщиками
8.5. Введение в генеративно-состязательные сети
Краткие итоги главы
9. Заключение
9.1. Краткий обзор ключевых понятий
9.2. Ограничения глубокого обучения
9.3. Будущее глубокого обучения
9.4. Как не отстать от прогресса в быстро развивающейся области
9.5. Заключительное слово
Приложение A. Установка Keras и его зависимостей в Ubuntu
A.1. Обзор процесса установки
A.2. Установка системных библиотек
A.3. Настройка поддержки GPU
A.4. Установка Keras и TensorFlow
Приложение B. Запуск RStudio Server на экземпляре EC2 GPU
B.1. Зачем использовать AWS для глубокого обучения?
B.2. Когда нежелательно использовать AWS для глубокого обучения?
B.3. Настройка экземпляра AWS GPU
B.4. Настройка доступа к RStudio Server
B.5. Установка Keras

Предисловие

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

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

Когда в марте 2015 года я выпустил первую версию Keras, фреймворка глубокого обучения, я не задумывался о демократизации искусственного интеллекта (ИИ). Я несколько лет занимаюсь исследованиями в области машинного обучения и создал Keras себе в помощь в экспериментах. Однако в течение 2015 и 2016 годов десятки тысяч новых людей открыли для себя область глубокого обучения; многие из них выбрали Keras, потому что он был — и остается — самым простым фреймворком для начинающих. Я увидел, как десятки новичков используют Keras самыми неожиданными и достаточно действенными способами, и тогда пришел к мысли, что мне нужно подумать о доступности и демократизации ИИ. Я осознал, что чем шире мы будем распространять эти технологии, тем ценнее они будут становиться. Доступность быстро стала одной из главных целей Keras, и за несколько лет сообществу разработчиков удалось добиться фантастических достижений в этом направлении. Мы в буквальном смысле «вручили» технологию глубокого обучения десяткам тысяч людей, и они, в свою очередь, воспользовались ею для решения важных проблем, о существовании которых мы до недавнего времени даже не подозревали.

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

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

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

Я также хочу поблагодарить компанию Google за поддержку проекта Keras. Было очень приятно, когда в Google решили использовать Keras в качестве высокоуровневого API для TensorFlow1. Бесшовная интеграция Keras и TensorFlow выгодна пользователям обоих продуктов, TensorFlow и Keras, делает доступной технологии глубокого обучения для широкого круга.

Я хочу поблагодарить сотрудников издательства Manning, сделавших возможным выпуск этой книги: издателя Марджана Бейса (Marjan Bace) и всех сотрудников редакторского и технического отделов, в том числе Дженифер Стоут (Jennifer Stout), Жанет Вейл (Janet Vail), Тиффани Тейлор (Tiffany Taylor), Кэти Теннант (Katie Tennant), Дотти Мариско (Dottie Marsico) и многих других, работавших за кулисами.

Большое спасибо техническим рецензентам во главе с Александром Драгосавлевичем (Aleksandar Dragosavljević): — Диего Акунье Розасу (Diego Acuña Rozas), Джеффу Барто (Geoff Barto), Дэвиду Блюменталь-Барби (David Blumenthal-Barby), Абелю Брауну (Abel Brown), Кларку Дорману (Clark Dorman), Кларку Гейлорду (Clark Gaylord), Томасу Хейману (Thomas Heiman), Уилсону Мару (Wilson Mar), Сумиту Палу (Sumit Pal), Владимиру Пасману (Vladimir Pasman), Густаво Патино (Gustavo Patino), Питеру Рабиновичу (Peter Rabinovitch), Элвину Раджу (Alvin Raj), Клаудио Родригесу (Claudio Rodriguez), Срджану Сантичу (Srdjan Santic), Ричарду Тобиасу (Richard Tobias), Мартину Верзилли (Martin Verzilli), Уильяму Уилеру (William E. Wheeler) и Дэниэлю Уильямсу (Daniel Williams) — и всем участникам форума. Они без устали выискивали технические ошибки, ошибки в терминологии и опечатки, а также вносили предложения по темам. Каждый цикл технического рецензирования и каждый отзыв, оставленный на форуме, был учтен и повлиял на рукопись.

Особое спасибо Джерри Гейнсу (Jerry Gaines), выступившему в роли технического редактора; Алексу Отту (Alex Ott) и Ричарду Тобиасу (Richard Tobias), выполнившим техническую редактуру книги. Они — лучшие технические редакторы.

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

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

Об этой книге

Книга «Глубокое обучение на R» адресована статистикам, аналитикам, инженерам и студентам, обладающим навыкам программирования на R, но не обладающим существенными знаниями в области машинного и глубокого обучения. Эта книга является переработанным вариантом предыдущей книги — «Глубокое обучение на Python»2, содержащим примеры, которые используют интерфейс R для Keras. Цель этой книги — дать сообществу R руководство, содержащее все необходимое, от базовой теории до продвинутых практических приложений. Вы увидите более 30 примеров программного кода с подробными комментариями, практическими рекомендациями и простыми обобщенными объяснениями всего, что нужно знать для использования глубокого обучения в решении конкретных задач.

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

Кому адресована эта книга

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

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

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

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

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

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

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

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

• Глава 1 формирует контекст и знакомит с основными понятиями ИИ, машинного и глубокого обучения.

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

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

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

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

• Глава 5 рассматривает ряд практических примеров распознавания образов с особым вниманием к классификации изображений.

• Глава 6 знакомит с практическими методами обработки последовательностей данных, таких как текст и временнˆые последовательности.

• Глава 7 включает продвинутые приемы создания современных моделей глубокого обучения.

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

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

Требования к программному/аппаратному обеспечению

Во всех примерах в этой книге используется Keras (https://keras.rstudio.com) — фреймворк глубокого обучения с открытым исходным кодом и доступный для загрузки бесплатно. Вам понадобится доступ к компьютеру с операционной системой (ОС) UNIX; фреймворк можно также использовать в Windows, но я не рекомендую поступать так.

Также желательно, чтобы компьютер был оснащен современной видеокартой NVIDIA, такой как TITAN X. Строго говоря, это необязательно, но поможет получить более положительные впечатления за счет ускорения примеров в несколько раз. Дополнительные подробности о настройке рабочей станции можно найти на странице: https://tensorflow.rstudio.com/tools/local_gpu.

Если у вас нет доступа к рабочей станции с современной видеокартой NVIDIA, можете воспользоваться облачным окружением. Например, можно использовать экземпляры Google Cloud, (такие как n1-standard-8, оснащенные графическими ускорителями NVIDIA Tesla K80) или экземпляры Amazon Web Services (AWS) с GPU (такие, как p2.xlarge). Дополнительные подробности о возможных вариантах использования облачных экземпляров с GPU вы найдете по адресу: https://tensorflow.rstudio.com/tools/cloud_gpu.

Исходный код

Код всех примеров в книге доступен для загрузки в виде страниц R на сайте книги www.manning.com/books/deep-learning-with-r, а также в репозитории GitHub https://github.com/jjallaire/deep-learning-with-r-notebooks.

Форум книги

Покупка книги «Глубокое обучение на R» включает свободный доступ к частному веб-форуму, организованному издательством Manning Publications, где можно оставлять комментарии о книге, задавать технические вопросы, а также получать помощь от автора и других пользователей. Чтобы получить доступ к форуму и зарегистрироваться на нем, откройте в веб-браузере страницу https://forums.manning.com/forums/deep-learning-with-r. Узнать больше о других форумах на сайте издательства Manning и познакомиться с правилами поведения вы сможете на странице https://forums.manning.com/forums/about.

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

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

 

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

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

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

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

2Шолле Франсуа. Глубокое обучение на Python. — СПб.: Питер, 2018.

Об авторах

Франсуа Шолле (François Chollet) занимается проблематикой глубокого обучения в Google, в городе Маунтин-Вью, штат Калифорния. Создатель Keras — библиотеки глубокого обучения, а также участник проекта по разработке фреймворка машинного обучения TensorFlow. Также занимается исследованиями в области машинного обучения, основное внимание уделяя распознаванию образов и применению машинного обучения к формальным рассуждениям. Выступал с докладами на крупных конференциях в этой области, включая «Conference on Computer Vision and Pattern Recognition» (CVPR), «Conference and Workshop on Neural Information Processing Systems» (NIPS), «International Conference on Learning Representations» (ICLR), и др.

Дж. Дж. Аллер (J. J. Allaire) — основатель RStudio и создатель интегрированной среды разработки RStudio IDE. Является автором интерфейса R к библиотекам TensorFlow и Keras.

Об иллюстрации на обложке

Иллюстрация на обложке «Глубокое обучение на R» подписана как «Одежда китайской женщины в 1700 году». Она взята из книги «Collection of the Dresses of Different Nations, Ancient and Modern» (Коллекция костюмов разных народов, античных и современных) Томаса Джеффериса (Thomas Jefferys), опубликованной в Лондоне между 1757 и 1772 годами. На титульной странице указано, что это выполненная вручную каллиграфическая цветная гравюра, обработанная гуммиарабиком.

Томас Джефферис (1719–1771) носил звание Географ короля Георга III. ­Английский картограф был ведущим поставщиком карт того времени. Он выгравировал и напечатал множество карт для нужд правительства и других официальных органов и широкий спектр коммерческих карт и атласов, в частности карт Северной Америки. Будучи картографом, интересовался местной одеждой народов, населяющих разные земли, и собрал блестящую коллекцию различных платьев в четырех томах. Очарование далеких земель и дальних путешествий для удовольствия было относительно новым явлением в конце XVIII века, и коллекции, такие как эта, были весьма популярны, знакомя с внешним видом жителей других стран.

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

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

Часть I. Основы глубокого обучения

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

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

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

• обобщенные определения основных понятий;

• история развития машинного обучения;

• ключевые факторы роста популярности глубокого обучения и потенциал этой дисциплины в будущем.

За последние несколько лет тема искусственного интеллекта (ИИ) вызвала большую шумиху в средствах массовой информации. Машинное обучение, глубокое обучение и ИИ упоминались в бесчисленном количестве статей, многие из которых никак не связаны с описанием технологий. Нам обещали появление виртуальных собеседников, автомобилей с автопилотом и виртуальных помощников. Иногда будущее рисовали в мрачных тонах, а иногда изображали утопическим: освобождение людей от рутинного труда и выполнение основной работы роботами, наделенными искусственным интеллектом. Будущему или настоящему специалисту в области машинного обучения важно уметь выделять полезный сигнал из шума, видеть в раздутых пресс-релизах изменения, действительно способные повлиять на мир. Наше будущее поставлено на карту, и вам предстоит сыграть в нем активную роль: закончив чтение этой книги, вы вольетесь в ряды тех, кто разрабатывает системы ИИ. Потому давайте рассмотрим следующие вопросы. Чего уже достигло глубокое обучение? Насколько это важно? В каком направление пойдет дальнейшее развитие? Можно ли верить поднятой шумихе?

Эта глава закладывает фундамент для дальнейшего обсуждения ИИ, машинного и глубокого обучения.

1.1. Искусственный интеллект, машинное и глубокое обучение

Прежде всего, определим, что подразумевается под искусственным интеллектом. Что такое ИИ, машинное и глубокое обучение (рис. 1.1)? Как они связаны друг с другом?

 

Рис. 1.1. Искусственный интеллект, машинное и глубокое обучение

1.1.1. Искусственный интеллект

Идея искусственного интеллекта появилась в 1950-х, когда группа энтузиастов из только зарождающейся области информатики задалась вопросом, можно ли заставить компьютеры «думать», — вопросом, последствия которого мы изучаем до сих пор. Коротко эту область можно определить так: автоматизация интеллектуальных задач, обычно выполняемых людьми. Соответственно, ИИ — это область, охватывающая машинное обучение и глубокое обучение, а также включающая многие подходы, не связанные с обучением. Например, первые программы для игры в шахматы действовали по жестко определенным правилам, заданным программистами, и не могли квалифицироваться как осуществляющие машинное обучение. Долгое время многие эксперты полагали, что искусственный интеллект уровня человека можно создать, если дать программисту достаточный набор явных правил для манипулирования знаниями. Этот подход известен как символический ИИ и являлся доминирующей парадигмой ИИ с 1950-х до конца 1980-х. Пик его популярности пришелся на бум экспертных систем в 1980-х.

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

1.1.2. Машинное обучение

В викторианской Англии жила леди Ада Лавлейс (Ada Lovelace) — друг и соратник Чарльза Бэббиджа (Charles Babbage), изобретателя аналитической вычислительной машины, первого известного механического компьютера. Несомненно, аналитическая машина опередила свое время, но она не задумывалась как универсальный компьютер, когда разрабатывалась в 1830-х и 1840-х, потому что идея универсальных вычислений еще не родилась. Эта машина просто давала возможность использовать механические операции для автоматизации некоторых вычислений из области математического анализа, что и обусловило такое ее название. В 1843 году Ада Лавлейс заметила: «Аналитическая машина не может создавать что-то новое. Она может делать все, что мы и сами знаем, как выполнять… её цель состоит лишь в том, чтобы помогать нам осуществлять то, с чем мы уже хорошо знакомы».

Позднее пионер ИИ Алан Тьюринг (Alan Turing) в своей знаменитой статье «Computing Machinery and Intelligence»3 назвал это замечание «аргументом Ады Лавлейс»4. В этой статье был представлен тест Тьюринга, а также перечислены основные идеи, которые могут привести к созданию ИИ. Тьюринг цитировал Аду Лавлейс, размышляя над способностью обычных компьютеров к самообучению и созданию чего-либо нового, и пришел к выводу, что да, могут.

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

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

 

Рис. 1.2. Машинное обучение: новая парадигма программирования

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

Расцвет машинного обучения начался только в 1990-х, но эта область быстро превратилась в наиболее популярный и успешный раздел ИИ, и эта тенденция была подкреплена появлением более быстродействующей аппаратуры и огромных наборов данных. Машинное обучение тесно связано с математической статистикой, но имеет несколько важных отличий. В отличие от статистики, машинное обучение обычно имеет дело с большими и сложными наборами данных (например, состоящими из миллионов фотографий, каждая из которых состоит из десятков тысяч пикселов), к которым практически невозможно применить классические методы статистического анализа, такие как байесовские методы. Как результат, машинное и в особенности глубокое обучение не имеют мощной математической платформы и основываются почти исключительно на инженерных решениях. Это практическая дисциплина, в которой идеи чаще доказываются эмпирически, а не теоретически.

1.1.3. Обучение представлению данных

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

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

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

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

Модель машинного обучения трансформирует исходные данные в значимые результаты, «обучаясь» на известных примерах входных данных и результатов. То есть главной задачей машинного и глубокого обучения является значимое преобразование данных, или, иными словами, обучение представлению входных данных, приближающему нас к ожидаемому результату. Прежде чем двинуться дальше, давайте определим, что есть представление данных? По сути, это другой способ представления, или кодирования, данных. Например, цветное изображение можно закодировать в формате RGB (red-green-blue — красный-зеленый-синий) или HSV (hue-saturation-value — тон-насыщенность-значение): это два разных представления одних и тех же данных. Некоторые задачи трудно решаются с данными в одном представлении, но легко — в другом. Например, задача «выбрать все красные пикселы в изображении» легче решается с данными в формате RGB, тогда как задача «сделать изображение менее насыщенным» проще решается с данными в формате HSV. Главная задача моделей машинного обучения как раз и заключается в поиске соответствующего представления входных данных — преобразований, которые сделают данные более пригодными для решения задачи, такой как классификация.

Обратимся к конкретному примеру. Рассмотрим систему координат с осями X и Y и несколько точек в этой системе координат (x, y), как показано на рис. 1.3.

 

Рис. 1.3. Пример некоторых данных

 

Как видите, у нас имеется несколько белых и черных точек. Допустим нам нужно разработать алгоритм, принимающий координаты (x, y) точки и возвращающий наиболее вероятный цвет, черный или белый. В данном случае:

• входными данными являются координаты точек;

• ожидаемым результатом является цвет точек;

• мерой качества алгоритма может быть, например, процент правильно классифицированных точек.

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

 

Рис. 1.4. Изменение системы координат

Координаты наших точек в этой новой системе координат можно назвать новым представлением данных. Причем более удачным! Задачу классификации данных «черный/белый» в этом представлении можно свести к простому правилу: «черные точки имеют координату x > 0» или «белые точки имеют координату x < 0». Это новое представление фактически решает поставленную задачу.

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

Все алгоритмы машинного обучения заключаются в автоматическом поиске таких преобразований, которые смогут привести данные к виду, более пригодному для данной задачи. Эти операции могут изменять координаты, как мы только что видели, или выполнять линейные проекции (что может приводить к уничтожению информации), трансляцию, нелинейные операции (такие, как «выбрать все точки с координатой x > 0») и т.д. Алгоритмы машинного обучения обычно не отличаются чем-то особенным; они просто выполняют поиск в предопределенном наборе операций, который называют пространством гипотез.

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

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

1.1.4. «Глубина» глубокого обучения

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

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

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

 

Рис. 1.5. Глубокая нейронная сеть для классификации цифр

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

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

 

Рис. 1.6. Глубокие представления, получаемые моделью классификации цифр

1.1.5. Принцип действия глубокого обучения в трех картинках

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

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

 

Рис. 1.7. Нейронная сеть параметризуется ее весами

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

 

Рис. 1.8. Функция потерь оценивает качество результатов, производимых нейронной сетью

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

 

Рис. 1.9. Оценка потерь используется как обратная связь для корректировки весов

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

1.1.6. Какой ступени развития достигло глубокое обучение

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

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

• классификация изображений на уровне человека;

• распознавание речи на уровне человека;

• распознавание рукописного текста на уровне человека;

• улучшение качества машинного перевода с одного языка на другой;

• улучшение качества машинного чтения текста вслух;

• появление цифровых помощников, таких как Google Now и Amazon Alexa;

• управление автомобилем на уровне человека;

• повышение точности целевой рекламы, используемой компаниями Google, Baidu и Bing;

• повышение релевантности поиска в интернете;

• появление возможности отвечать на вопросы, заданные вслух;

• игра в Го сильнее человека.

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

1.1.7. Не верьте рекламе

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

Такое уже происходило раньше. В прошлом ИИ пережил две волны подъема оптимизма, за которыми следовал спад, сопровождаемый разочарованиями и скептицизмом и, как результат, снижением финансирования. Все началось с символического ИИ в 1960-х. В те ранние годы давались весьма многообещающие прогнозы развития ИИ. Один из самых известных пионеров и сторонников подхода символического ИИ — Марвин Мински (Marvin Minsky) — в 1967 году заявил: «В течение поколения... проблема создания “искусственного интеллекта” будет практически решена». Три года спустя, в 1970 году, он сделал более точное предсказание: «Через три — восемь лет у нас появится машина с интеллектом среднего человека». В 2016 году это достижение все еще кажется далеким будущим — пока мы не можем предсказать, сколько времени уйдет на это, — но в 1960-х и в начале 1970-х некоторые эксперты (как и многие люди ныне) полагали, что это находится прямо за углом. Несколько лет спустя, из-за неоправдавшихся высоких ожиданий, исследователи и правительственные фонды отвернулись от этой области — так началась первая зима ИИ (вполне уместная метафора, потому что все это происходило вскоре после начала холодной войны).

Этот спад был не последним. В 1980-х начался подъем интереса к символическому ИИ благодаря буму экспертных систем в крупных компаниях. Первые успехи вызвали волну инвестиций, и корпорации по всему миру стали создавать свои отделы ИИ, занимающиеся разработкой экспертных систем. К 1985 году компании тратили более миллиарда долларов США в год на развитие технологии, но к началу 1990-х, из-за дороговизны в обслуживании, сложностей в масштабировании и ограниченности применения, интерес снова начал падать. Так началась вторая зима ИИ.

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

1.1.8. Перспективы ИИ

Даже при том, что наши ожидания на ближайшую перспективу могут быть нереалистичными, долгосрочная картина выглядит весьма ярко. Мы только начинаем применять глубокое обучение к решению многих важных задач: от медицинских диагнозов до цифровых помощников. В последние пять лет исследования в области ИИ продвигались удивительно быстро, во многом благодаря высокому уровню финансирования, никогда прежде не наблюдавшемуся в короткой истории искусственного интеллекта, но пока слишком малому, чтобы этот прогресс воплотить в продукты и процессы, формирующие наш мир. Большинство результатов исследований в глубоком обучении пока не нашли практического применения, по крайней мере применения к решению полного спектра задач, где эта технология могла бы найти применение. Ваш доктор и ваш бухгалтер пока не используют ИИ. Вы сами в своей повседневной жизни тоже, вероятно, не используете технологии ИИ. Конечно, вы можете задавать простые вопросы своему смартфону и получать разумные ответы, вы можете получить весьма полезные рекомендации при выборе товаров на Amazon.com и по фразе «день рождения» быстро найти в Google Photos фотографии со дня рождения вашей дочери, который был в прошлом месяце. Это, несомненно, большой шаг вперед. Но такие инструменты лишь дополняют нашу жизнь. ИИ еще не занял центральное место в нашей жизни, работе и мыслях.

Сейчас трудно поверить, что ИИ может оказать значительное влияние на наш мир, потому что еще не развернулся во всю ширь, — так в 1995 году трудно было поверить в будущее влияние интернета. В то время большинство не понимало, какое отношение к ним может иметь интернет и как он изменит их жизнь. То же можно сегодня сказать о глубоком обучении и об искусственном интеллекте. Будьте уверены: эра искусственного интеллекта наступит. В недалеком будущем ИИ станет вашим помощником и даже другом; он ответит на ваши вопросы, поможет воспитывать детей и проследит за здоровьем. Он доставит продукты к вашей двери и отвезет вас из пункта А в пункт Б. Это будет ваш интерфейс к миру, который все более усложняется и наполняется информа­цией. И, что особенно важно, ИИ будет способствовать человечеству в движении вперед, помогая ученым делать новые прорывные открытия во всех областях науки, от геномики до математики.

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

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

1.2. Что было до глубокого обучения: краткая история машинного обучения

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

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

1.2.1. Вероятностное моделирование

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

Наивный байесовский алгоритм — это вид классификатора машинного обучения, основанный на применении теоремы Байеса со строгими (или «наивными», откуда и происходит название алгоритма) предположениями о независимости входных данных. Эта форма анализа данных предшествовала появлению компьютеров и десятилетиями применялась вручную, пока не появилась ее первая реализация на компьютере (в 1950-х годах). Теорема Байеса и основы статистики были заложены в восемнадцатом столетии, и это все, что нужно для использования наивных байесовских классификаторов.

С этим алгоритмом тесно связана модель логистической регрессии (сокращенно logreg), которую иногда рассматривают как аналог примера «hello world» в машинном обучении. Пусть вас не вводит в заблуждение название. Модель логистической регрессии — это алгоритм классификации, а не регрессии. Так же как наив­ный байесовский алгоритм, модель логистической регрессии была разработана задолго до появления компьютеров, но до сих пор остается востребованной благодаря своей простоте и универсальной природе. Часто это первое, что пытается сделать исследователь со своим набором данных, чтобы получить представление о классификации.

1.2.2. Первые нейронные сети

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

Первое успешное практическое применение нейронных сетей датируется 1989 годом, когда Ян Лекун (Yann LeCun) в Bell Labs объединил ранние идеи сверточных нейронных сетей и обратного распространения ошибки и применил их для решения задачи распознавания рукописных цифр. Получившаяся в результате нейронная сеть была названа LeNet и использовалась почтовой службой США в 1990-х для автоматического распознавания почтовых индексов на конвертах.

1.2.3. Ядерные методы

По мере привлечения внимания исследователей к нейронным сетям в 1990-х и благодаря первому успеху приобрел известность новый подход к машинному обучению, быстро отправивший нейронные сети обратно в небытие: ядерные методы (kernel methods). Ядерные методы — это группа алгоритмов классификации, из которых наибольшую известность получил метод опорных векторов (Support Vector Machine, SVM). Современная формулировка SVM была предложена Владимиром Вапником (Vladimir Vapnik) и Коринной Кортес (Corinna Cortes) в начале 1990-х в Bell Labs и опубликована в 1995 году5. Прежняя линейная формулировка была опубликована Вапником и Алексеем Червоненкисом (Alexey Chervonenkis) в начале 1963 года6.

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

Поиск таких границ метод опорных векторов осуществляет в два этапа:

1. Данные отображаются в новое пространство более высокой размерности, где граница может быть представлена как гиперплоскость (если данные были двумерными, как на рис. 1.10, гиперплоскость вырождается в линию).

 

Рис. 1.10. Решающая граница

 

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

Методика отображения данных в пространство более высокой размерности, где задача классификации становится проще, может хорошо выглядеть на бумаге, но на практике часто оказывается трудноразрешимой. Вот тут и приходит на помощь изящная процедура kernel trick (ключевая идея, по которой ядерные методы получили свое название). Суть ее заключается в следующем: чтобы найти хорошие решающие гиперплоскости в новом пространстве, явно вычислять координаты точек в этом пространстве не требуется; достаточно вычислить расстояния между парами точек, что можно эффективно сделать с помощью функции ядра. Функция ядра — это незатратная вычислительная операция, отображающая любые две точки из исходного пространства и вычисляющая расстояние между ними в целевом пространстве представления, полностью минуя явное вычисление нового представления. Функции ядра обычно определяются вручную, а не извлекаются из данных — в случае с методом опорных векторов по данным определяется только разделяющая гиперплоскость.

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

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

1.2.4. Деревья решений, случайные леса и градиентный бустинг

Деревья решений — это иерархические структуры, которые позволяют классифицировать входные данные или предсказывать выходные значения по заданным исходным значениям (рис. 1.11). Они легко визуализируются и интерпретируются. Деревья решений, формируемые на основе данных, заинтересовали исследователей в 2000-х, и к 2010 году им часто отдавали предпочтение перед ядерными методами.

 

Рис. 1.11. Дерево решений: обучаемыми параметрами являются вопросы о данных. Таким вопросом мог бы быть, например, вопрос «Коэффициент 2 в данных больше 3,5?»

В частности, алгоритм случайного леса (Random Forest) предложил надежный и практичный подход к обучению на основе деревьев решений, включающий создание большого количества специализированных деревьев решений с последующим объединение выдаваемых ими результатов. Случайные леса применимы к широкому кругу задач — можно сказать, что они почти всегда являются оптимальным алгоритмом для любых задач поверхностного машинного обучения. Когда в 2010 году был запущен популярный конкурсный веб-сайт Kaggle (http://kaggle.com), посвященный машинному обучению, случайные леса быстро превратились в ­наиболее популярную платформу, пока в 2014 году не появился метод градиентного бустинга. Метод градиентного бустинга, во многом напоминающий случайный лес, — это прием машинного обучения, основанный на объединении слабых моделей прогнозирования, обычно — деревьев решений. Он использует градиентный бустинг, способ улучшения любой модели машинного обучения путем итеративного обучения новых моделей, специализированных для устранения слабых мест в предыдущих моделях. Применительно к деревьям решений прием градиентного бустинга позволяет получить модели, которые в большинстве случаев превосходят случайные леса — при сохранении аналогичных свойств. На сегодняшний день это один из лучших алгоритмов, хотя и несамый лучший, для решения задач, не связанных с распознаванием. Наряду с глубоким обучением это один из наиболее широко используемых приемов на сайте Kaggle.

1.2.5. Назад к нейронным сетям

Примерно в 2010 году, несмотря на почти полную потерю интереса к нейронным сетям со стороны научного сообщества, ряд исследователей, продолжавших работать с нейронными сетями, стали добиваться важных успехов: группы Джеффри Хинтона (Geoffrey Hinton) из университета в Торонто, Йошуа Бенгио (Yoshua Bengio) из университета в Монреале, Яна Лекуна (Yann LeCun) из университета в Нью-Йорке и исследователи в научно-исследовательском институте искусственного интеллекта IDSIA в Швейцарии.

В 2011 году Ден Киресан (Dan Ciresan) из IDSIA выиграл академический конкурс по классификации изображений с применением глубоких нейронных сетей, обу­чаемых на GPU, — это был первый практический успех современного глубокого обучения. Но перелом произошел в 2012 году, когда группа Хинтона приняла участие в ежегодном соревновании ImageNet по крупномасштабному распознаванию образов. ImageNet предложила очень сложное на то время задание, заключающееся в классификации цветных изображений с высоким разрешением на 1000 разных категорий после обучения по выборке, включающей 1,4 миллиона изображений. В 2011 году модель-победитель, основанная на классических подходах к распознаванию образов, показала точность лишь 74,3 %. В 2012 году команда Алекса Крижевски (Alex Krizhevsky), в которой советником был Джеффри Хинтон (Geoffrey Hinton), достигла точности в 83,6 % — значительный прорыв. С тех пор каждый год первые позиции в этом соревновании занимают глубокие сверточные нейронные сети. В 2015 году победитель достиг точности в 96,4 %, и задача классификации на ImageNet была сочтена решенной полностью.

Начиная с 2012 года глубокие сверточные нейронные сети (сокращенно convnets) перешли в разряд передовых алгоритмов для всех задач распознавания образов; в более общем плане они с успехом могут использоваться в любых задачах распознавания. На крупных конференциях по распознаванию образов, проводившихся в 2015 и 2016 годах, было трудно найти презентацию, не включающую сверточные нейросети в том или ином виде. В то же время глубокое обучение нашло применение во многих других видах задач, таких как обработка естественного языка. Оно полностью заменило метод опорных векторов и деревья решений в широком круге задач. Например, в течение нескольких лет Европейская организация по ядерным исследованиям (European Organization for Nuclear Research, CERN) использовала методы на основе деревьев решений для данных, получаемых с детектора частиц ATLAS в большом адронном коллайдере, но затем в CERN было принято решение перейти на использование глубоких нейронных сетей на основе Keras из-за их более высокой производительности и простоты обучения на больших наборах данных.

1.2.6. Отличительные черты глубокого обучения

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

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

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

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

1.2.7. Современный ландшафт машинного обучения

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

В 2016 и 2017 годах на сайте Kaggle главенствовали два подхода: метод градиентного бустинга и глубокое обучение. Метод градиентного бустинга, в частности, использовался для решения задач, где присутствовали структурированные данные, тогда как глубокое обучение использовалось для решения задач распознавания, таких как классификация изображений. Те, кто практикует первый подход, почти всегда используют великолепную библиотеку XGBoost, предлагающую поддержку двух языков, наиболее популярных в науке о данных, — Python и R. Между тем большинство конкурсантов, практикующих глубокое обучение, используют библиотеку Keras — простую в применении, гибкую и поддерживающую язык Python.

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

1.3. Почему глубокое обучение? Почему сейчас?

Две ключевые идеи глубокого обучения для решения задач распознавания образов — сверточные нейронные сети и алгоритм обратного распространения ошибки — были хорошо известны уже в 1989 году. Алгоритм долгой краткосрочной памяти (Long Short-Term Memory, LSTM), составляющий основу глубокого обу­чения для прогнозирования временных рядов, был предложен в 1997 году и с тех пор почти не изменился. Так почему же глубокое обучение начало применяться только с 2012 года? Что изменилось за эти два десятилетия?

В целом машинным обучением движут три технические силы:

• оборудование;

• наборы данных и тесты;

• алгоритмические достижения.

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

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

1.3.1. Оборудование

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

Но типичные модели глубокого обучения, используемые для распознавания образов или речи, требуют вычислительной мощности на порядки больше, чем мощность ноутбука. В течение 2000-х такие компании, как NVIDIA и AMD, вложили миллионы долларов в разработку быстрых процессоров с массовым параллелизмом (графических процессоров — Graphical Processing Unit [GPU]) для поддержки графики все более реалистичных видеоигр — недорогих, специализированных суперкомпьютеров, предназначенных для отображения на экране сложных трехмерных сцен в режиме реального времени. Эти инвестиции принесли пользу научному сообществу, когда в 2007 году компания NVIDIA выпустила CUDA (https://developer.nvidia.com/about-cuda), программный интерфейс для линейки своих GPU. Несколько GPU теперь могут заменить мощные кластеры на обычных процессорах в различных задачах, допускающих возможность массового распараллеливания вычислений, начиная с физического моделирования. Глубокие нейронные сети, выполняющие в основном умножение множества маленьких матриц, также допускают высокую степень распараллеливания; и ближе к 2011 году некоторые исследователи начали писать CUDA-реализации нейронных сетей. Одними из первых стали Дэн Кайесан (Dan Ciresan)7 и Алекс Крижевски (Alex Krizhevsky)8.

Получилось так, что игровая индустрия субсидировала создание суперкомпьютеров для следующего поколения приложений искусственного интеллекта. Иногда крупные достижения начинаются с игр. Современный графический процессор NVIDIA TITAN X, стоивший 1000 долларов США в конце 2015 года, способен выдать пиковую производительность 6,6 терафлопса с одинарной точностью: 6,6 триллиона операций в секунду с числами типа float32. Это почти в 350 раз больше производительности современного ноутбука. Графическому процессору TITAN X требуется всего несколько дней для обучения модели ImageNet, выигравшей конкурс ILSVRC несколько лет тому назад. Между тем большие компании обучают модели глубокого обучения на кластерах, состоящих из сотен GPU, разработанных специально для нужд глубокого обучения, таких как NVIDIA Tesla K80. Эти кластеры обладают такой вычислительной мощностью, которая не была бы возможна без современных GPU.

Более того, индустрия глубокого обучения начинает выходить за рамки GPU и инвестировать средства в развитие еще более специализированных процессоров, ­наиболее эффективно показывающих себя в области глубокого обучения. В 2016 году на своей ежегодной конференции Google I/O компания Google продемонстрировала свой проект тензорного процессора (Tensor Processing Unit, TPU): процессор с новой архитектурой, предназначенный для использования в глубоких нейронных сетях, который, как сообщается, в 10 раз производительнее и энергоэффективнее, чем GPU.

1.3.2. Данные

Иногда искусственный интеллект объявляется новой индустриальной революцией. Если глубокое обучение — паровой двигатель этой революции, то данные — это уголь: сырье, питающее наши интеллектуальные машины, без которого невозможно движение вперед. К вопросу о данных: вдобавок к экспоненциальному росту емкости устройств хранения информации, наблюдавшемуся в последние 20 лет (согласно закону Мура), перемены в игровом мире вызвали бурный рост интернета, благодаря чему появилась возможность накапливать и распространять очень большие объемы данных для машинного обучения. В настоящее время крупные компании работают с коллекциями изображений, видео и текстовых материалов, которые невозможно было бы собрать без интернета. Например, изображения на сайте Flickr, классифицированные пользователями, стали золотой жилой для разработчиков моделей распознавания образов. То же можно сказать о видеороликах на YouTube. А Википедия стала ключевым источником наборов данных для задач обработки естественного языка.

Если и есть набор данных, ставший катализатором для развития глубокого обу­чения, то это коллекция ImageNet, включающая 1,4 миллиона изображений, классифицированных вручную на 1000 категорий (каждое изображение отнесено только к одной категории). Но особенной коллекцию ImageNet делает не столько ее огромный размер, но сколько ежегодные соревнования9, в которых она задействована.