Глубокое обучение с R и Keras [Франсуа Шолле] (pdf) читать онлайн

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

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

Глубокое обучение с R и Keras

Deep Learning with R
SECOND EDITION

FRANÇOIS CHOLLET
with T O M A S Z K A L I N OW S K I
and J. J. A L L A I R E

Глубокое обучение с R и Keras

Ф РА Н СУА Ш О Л Л Е
при участии
Томаша Калиновски
и Дж. Дж. Аллера

Москва, 2023

УДК 004.85
ББК 32.971.3
Ш78

Шолле Ф.
Ш78 Глубокое обучение с R и Keras / пер. с англ. В. С. Яценкова. – М.: ДМК Пресс,
2022. – 646 с.: ил.
ISBN 978-5-93700-189-4
Прочитав эту книгу, вы получите четкое представление о том, что такое глубокое обучение, когда его следует применять и каковы его ограничения. Авторы
описывают стандартный рабочий процесс поиска решения задачи машинного
обучения и рассказывают, как устранять часто возникающие проблемы. Всесторонне рассматривается использование Keras для решения самых разнообразных
прикладных задач, в числе которых классификация и сегментация изображений,
прогнозирование временных рядов, классификация текста, машинный перевод,
генерация текста и многое другое.
Издание адресовано читателям со средними навыками программирования на R.
Опыт работы с Keras, TensorFlow или моделями глубокого обучения не требуется.

УДК 004.85
ББК 32.971.3

Copyright © DMK Press 2022. Authorized translation of the English edition © 2022 Manning
Publications. This translation is published and sold by permission of Manning Publications, the
owner of all rights to publish and sell the same.
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения
владельцев авторских прав.

ISBN 978-1-6334-3979-5 (англ.)
ISBN 978-5-93700-189-4 (рус.)

© Manning Publications, 2022
© Перевод, оформление, издание, ДМК Пресс, 2022

Отзывы о первом издании
«Самое понятное объяснение глубокого обучения, которое я когда-либо встречал… приятно и легко читается».
– Ричард Тобиас, Cephasonics
«Эта книга сокращает разрыв между идеями и работающей системой глубокого обучения».
– Петр Рабинович, Akamai
«Все основные темы и концепции глубокого обучения раскрыты и доходчиво
объяснены с использованием примеров кода и графиков вместо математических формул».
– Срджан Сантич, Springboard.com

Оглавление
1
2
3
4
5
6
7
8
9
10
11
12
13
14
















Что такое глубокое обучение?......................................................................24
Математические основы нейронных сетей................................................55
Введение в Keras и TensorFlow...................................................................104
Примеры работы с нейросетью: классификация и регрессия.................143
Основы машинного обучения....................................................................173
Обобщенный рабочий процесс машинного обучения.............................215
Работа с Keras: углубленные навыки.........................................................239
Глубокое обучение в компьютерном зрении............................................277
Глубокое обучение для компьютерного зрения........................................321
Глубокое обучение и временные ряды......................................................370
Глубокое обучение в обработке текстов....................................................408
Генеративные модели глубокого обучения...............................................484
Глубокое обучение в реальной жизни.......................................................547
Заключение..................................................................................................571

Содержание
Оглавление........................................................................................................... 6
Предисловие....................................................................................................... 15
Благодарности.................................................................................................. 17
Об этой книге. .................................................................................................. 18
Об иллюстрации на обложке. ........................................................................ 22
Об авторах........................................................................................................ 23

1

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

1.2

1.3

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

1.1.1
1.1.2
1.1.3
1.1.4
1.1.5
1.1.6
1.1.7
1.1.8

Искусственный интеллект....................................................... 25
Машинное обуче­ние.................................................................... 26
Извлечение правил и представлений из данных. .................... 28
«Глубина» глубокого обуче­ния................................................... 31
Принцип действия глубокого обуче­ния в трех рисунках........ 33
Каких успехов достигло глубокое обуче­ние.............................. 35
Не верьте рекламной шумихе................................................... 36
Перспективы развития ИИ. ..................................................... 37

1.2.1
1.2.2
1.2.3
1.2.4
1.2.5
1.2.6
1.2.7

Вероятностное моделирование................................................ 39
Первые нейронные сети............................................................. 39
Ядерные методы......................................................................... 40
Деревья решений, случайные леса и градиентный
бустинг........................................................................................ 42
Назад к нейронным сетям. ....................................................... 43
Отличительные черты глубокого обуче­ния............................ 44
Современный ландшафт машинного обуче­ния....................... 45

1.3.1
1.3.2
1.3.3
1.3.4
1.3.5
1.3.6

Оборудование.............................................................................. 48
Данные......................................................................................... 49
Алгоритмы. ................................................................................ 50
Новая волна инвестиций........................................................... 51
Демократизация глубокого обуче­ния....................................... 52
Ждать ли продолжения этой тенденции?.............................. 52

Краткая история машинного обуче­ния.......................................... 38

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

Содержание

8

2

Математические основы нейронных сетей................. 55
2.1
2.2

2.3

2.4

2.5

Первое знакомство с нейронной сетью. ........................................ 56
Представление данных для нейронных сетей.............................. 60

2.2.1
2.2.2
2.2.3
2.2.4
2.2.5
2.2.6
2.2.7
2.2.8
2.2.9
2.2.10
2.2.11
2.2.12

Скаляры (тензоры нулевого ранга).......................................... 61
Векторы (тензоры первого ранга)........................................... 61
Матрицы (тензоры второго ранга). ....................................... 62
Тензоры третьего и более высокого рангов. ........................... 62
Ключевые атрибуты.................................................................. 62
Манипулирование тензорами в R............................................. 64
Пакеты данных. ......................................................................... 64
Практические примеры тензоров с данными......................... 65
Векторные данные..................................................................... 65
Временные ряды, или последовательности данных. .............. 66
Изображения............................................................................... 67
Видеоданные. .............................................................................. 67

2.3.1
2.3.2
2.3.3
2.3.4
2.3.5
2.3.6

Поэлементные операции........................................................... 69
Операции с тензорами разной размерности.......................... 70
Скалярное произведение тензоров........................................... 72
Изменение формы тензора....................................................... 74
Геометрическая интерпретация операций с тензорами. .... 75
Геометрическая интерпретация глубокого обуче­ния............ 79

Шестеренки нейронных сетей: операции с тензорами.............. 68

Механизм нейронных сетей: оптимизация на основе
градиента............................................................................................... 80

2.4.1 Что такое производная?........................................................... 82
2.4.2 Производная операций с тензорами: градиент...................... 83
2.4.3 Стохастический градиентный спуск....................................... 85
2.4.4 Объединение производных: алгоритм обратного
распространения ошибки...................................................................... 88

Возвращаясь к нашему первому примеру..................................... 95

2.5.1
2.5.2
2.5.3
2.5.4

Повторная реализация нашего первого примера с нуля
в TensorFlow. ............................................................................... 97
Выполнение одного шага обуче­ния............................................ 99
Полный цикл обуче­ния. .............................................................101
Оценка модели...........................................................................102

Краткие итоги главы. ....................................................................................103

3

Введение в Keras и TensorFlow..................................................104
3.1
3.2
3.3
3.4
3.5
3.6
3.7

Что такое TensorFlow?........................................................................105
Что такое Keras?...................................................................................106
Keras и TensorFlow: краткая история. ............................................107
Интерфейсы Python и R: краткая история....................................108
Настройка среды разработки для глубокого обучения..............109

3.5.1

Установка Keras и TensorFlow. ................................................110

3.6.1

Тензоры TensorFlow...................................................................112

Первые шаги с TensorFlow................................................................111
Атрибуты тензоров.............................................................................113

Содержание

3.7.1
3.7.2
3.7.3
3.7.4
3.7.5
3.7.6
3.7.7
3.7.8

3.8

9

Форма тензора и ее изменение................................................114
Срезы тензоров.........................................................................116
Операции с тензорами разной размерности.........................117
Модуль tf.....................................................................................117
Неизменность тензоров и переменные..................................119
Математические операции в TensorFlow...............................120
Взгляд на API GradientTape с другой стороны........................121
Полный пример: линейный классификатор в чистом
TensorFlow..................................................................................122

Анатомия нейронной сети и основы API Keras...........................127

3.8.1
3.8.2
3.8.3
3.8.4
3.8.5
3.8.6
3.8.7

Слои: строительные блоки глубокого обуче­ния.....................128
От слоев к моделям. .................................................................132
Этап «компиляции»: настройка процесса обучения.............134
Выбор функции потерь.............................................................137
Использование метода fit().....................................................138
Отслеживание потерь и показателей на контрольных
данных. .......................................................................................139
Использование модели после обуче­ния....................................140

Краткие итоги главы. ....................................................................................141

4

Примеры работы с нейросетью:
классификация и регрессия.........................................................143
4.1

Классификация отзывов к фильмам: пример бинарной
классификации....................................................................................145

4.1.1
4.1.2
4.1.3
4.1.4
4.1.5

4.2

4.1.6
4.1.7

Классификация новостных лент: пример многоклассовой
классификации....................................................................................156

4.2.1
4.2.2
4.2.3
4.2.4
4.2.5
4.2.6
4.2.7

4.3

Набор данных IMDB. .................................................................145
Подготовка данных...................................................................147
Создание модели........................................................................148
Проверка вашего выбора. .........................................................151
Использование обученной сети для прогнозирования
на новых данных........................................................................154
Продолжаем эксперименты.....................................................155
Промежуточные итоги............................................................155

4.2.8
4.2.9

Набор данных Reuters................................................................156
Подготовка данных...................................................................158
Построение модели...................................................................158
Проверка модели. ......................................................................159
Предсказания на новых данных................................................161
Другой способ обработки меток и потерь.............................162
Важность использования достаточно больших
промежуточных слоев. .............................................................162
Дальнейшие эксперименты......................................................163
Промежуточные итоги............................................................163

4.3.1
4.3.2
4.3.3

Набор данных с ценами на жилье в Бостоне..........................164
Подготовка данных...................................................................165
Построение модели...................................................................165

Предсказание цен на дома: пример регрессии...........................164

Содержание

10

4.3.4
4.3.5
4.3.6

Оценка качества модели методом K-кратной
перекрестной проверки............................................................166
Выдача прогнозов на новых данных.........................................171
Промежуточные выводы..........................................................171

Краткие итоги главы. ....................................................................................171

5

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

5.3

5.4

Обобщение – цель машинного обуче­ния......................................173

5.1.1
5.1.2

Недообучение и переобучение...................................................174
Базовые принципы обобщения в глубоком обуче­нии..............180

5.2.1
5.2.2

Наборы данных для обуче­ния, проверки и контроля. ............187
Использование критериев, основанных на здравом
смысле.........................................................................................191
Что следует помнить об оценке модели................................192

Оценка моделей машинного обуче­ния.........................................187

5.2.3

Улучшение качества обуче­ния модели..........................................193

5.3.1
5.3.2
5.3.3

Настройка ключевых параметров градиентного спуска.....193
Использование лучшей априорно обоснованной
архитектуры.............................................................................196
Увеличение емкости модели. ...................................................197

5.4.1
5.4.2
5.4.3
5.4.4

Подготовка набора данных......................................................199
Конструирование признаков....................................................200
Использование ранней остановки...........................................202
Регуляризация модели...............................................................202

Как улучшить обобщение. ................................................................199

Краткие итоги главы. ....................................................................................213

6

Обобщенный рабочий процесс машинного
обучения......................................................................................................215
6.1

6.2

6.3

Постановка задачи. ............................................................................217

6.1.1
6.1.2
6.1.3
6.1.4

Уточнение задачи. ....................................................................217
Получение исходных данных.....................................................219
Добейтесь понимания данных. ................................................223
Выберите меру успеха. .............................................................224

6.2.1
6.2.2
6.2.3
6.2.4
6.2.5

Подготовка данных...................................................................225
Выбор протокола оценки..........................................................227
Как превзойти простой базовый уровень...............................228
Масштабирование: разработка модели, способной
к переобучению..........................................................................229
Регуляризация и настройка модели........................................230

6.3.1
6.3.2
6.3.3
6.3.4

Представление модели заказчику. ..........................................231
Передача модели заказчику......................................................232
Мониторинг модели в рабочей среде. .....................................236
Поддержка и обновление модели. ............................................236

Разработка модели. ............................................................................225

Развертывание модели......................................................................231

Краткие итоги главы. ....................................................................................237

Содержание

7

11

Работа с Keras: углубленные навыки.................................239
7.1
7.2

7.3

7.4

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

7.2.1
7.2.2
7.2.3
7.2.4
7.2.5

Sequential API.............................................................................241
Functional API. ...........................................................................244
Создание подкласса класса Model.............................................251
Смешивание и сочетание разных компонентов....................255
Используйте правильные инструменты................................256

7.3.1
7.3.2
7.3.3
7.3.4

Разработка собственных метрик. .........................................257
Использование обратных вызовов...........................................260
Разработка собственных обратных вызовов........................262
Мониторинг и визуализация с по­мощью TensorBoard...........264

7.4.1
7.4.2
7.4.3
7.4.4
7.4.5

Обучение или логический вывод...............................................267
Использование метрик на низком уровне. .............................268
Полный цикл обуче­ния и оценки...............................................269
Увеличьте быстродействие с по­мощью tf_function()........272
Использование fit() с пользовательским циклом
обучения. ....................................................................................273

Использование встроенных циклов обучения и оценки..........256

Разработка собственных циклов обучения и оценки................266

Краткие итоги главы. ....................................................................................276

8

Глубокое обучение в компьютерном зрении................277
8.1
8.2

8.3

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

8.1.1
8.1.2

Операция свертки.....................................................................281
Выбор максимального значения из соседних (max-pooling).....286

8.2.1
8.2.2
8.2.3
8.2.4
8.2.5

Целесообразность глубокого обуче­ния для решения
задач с небольшими наборами данных....................................290
Загрузка данных. .......................................................................290
Построение сети. .....................................................................293
Предварительная обработка данных.....................................295
Расширение данных...................................................................301

8.3.1
8.3.2

Выделение признаков................................................................306
Дообучение ранее обученной модели.......................................316

Обучение сверточной нейронной сети с нуля
на небольшом наборе данных.........................................................289

Использование предварительно обученной сверточной
нейронной сети...................................................................................305

Краткие итоги главы. ....................................................................................320

9

Глубокое обучение для компьютерного зрения. ........321
9.1
9.2
9.3

Три основные задачи компьютерного зрения. ...........................322
Пример сегментации изображения. ..............................................323
Современные стандартные архитектуры сверточных
сетей.......................................................................................................333

9.3.1
9.3.2

Модульность, иерархия и повторное использование.............334
Остаточные связи....................................................................337

Содержание

12

9.3.3
9.3.4
9.3.5

9.4

Пакетная нормализация..........................................................341
Разделяемые по глубине свертки.............................................344
Применим знания на практике: мини-модель,
подобная Xception......................................................................347

Интерпретация знаний сверточной нейросети..........................350

9.4.1
9.4.2
9.4.3

Визуализация промежуточных активаций............................351
Визуализация сетевых фильтров............................................357
Визуализация тепловых карт активации класса..................363

Краткие итоги главы. ....................................................................................369

10

Глубокое обучение и временные ряды................................370
10.1 Различные виды задач временных рядов. ...................................370
10.2 Пример прогнозирования температуры.......................................372

10.2.1 Подготовка данных...................................................................376
10.2.2 Простое решение задачи без привлечения машинного
обучения. ....................................................................................380
10.2.3 Решение с использованием базовой модели машинного
обучения. ....................................................................................382
10.2.4 Эксперимент с одномерной сверточной сетью.....................384
10.2.5 Первый вариант простой рекуррентной модели..................387

10.3 Рекуррентные нейронные сети.......................................................388

10.3.1 Рекуррентный слой в Keras......................................................391

10.4 Продвинутое применение рекуррентных нейронных сетей.....396

10.4.1 Использование рекуррентного прореживания
для борьбы с переобуче­ни­ем.....................................................397
10.4.2 Наложение рекуррентных слоев..............................................400
10.4.3 Использование двунаправленных рекуррентных сетей........402
10.4.4 Что дальше................................................................................405

Краткие итоги главы. ....................................................................................407

11

Глубокое обучение в обработке текстов.......................408
11.1 Обработка естественного языка: обзор отрасли.........................408
11.2 Подготовка текстовых данных. .......................................................411
11.2.1
11.2.2
11.2.3
11.2.4

Стандартизация текста........................................................412
Разделение текста (токенизация)..........................................413
Индексация словаря. .................................................................414
Использование слоя layer_text_vectorization.....................416

11.3 Два подхода к представлению групп слов: наборы
и последовательности........................................................................420
11.3.1 Подготовка данных обзоров фильмов IMDB. .........................421
11.3.2 Обработка слов без учета порядка.........................................424
11.3.3 Обработка последовательности слов....................................432

11.4 Архитектура Transformer. .................................................................446
11.4.1
11.4.2
11.4.3
11.4.4

Механизм самовнимания..........................................................446
Многоголовое внимание............................................................452
Кодировщик в архитектуре Transformer................................453
Когда следует использовать модели
последовательности, а не модели мешка слов. .....................463

Содержание

13

11.5 Помимо классификации текста: обучение
преобразованию последовательностей.........................................464

11.5.1 Пример машинного перевода...................................................466
11.5.3 Рекуррентная модель преобразования
последовательностей...............................................................469
11.5.4 Преобразование последовательностей с Transformer...........476

Краткие итоги главы. ....................................................................................482

12

Генеративные модели глубокого обучения....................484
12.1 Генерирование текста с помощью Keras.......................................486
12.1.1
12.1.2
12.1.3
12.1.4
12.1.5

Краткая история генеративных сетей..................................486
Как генерируют последовательности данных?.....................488
Важность стратегии выбора..................................................488
Реализация генерации текста с по­мощью Keras. ..................491
Обратный вызов генерации текста с выборкой
при разной температуре.........................................................495
12.1.6 Подведение итогов....................................................................502

12.2 DeepDream............................................................................................502

12.2.1 Реализация DeepDream в Keras................................................503
12.2.2 Подведение итогов....................................................................511

12.3 Нейронный перенос стиля. ..............................................................512
12.3.1
12.3.2
12.3.3
12.3.4

Функция потерь содержания. ..................................................513
Функция потерь стиля.............................................................513
Реализация переноса стиля в Keras.........................................514
Подведение итогов....................................................................522

12.4 Генерация изображений с помощью вариационных
автокодировщиков.............................................................................522

12.4.1 Выбор шаблонов из скрытых пространств изображений....523
12.4.2 Концептуальные векторы для редактирования
изображений..............................................................................524
12.4.3 Вариационные автокодировщики. ..........................................525
12.4.4 Реализация VAE с по­мощью Keras............................................528
12.4.5 Подведение итогов....................................................................534

12.5 Введение в генеративно-состязательные сети............................534
12.5.1
12.5.2
12.5.3
12.5.4
12.5.5
12.5.6
12.5.7

Реализация генеративно-состязательной сети...................536
Полезные технические приемы................................................537
Получение набора данных CelebA. ...........................................538
Дискриминатор.........................................................................540
Генератор. .................................................................................541
Состязательная сеть...............................................................542
Подведение итогов....................................................................545

Краткие итоги главы. ....................................................................................546

13

Глубокое обучение в реальной жизни.................................547
13.1 Получение максимальной отдачи от ваших моделей................548

13.1.1 Оптимизация гиперпараметров.............................................548
13.1.2 Ансамблирование моделей. ......................................................557

13.2 Масштабируемое обуче­ние моделей. ............................................559

Содержание

14

13.2.1 Ускорение обуче­ния на GPU со смешанной точностью.........560
13.2.2 Обучение модели на нескольких GPU.......................................563
13.2.3 Обучение модели на TPU...........................................................568

Краткие итоги главы. ....................................................................................570

14

Заключение...............................................................................................571
14.1 Краткий обзор ключевых понятий.................................................572
14.1.1 Различные подходы к ИИ. .........................................................572
14.1.2 Что выделяет глубокое обуче­ние среди других подходов
к машинному обуче­нию.............................................................573
14.1.3 Как правильно воспринимать глубокое обуче­ние..................573
14.1.4 Ключевые технологии глубокого обуче­ния..............................575
14.1.5 Обобщенный рабочий процесс машинного обуче­ния..............576
14.1.6 Основные архитектуры сетей................................................577
14.1.7 Пространство возможностей. ...............................................582

14.2 Ограничения глубокого обуче­ния..................................................584
14.2.1 Риск очеловечивания моделей глубокого обуче­ния.................585
14.2.2 Принципиальное различие между автоматом
и интеллектом..........................................................................587
14.2.3 Различие между локальным и экстремальным
обобщением................................................................................589
14.2.4 Предназначение интеллекта...................................................592
14.2.5 Восхождение по уровням обобщения. ......................................593

14.3 Курс на большую универсальность в ИИ.......................................594
14.3.1 О важности постановки правильной цели: правило
короткого пути.........................................................................594
14.3.2 Новая цель..................................................................................597

14.4 Реализация интеллекта: недостающие ингредиенты. ..............599
14.4.1
14.4.2
14.4.3
14.4.4

Построение и использование абстрактных аналогий..........599
Два полюса абстракции. ..........................................................601
Сочетание двух полюсов абстракции.....................................604
Недостающая половина картинки. ........................................604

14.5 Будущее глубокого обуче­ния. ..........................................................606
14.5.1
14.5.2
14.5.3
14.5.4

Модели как программы.............................................................606
Машинное обуче­ние и синтез программ.................................608
Сочетание глубокого обуче­ния и синтеза программ.............608
Непрерывное обуче­ние и повторное использование
модульных подпрограмм...........................................................611
14.5.5 Долгосрочная перспектива. .....................................................612

14.6 Как не отстать от прогресса в быстро развивающейся
отрасли. .................................................................................................614

14.6.1 Решения реальных задач на сайте Kaggle...............................614
14.6.2 Знакомство с последними разработками на сайте arXiv....614
14.6.3 Исследование экосистемы Keras..............................................615

14.7 Заключительное слово.......................................................................616
Приложение. Введение в Python для пользователей R..............................617
Предметный указатель.................................................................................641

Предисловие
Если вы решили приобрести эту книгу, то наверняка наслышаны
о небывалом успехе методики глубокого обуче­ния в области искусственного интеллекта. Мы прошли путь от почти бесполезного распознавания образов и речи до невероятно эффективного решения
этих задач. Последствия такого внезапного прогресса отразились
почти повсеместно. Сегодня мы применяем глубокое обуче­ние для
решения целого ряда важных задач в таких разных областях, как
визуализация медицинских данных, сельское хозяйство, автономное вождение, образование, предотвращение стихийных бедствий
и промышленное производство.
Тем не менее я считаю, что глубокое обуче­ние все еще находится
в зачаточном состоянии. Пока оно реализовало лишь малую часть
своего потенциала. Со временем глубокое обуче­ние проникнет
в каждую область, где может принести пользу, – трансформация, которая займет не одно десятилетие.
Однако для того чтобы начать внедрение технологии глубокого
обуче­ния во все задачи, которые можно решить с ее применением,
мы должны сделать ее доступной как можно большему числу людей,
включая неспециалистов – то есть тех, кто не является инженеромисследователем или аспирантом. Чтобы раскрыть весь потенциал
глубокого обуче­ния, мы должны полностью демократизировать его.
И сегодня я считаю, что мы находимся на пороге исторического перелома, когда глубокое обуче­ние выходит из академических лабораторий и отделов исследований и разработок крупных технологических
компаний, чтобы стать обыденной частью набора инструментов
каждого разработчика, – очень похоже на историю веб-технологий
в конце 1990-х. Сейчас почти любой желающий может создать вебсайт или веб-приложение для своего бизнеса или сообщества, хотя

16

Предисловие

в 1998 го­ду для этого потребовалась бы команда специалистов. В недалеком будущем любой, у кого есть идея и базовые навыки программирования, сможет создавать интеллектуальные приложения,
которые обучаются на основе данных.
Когда в марте 2015 года я выпустил первую версию фреймворка
глубокого обуче­ния Keras, я не стремился сделать общедоступным
искусственный интеллект (ИИ). Я несколько лет занимался исследованиями в области машинного обуче­ния и создал Keras для использования в собственных экспериментах. Но с 2015 года в область
глубокого обуче­ния пришли сотни тысяч новичков; многие из них
выбрали Keras в качестве любимого инструмента. Наблюдая за тем,
как множество новичков и опытных специалистов используют Keras
самыми неожиданными и эффективными способами, я пришел
к выводу, что нужно задуматься о доступности и демократизации
ИИ. Я осознал, что чем шире мы будем распространять эти технологии, тем ценнее они будут становиться. Доступность быстро стала
одной из главных целей Keras, и за несколько лет сообществу разработчиков удалось добиться фантастических достижений в этом направлении. Мы «вручили» технологию глубокого обуче­ния сотням
тысяч людей, и они, в свою очередь, воспользовались ею для решения важных проблем, которые до недавнего времени считались неразрешимыми.
Книга, которую вы держите, – еще один шаг на пути к тому, чтобы
сделать глубокое обуче­ние доступным как можно большему коли­
честву людей. Фреймворк Keras всегда нуждался в сопроводительном
курсе, который одновременно освещал бы основы глубокого обуче­
ния, показывал примеры его использования и демонстрировал лучшие практики в применении Keras. В 2016 и 2017 годах я приложил
изрядные усилия, что создать такой курс. Он лег в основу первого
издания этой книги, выпущенной в декабре 2017 года. Книга быстро
стала бестселлером по машинному обуче­нию, разошлась тиражом
более 50 000 экземпляров и была переведена на 12 языков.
Однако область глубокого обуче­ния быстро развивается. С момента публикации первого издания произошло много важных событий – выпуск TensorFlow 2, растущая популярность архитектуры
Transformer и многое другое. Поэтому в конце 2019 года я решил
обновить свою книгу. Сначала я наивно думал, что смогу обойтись
обновлением около 50 % контента, и объем второго издания почти
не изменится. На самом деле после двух лет работы новая редакция
оказалась более чем на треть длиннее, в ней 75 % нового материала.
Это больше, чем обновление, это совершенно новая книга.
Я писал ее, стараясь максимально доступно объяснить идеи, лежащие в основе глубокого обуче­ния и его реализации. Это не значит,
что я преднамеренно упрощал изложение – я искренне убежден, что
в теме глубокого обуче­ния нет ничего сложного. Надеюсь, эта книга
принесет вам пользу и поможет начать создавать интеллектуальные
приложения и решать важные для вас задачи.

Благодарности
Прежде всего я хочу поблагодарить сообщество Keras за помощь
в создании этой книги. За последние шесть лет сообщество Keras выросло до сотен добровольных разработчиков исходного кода и более
миллиона пользователей. Ваш вклад и отзывы помогли превратить
Keras в то, чем он является сейчас.
Я хотел бы внести в эту благодарность глубоко личные нотки и поблагодарить свою жену за ее всемерную поддержку во время разработки Keras и написания этой книги.
Я также хочу поблагодарить Google за поддержку проекта Keras.
Было очень приятно, когда Keras решили использовать в качестве
высокоуровневого API TensorFlow. Бесшовная интеграция Keras
и TensorFlow приносит большую пользу пользователям обоих продуктов и делает глубокое обуче­ние доступным для широкого круга
пользователей.
Я хочу поблагодарить сотрудников издательства Manning, благодаря которым эта книга стала возможной: издателя Марджана Бейса и всех сотрудников редакторского и производственного отделов,
в том числе Майкла Стивенса, Дженнифер Стаут, Александра Драгосавлевича, Энди Маринковича, Памелу Хант, Сьюзен Ханиуэлл, Кери
Хейлз, Пола Уэллса и многих других, работавших за кулисами.
Большое спасибо всем рецензентам – Арнальдо Аялу Мейеру, Давиде Кремонези, Дхинакарану Венкату, Эдварду Ли, Фернандо Гарсие Седано, Джоэлу Котарски, Марсио Николау, Майклу Петри, Питеру Хенстоку, Шахнавазу Али, Сураву Бисвасу, Тиаго Бритто Борхесу,
Тони Дубицки, Владу Навицки и всем, кто присылал нам отзывы
о первом издании книги. Ваши предложения помогли сделать эту
книгу лучше.
Что касается технической стороны, особая благодарность Нино­
славу Черкезу, который работал техническим корректором книги.

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

Об этой книге

19

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

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

О примерах кода
Эта книга содержит большое количество примеров исходного кода
как в пронумерованных листингах, так и в виде обычного текста.
В обоих случаях исходный код представлен шрифтом фиксированной ширины, чтобы он отличался от обычного текста. Вывод работающего кода аналогичным образом отформатирован шрифтом
фиксированной ширины, но также снабжен вертикальной серой полосой слева. На протяжении всей книги вы найдете код и выходные
данные кода, чередующиеся следующим образом:
print("R is awesome!")
[1] "R is awesome!"

Об этой книге

20

Во многих случаях исходный код был переформатирован; нам
пришлось добавить разрывы строк и изменить отступы, чтобы код
умещался на доступном пространстве страницы. В редких случаях
этого было недостаточно, и некоторые листинги содержат маркеры
продолжения строки (➥). Кроме того, многие комментарии к исходному коду были удалены из листингов, если код подробно описан
в тексте. Многие листинги содержат дополнительные примечания,
указывающие на важные нюансы кода.
Вы можете загрузить все примеры кода с сайта книги по адресу https://livebook.manning.com/book/deep-learning-with-r-secondedition/ или из репозитория GitHub https://github.com/t-kalinowski/
deep-learning-with-R-2nd-edition-code, а также с сайта издательства
«ДМК Пресс» по адресу dmkpress@gmail.com.

Отзывы и пожелания
Мы всегда рады отзывам наших читателей. Расскажите нам, что вы
ду­маете об этой книге – что понравилось или, может быть, не понравилось. Отзывы важны для нас, чтобы выпускать книги, которые
будут для вас максимально полезны.
Вы можете написать отзыв на нашем сайте www.dmkpress.com,
зайдя­на страницу книги и оставив комментарий в разделе «Отзывы и рецензии». Также можно послать письмо главному редактору
по адресу dmkpress@gmail.com; при этом укажите название книги
в теме письма.
Если вы являетесь экспертом в какой-либо области и заинтересованы в написании новой книги, заполните форму на нашем сайте
по адресу http://dmkpress.com/authors/publish_book/ или напишите
в издательство по адресу dmkpress@gmail.com.

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

Нарушение авторских прав
Пиратство в интернете по-прежнему остается насущной проблемой.
Издательства «ДМК Пресс» и Manning Publications очень серьезно относятся к вопросам защиты авторских прав и лицензирования. Если
вы столкнетесь в интернете с незаконной публикацией какой-либо

Об этой книге

21

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

Об иллюстрации
на обложке
Рисунок на обложке второго издания этой книги – «Образ китаянки
в 1700 го­ду» – взят из книги Томаса Джеффериса, опубликованной
между 1757 и 1772 годами. В то время по одежде людей было легко
определить, где люди живут, чем зарабатывают на жизнь и каково
их общественное положение. Издательство Manning стремится отра­
зить изобретательность и инициативность компьютерного бизнеса
при помощи книжных обложек, основанных на богатом разнообразии региональной культуры многовековой давности, оживленной
портретами из таких коллекций, как эта.

Об авторах
Франсуа Шолле (François Chollet) – создатель Keras, одного из наиболее популярных фреймворков глубокого обуче­ния. В настоящее
время он работает инженером-программистом в Google, где возглавляет команду Keras. Кроме того, он занимается исследованиями
в области абстракции, рассуждений и способов достижения большей
универсальности в искусственном интеллекте.
Томаш Калиновски (Tomasz Kalinowski) работает инженером-программистом в RStudio, где занимается сопровождением пакетов
TensorFlow и Keras R. На предыдущих должностях он работал ученым
и инженером, применяя машинное обуче­ние к широкому спектру
наборов данных и предметных областей.
Дж. Дж. Аллер (J. J. Allaire) – основатель RStudio и создатель интег­
рированной среды разработки RStudio IDE. Является автором интерфейса R к библиотекам TensorFlow и Keras.

1

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

Эта глава охватывает следующие темы:
обобщенные определения основных понятий;
„„ история развития машинного обуче­ния;
„„ ключевые факторы роста популярности глубокого обуче­ния
и потенциал развития.
„„

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

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

25

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

1.1

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

Искусственный
интеллект
Машинное
обучение
Глубокое
обучение

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

1.1.1

Искусственный интеллект
Идея искусственного интеллекта появилась в 1950-х, когда группа
энтузиастов из только зарождающейся области информатики задались вопросом, можно ли заставить компьютеры «думать», – вопросом, последствия которого мы изучаем до сих пор.
Хотя многие лежащие в основе ИИ идеи зародились в предшест­
вующие годы и даже десятилетия, «искусственный интеллект» окончательно оформился как область исследований в 1956 го­ду, когда
Джон Маккарти, в то время молодой доцент кафедры математики
в Дартмутском колледже, организовал летний семинар с весьма амбициозными задачами:
Исследование должно опираться на гипотезу о том, что
каждый аспект обуче­ния или любое другое свойство интеллекта в принципе поддаются настолько точному описанию,
что их можно будет смоделировать с по­мощью машины.
Будут предприняты попытки найти способ, как заставить машины использовать язык, формировать абстракции
и концепции, решать задачи, традиционно остающиеся уде-

26

Глава 1

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

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

1.1.2

Машинное обуче­ние
Много лет назад в викторианской Англии жила леди Ада Лавлейс –
друг и соратник Чарльза Бэббиджа, изобретателя аналитической
вычислительной машины, первого известного механического компьютера. Несомненно, аналитическая машина опередила свое время, но она не задумывалась как универсальный компьютер, когда
разрабатывалась в 1830-х и 1840-х, потому что идея универсальных
вычислений еще не родилась. Эта машина просто давала возможность использовать механические операции для автоматизации
некоторых вычислений из области математического анализа, что
и обусловило такое ее название. Надо сказать, что аналитическая
машина была интеллектуальным потомком более ранних попыток
кодирования математических операций в форме шестерни, таких

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

27

как паскалина или ступенчатый счетный механизм Лейбница – усовершенствованная версия паскалины. Разработанная Блезом Паскалем в 1642 го­ду (в возрасте 19 лет!), паскалина была первым в мире
механическим калькулятором, который мог складывать, вычитать,
умножать и даже делить числа.
В 1843 го­ду Ада Лавлейс заметила:
Аналитическая машина не может создавать что-то новое.
Она может делать все, что мы и сами знаем, как выполнять… ее цель состоит лишь в том, чтобы помогать нам
выполнять то, с чем мы уже хорошо знакомы.
Даже с учетом 179-летней исторической перспективы наблюдение леди Лавлейс не перестает наводить на размышления. Может ли
компьютер общего назначения «создать» что-нибудь или он всегда
будет вынужден тупо выполнять процессы, которые мы, люди, полностью понимаем? Родятся ли у него когда-нибудь оригинальные
мысли? Может ли он учиться на собственном опыте? Может ли он
проявить креативность?
Позднее пионер ИИ Алан Тьюринг в своей знаменитой статье
«Computing Machinery and Intelligence»1 назвал это замечание «аргументом Ады Лавлейс». В этой статье был представлен тест Тьюринга,
а также перечислены основные идеи, которые могут привести к созданию ИИ2. Тьюринг пришел к выводу – очень провокационному на
то время, – что в принципе компьютеры способны имитировать все
аспекты человеческого интеллекта.
Обычный способ заставить компьютер выполнять полезную работу – это попросить человека-программиста написать правила –
компьютерную программу, которой нужно следовать, чтобы преобразовать входные данные в соответствующие ответы, точно так же,
как леди Лавлейс записывала пошаговые инструкции для аналитической машины. В машинном обуче­нии люди вводят данные и ответы, соответствующие этим данным, а на выходе получают правила.
Эти правила затем можно применить к новым данным для получения оригинальных ответов. В машинном обуче­нии система обучается, а не программируется явно. Ей передаются многочисленные
примеры, имеющие отношение к решаемой задаче, а она находит
в этих примерах статистическую структуру, которая позволяет системе выработать правила для автоматического решения задачи
(рис. 1.2). Например, чтобы автоматизировать задачу определения
фотографий, сделанных в отпуске, можно передать системе машинного обуче­ния множество примеров фотографий, уже классифици1

2

A. M. Turing. Computing Machinery and Intelligence. Mind 59, no. 236 (1950):
433–460.
Хотя тест Тьюринга часто воспринимают как буквальную цель, которую
должен достичь ИИ, сам Тьюринг просто использовал его как концептуальный прием в философской дискуссии о природе познания.

Глава 1

28

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

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

Данные
Ответы

Рис. 1.2

Классическое
программирование

Ответы

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

Правила

Машинное обуче­ние: новая парадигма программирования

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

1.1.3

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

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

29

людьми. В задаче классификации изображений ожидаемым результатом могут быть теги, такие как «собака», «кошка» и др.;
„„ способ оценки качества работы алгоритма – это необходимо
для определения, насколько далеко отклоняются результаты,
возвращаемые алгоритмом, от ожидаемых. Оценка используется как сигнал обратной связи для корректировки работы алгоритма. Этот этап корректировки мы и называем обуче­ни­ем.
Модель машинного обуче­ния трансформирует исходные данные
в значимые результаты, «обучаясь» на известных примерах входных
данных и результатов. То есть главной задачей машинного и глубокого обуче­ния является значимое преобразование данных, или, иными словами, обуче­ние представлению входных данных, приближающему нас к ожидаемому результату.
Прежде чем двинуться дальше, давайте определим, что есть представление данных. По сути, это другой способ взглянуть на данные – иначе их представить или закодировать. Например, цветное
изображение можно закодировать в формате RGB (red-green-blue –
красный–зеленый–синий) или HSV (hue-saturation-value – тон–
насы­щенность–значение): это два разных представления одних
и тех же данных. Некоторые задачи трудно решаются с данными
в одном представлении, но легко – в другом. Например, задача «выбрать все красные пикселы в изображении» легче решается с данными в формате RGB, тогда как задача «сделать изображение менее
насыщенным» проще решается с данными в формате HSV. Главная
задача моделей машинного обуче­ния как раз и заключается в поиске соответствующего представления входных данных – преобразований, которые сделают данные более пригодными для решения
задачи, такой как классификация.
Обратимся к конкретному примеру. Рассмотрим систему координат с осями X и Y и несколько точек в этой системе координат (x, y),
как показано на рис. 1.3.
y

x

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

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

Глава 1

30

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

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

1: 1.
Raw
data данные
Исходные
y

2: Coordinate
change
2. Изменение
системы
координат

3:3.Better
Лучшееrepresentation
представление
y

y

x
x

Рис. 1.4

x

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

Координаты наших точек в этой новой системе координат можно
назвать новым представлением данных. Причем более удачным! Задачу классификации данных «черный/белый» в этом представлении
можно свести к простому правилу: «черные точки имеют координату x > 0» или «белые точки имеют координату x < 0». Это новое
представление, основанное на простом правиле, фактически решает
поставленную задачу.
В этом случае мы определили изменение координат вручную – мы
использовали наш человеческий интеллект, чтобы придумать собственное подходящее представление данных. Это нормально для
такой чрезвычайно простой задачи, но сможете ли вы сделать то же
самое, если перед вами стоит задача классификации изображений
рукописных цифр? Сможете ли вы записать явные, исполняемые
компьютером преобразования изображений, которые четко выделяют различия между 6 и 8 или между 1 и 7 для любого почерка?
В какой-то степени это возможно. Правила, основанные на представлениях цифр, таких как «количество замкнутых циклов» или
вертикальные и горизонтальные пиксельные гистограммы, могут
неплохо различать рукописные цифры. Но поиск таких полезных
представлений вручную – тяжелая работа, и, как вы легко догадаетесь, полученная система, основанная на подобных правилах, очень
неустойчива. Поддерживать работоспособность такой системы – сущий кошмар. Каждый раз, когда вы сталкиваетесь с новым примером почерка, нарушающим ваши тщательно продуманные правила,
вам придется добавлять новые преобразования данных и новые
правила, при этом учитывая их взаимодействие с каждым ранее добавленным правилом.

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

31

Наверняка вы уже подумали, что этот сложный и болезненный
процесс нужно автоматизировать. Что, если мы попытаемся целенаправленно искать различные наборы автоматически сгенерированных представлений данных и основанных на них правил и выявлять
лучшие из них, используя в качестве обратной связи процент правильно классифицированных цифр в некотором наборе эталонных
данных? Так вот, это и есть машинное обуче­ние! Под машинным
обуче­ни­ем мы понимаем процесс автоматического поиска преобразований данных, которые создают полезные представления, руководствуясь некоторым сигналом обратной связи, – такие представления, которые поддаются более простым правилам, решающим
поставленную задачу.
В качестве таких преобразований могут выступать изменения координат (как в нашем примере с классификацией точек) или получение гистограммы пикселей и циклов обхода (как в нашем примере
с классификацией цифр), но также это могут быть линейные проекции, переносы, нелинейные операции (например, правило «выбрать
все точки такие, что x > 0») и т. д. Алгоритмы машинного обуче­ния
обычно не очень изобретательны в поиске этих преобразований;
они просто просматривают предопределенный набор операций, называемый пространством гипотез. Например, пространство всех
возможных изменений координат будет нашим пространством гипотез в примере классификации точек.
Иными словами, машинное обуче­ние – это поиск значимого
представления некоторых входных данных в предопределенном
пространстве возможностей с использованием сигнала обратной
связи. Эта простая идея позволяет решать чрезвычайно широкий
круг интеллектуальных задач: от распознавания речи до автоматического вождения автомобиля. Теперь, когда вы получили представление о том, что понимается под обуче­ни­ем, давайте посмотрим, что
особенного в глубоком обуче­нии.

1.1.4

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

Глава 1

32

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

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

Слой 2

Слой 3

Слой 4

Исходный образ
на входе
Результат

Рис. 1.5

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

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

33

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

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

Представление
после слоя 2

Представление
после слоя 3
Представление
после слоя 4
(результат)

Исходный
образ
на входе

Слой 1

Слой 2

Слой 3

Слой 4

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

1.1.5

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

Глава 1

34

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

торую также называют целевой функцией, или функцией стоимости.
Функция потерь принимает предсказание, выданное сетью, и истинное значение (которое сеть должна была вернуть), и вычисляет
оценку расстояния между ними, отражающую, насколько хорошо
сеть справилась с данным конкретным примером (рис. 1.8).
Входные данные Х
Цель: поиск
правильных
значений
всех весов

Веса

Слой (преобразование
данных)

Веса

Слой (преобразование
данных)
Предсказания
Y'

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

Слой (преобразование
данных)

Веса

Слой (преобразование
данных)
Предсказания
Y'

Истинное
значение Y
Функция
потерь
Оценка потерь

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

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

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

35

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

Слой (преобразование
данных)

Веса

Слой (преобразование
данных)

Корректировка
весов
Оптимизатор

Предсказания
Y'

Истинное
значение Y
Функция
потерь
Оценка потерь

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

1.1.6

Каких успехов достигло глубокое обуче­ние
Несмотря на то что глубокое обуче­ние является давним разделом
машинного обуче­ния, фактическое его развитие началось только
в начале 2010-х. За прошедшие несколько лет в этой области произошла настоящая революция, с особенно заметными успехами
в моделировании восприятия и даже обработки естественного языка – задачах, кажущихся естественными и понятными для человека,
но долгое время не дававшихся компьютерам. В частности, глубокое
обуче­ние достигло прорывов в следующих областях, традиционно
сложных для машинного обуче­ния:
„„ классификация изображений на уровне человека;
„„ распознавание речи на уровне человека;
„„ распознавание рукописного текста на уровне человека;
„„ улучшение качества машинного перевода с одного языка на
другой;
„„ улучшение качества машинного чтения текста вслух;
„„ цифровые помощники, такие как Google Now и Amazon Alexa;
„„ управление автомобилем почти на уровне человека;

Глава 1

36

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

повышение точности целевой рекламы, используемой компаниями Google, Baidu и Bing;
„„ повышение релевантности поиска в интернете;
„„ появление возможности отвечать на вопросы, заданные на разговорном языке;
„„ игра в го лучше человека.
Мы все еще продолжаем исследовать возможности, которые таит
в себе глубокое обуче­ние. Мы начали применять его к широкому
кругу проблем за пределами машинного восприятия и понимания
естественного языка, таких как формальные рассуждения. Успех
в этом направлении может означать начало новой эры, когда глубокое обуче­ние будет помогать людям в науке, разработке программного обеспечения и многих других областях.
Мы все еще не оценили возможности глубокого обуче­ния в полной мере. Мы начали с большим успехом применять его для решения широкого круга задач, которые еще несколько лет назад казались неразрешимыми, – автоматически расшифровывать десятки
тысяч древних манускриптов, хранящихся в Апостольском архиве
Ватикана, обнаруживать и классифицировать болезни растений
в полевых условиях с по­мощью простого смартфона, помогать онкологам и рентгенологам интерпретировать данные медицинских
изображений, прогнозировать стихийные бедствия, такие как наводнения, ураганы или даже землетрясения, и т. д. С каждой новой
вехой мы приближаемся к эпохе, когда глубокое обуче­ние будет
применяться во всех областях человеческой деятельности – в науке,
медицине, производстве, энергетике, транспорте, разработке программного обеспечения, сельском хозяйстве и даже художественном творчестве.
„„

1.1.7

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

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

37

финансирования. Все началось с символического ИИ в 1960-х. В те
ранние годы давались весьма многообещающие прогнозы развития ИИ. Один из самых известных пионеров и сторонников подхода
символического ИИ Марвин Мински в 1967 го­ду заявил: «В течение
поколения... проблема создания “искусственного интеллекта” будет
практически решена». Три года спустя, в 1970 го­ду, он сделал более
точное предсказание: «Через три–восемь лет у нас появится машина с интеллектом среднего человека». В 2023 го­ду это достижение
все еще кажется далеким будущим – пока мы не можем предсказать,
сколько времени уйдет на это, – но в 1960-х и в начале 1970-х некоторые эксперты (как и многие люди ныне) полагали, что ИИ находится прямо за углом. Несколько лет спустя, из-за неоправдавшихся
высоких ожиданий, исследователи и правительственные фонды отвернулись от этой области – так началась первая зима ИИ (вполне
уместная метафора, потому что все это происходило вскоре после
начала холодной войны).
Этот спад был не последним. В 1980-х начался подъем интереса
к символическому ИИ благодаря буму экспертных систем в крупных
компаниях. Первые успехи вызвали волну инвестиций, и корпорации по всему миру стали создавать свои отделы ИИ, занимающиеся
разработкой экспертных систем. К 1985 го­ду компании тратили более миллиарда долларов США в год на развитие технологии, но к началу 1990-х, из-за дороговизны в обслуживании, сложностей в масштабировании и ограниченности применения, интерес снова начал
падать. Так началась вторая зима ИИ.
В настоящее время мы подходим к третьему циклу разочарования
в ИИ, но пока мы еще находимся в фазе завышенного оптимизма.
Сейчас лучше всего умерить наши ожидания на ближайшую перспективу и постараться донести до людей, малознакомых с технической стороной этой области, что именно может дать глубокое обуче­
ние и на что оно не способно.

1.1.8

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

38

Глава 1

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

вседневной жизни тоже, вероятно, не используете технологии ИИ.
Конечно, вы можете задавать простые вопросы своему смартфону
и получать разумные ответы, вы можете получить весьма полезные
рекомендации при выборе товаров на Amazon.com и по фразе «день
рождения» быстро найти в Google Photos фотографии со дня рождения вашей дочери, который был в прошлом месяце. Это, несомненно, большой шаг вперед. Но такие инструменты лишь дополняют
нашу жизнь. ИИ еще не занял центральное место в нашей жизни,
работе и мыслях.
Сейчас трудно поверить, что ИИ может оказать значительное
влия­ние на наш мир, потому что еще не развернулся в полной мере, –
так в 1995 го­ду трудно было поверить в будущее влияние интернета.
В то время большинство не понимало, какое отношение к ним может
иметь интернет и как он изменит их жизнь. То же можно сегодня
сказать о глубоком обуче­нии и об искусственном интеллекте. Будьте уверены: эра искусственного интеллекта наступит. В недалеком
будущем ИИ станет вашим помощником и даже другом; он ответит
на ваши вопросы, поможет воспитывать детей и проследит за здоровьем. Он доставит продукты к вашей двери и отвезет вас из пунк­
та А в пункт Б. Это будет ваш интерфейс к миру, который все более
усложняется и наполняется информацией. И что особенно важно,
ИИ будет способствовать человечеству в движении вперед, помогая
ученым делать новые прорывные открытия во всех областях науки,
от геномики до математики.
По пути мы можем столкнуться с неудачами и, возможно, пережить новую зиму ИИ – так же как после всплеска развития интернетиндустрии в 1998–1999 годах произошел спад, вызванный уменьшением инвестиций в начале 2000-х. Но мы придем к цели – рано или
поздно. В конечном итоге ИИ будет применяться во всех процессах
в нашем обществе и в нашей жизни, так же как интернет сегодня.
Не верьте рекламной шумихе, но доверяйте долгосрочным прог­
нозам. Может потребоваться какое-то время, пока искусственный
интеллект раскроет весь свой потенциал, глубину которого пока еще
никто не может даже представить, но ИИ придет и изменит наш мир
самым невероятным образом.

1.2

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

Краткая история машинного обуче­ния

39

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

1.2.1

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

1.2.2

Первые нейронные сети
Ранние версии нейронных сетей были полностью вытеснены современными вариантами, о которых рассказывается на страницах этой

Глава 1

40

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

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

1.2.3

Ядерные методы
По мере привлечения внимания исследователей к нейронным сетям
в 1990-х и благодаря первому успеху приобрел известность новый
подход к машинному обуче­нию, быстро отправивший нейронные
сети обратно в небытие: ядерные методы (kernel methods). Ядерные
методы – это группа алгоритмов классификации, из которых наибольшую известность получил метод опорных векторов (Support Vector Machine, SVM). Современная формулировка SVM была предложена Владимиром Вапником и Коринной Кортес в начале 1990-х в Bell
Labs и опубликована в 1995 го­ду1. Прежняя линейная формулировка
была опубликована Вапником и Алексеем Червоненкисом (Alexey
Chervonenkis) в начале 1963 года2.
Метод опорных векторов предназначен для решения задач классификации путем поиска хороших решающих границ (рис. 1.10),
разделяющих два набора точек, принадлежащих разным категориям. Поиск таких границ метод опорных векторов осуществляет в два
этапа.
1 Данные отображаются в новое пространство более высокой
размерности, где граница может быть представлена как гиперплоскость (если данные были двумерными, как на рис. 1.10, гиперплоскость вырождается в линию).
2 Хорошая решающая граница (разделяющая гиперплоскость)
1

2

Vladimir Vapnik and Corinna Cortes, Support-Vector Networks, Machine Learning 20, no. 3 (1995): 273–297.
Vladimir Vapnik and Alexey Chervonenkis, A Note on One Class of Perceptrons,
Automation and Remote Control 25 (1964).

Краткая история машинного обуче­ния

41

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

Рис. 1.10

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

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

Глава 1

42

1.2.4

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

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

Вопрос

Вопрос
Категория

Категория

Вопрос
Категория

Категория

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

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

Краткая история машинного обуче­ния

43

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

1.2.5

Назад к нейронным сетям
Примерно в 2010 го­ду, несмотря на почти полную потерю интереса
к нейронным сетям со стороны научного сообщества, ряд исследователей, продолжавших работать снейронными сетями, стали добиваться важных успехов: группы Джеффри Хинтона из университета
в Торонто, Йошуа Бенжио из университета в Монреале, Яна Лекуна
из университета в Нью-Йорке и исследователи в научно-исследовательском институте искусственного интеллекта IDSIA в Швейцарии.
В 2011 го­ду Ден Киресан из IDSIA выиграл академический конкурс по классификации изображений с применением глубоких нейронных сетей, обучаемых на GPU, – это был первый практический
успех современного глубокого обуче­ния. Но перелом произошел
в 2012 го­ду, когда группа Хинтона приняла участие в ежегодном соревновании ImageNet по крупномасштабному распознаванию образов. ImageNet предложила очень сложное на то время задание,
заключающееся в классификации цветных изображений с высоким
разрешением на 1000 разных категорий после обуче­ния по выборке,
включающей 1,4 млн изображений. В 2011 го­ду модель-победитель,
основанная на классических подходах к распознаванию образов, показала точность лишь 74,3 %1. В 2012 го­ду команда Алекса Крижевски
(Alex Krizhevsky), в которой советником был Джеффри Хинтон (Geoffrey Hinton), достигла точности в 83,6 % – значительный прорыв.
С тех пор каждый год первые позиции в этом соревновании занимают глубокие сверточные нейронные сети. В 2015 го­ду победитель
достиг точности в 96,4 %, и задача классификации на ImageNet была
сочтена решенной полностью.
Начиная с 2012 года глубокие сверточные нейронные сети (convolutional neural networks, сокращенно convnet) перешли в разряд передовых алгоритмов для всех задач распознавания образов; в более
общем плане они с успехом могут использоваться в любых задачах
распознавания. На крупных конференциях по распознаванию образов, проводившихся в 2015 и 2016 годах, было трудно найти презентацию, не включающую сверточные нейросети в том или ином
виде. В то же время глубокое обуче­ние нашло применение во многих
других видах задач, таких как обработка естественного языка. Оно
полностью заменило метод опорных векторов и деревья решений
в широком круге задач. Например, в течение нескольких лет Европейская организация по ядерным исследованиям (European Organization for Nuclear Research, CERN) использовала методы на основе
1

Показатель «точность первой пятерки» измеряет, как часто модель выбирает правильный ответ как одну из своих пяти догадок (из 1000 возможных ответов, в случае ImageNet).

44

Глава 1

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

деревьев решений для данных, получаемых с детектора частиц ATLAS в большом адронном коллайдере, но затем в CERN было принято решение перейти на использование глубоких нейронных сетей
на основе Keras из-за их более высокой производительности и прос­
тоты обуче­ния на больших наборах данных.

1.2.6

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

Краткая история машинного обуче­ния

45

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

1.2.7

Современный ландшафт машинного обуче­ния
Отличный способ получить представление о текущей ситуации с алгоритмами и инструментами машинного обуче­ния – посмотреть соревнования по машинному обуче­нию на Kaggle. Благодаря острой
конкуренции (в некоторых конкурсах участвуют тысячи участников,
а призовой фонд исчисляется миллионами долларов) и большому количеству охватываемых задач машинного обуче­ния на сайте
Kaggle можно реально оценить, какие подходы используются и насколько успешно. Так какой же алгоритм уверенно выигрывает состязания? Какими инструментами пользуются победители?
В начале 2019 года на сайте Kaggle провели опрос, в ходе которого
команды, вошедшие в пятерку лучших в соревнованиях с 2017 года,
спросили, какой основной программный инструмент они использовали для выполнения конкурсных заданий (рис. 1.12). Оказывается, лучшие команды склонны использовать либо методы глубокого
обуче­ния (чаще всего с по­мощью библиотеки Keras), либо градиентный бустинг над решающими деревьями (библиотеки LightGBM или
XGBoost).
Речь не только о победителях соревнований. Kaggle также ежегодно проводит опрос среди специалистов в области машинного
обуче­ния и науки о данных по всему миру. Этот опрос, в котором
приняли участие десятки тысяч респондентов, является одним из
самых надежных источников информации о состоянии отрасли. На
рис. 1.13 показан процент использования различных программных
платформ машинного обуче­ния.

Глава 1

46

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

Количество участников
Глубокие

Обычные

Рис. 1.12 Наиболее популярные инструменты машинного обуче­ния, применяемые
в конкурсах Kaggle

С 2016 по 2020 год во всей отрасли машинного обуче­ния и науки о данных доминировали два подхода: глубокое обуче­ние и градиентный бустинг над решающими деревьями. В частности, второй
подход используется для задач, где доступны структурированные
данные, тогда как глубокое обуче­ние используется для задач восприятия, таких как классификация изображений.
Пользователи градиентного бустинга над решающими деревьями
обычно применяют Scikit-Learn, XGBoost или LightGBM. В свою очередь,
большинство практиков глубокого обуче­ния используют Keras, часто
в сочетании с родительским фреймворком TensorFlow. Общим для этих
инструментов является то, что все они доступны в виде библио­тек для
языков R или Python, которые на сегодняшний день наиболее широко
применяются в машинном обуче­нии и обработке данных.
Этим двум методам вы должны уделять особое внимание, чтобы
добиться успеха в применении машинного обуче­ния в наше время:
метод градиентного бустинга для задач поверхностного обуче­ния
и глубокое обуче­ние для задач распознавания. В техническом плане
это означает, что вы должны владеть двумя библиотеками – XGBoost
и Keras, занимающими доминирующее положение в конкурсах на
сайте Kaggle. Как только вы взяли в руки эту книгу, вы уже сделали
большой шаг к данной цели.

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

47

Рис. 1.13 Использование инструментов в машинном обуче­нии и науке о данных
(источник: https://www.kaggle.com/kaggle-survey-2020)

1.3

Почему глубокое обуче­ние? Почему сейчас?
Две ключевые идеи глубокого обуче­ния для решения задач распо­
знавания образов – сверточные нейронные сети и алгоритм обратного распространения ошибки – были хорошо известны уже в 1990 го­
ду. Алгоритм долгой краткосрочной памяти (Long Short-Term Memory,
LSTM), составляющий основу глубокого обуче­ния для прогнозирования временных рядов, был предложен в 1997 го­ду и с тех пор почти
не изменился. Так почему же глубокое обуче­ние начало применяться
только с 2012 года? Что изменилось за эти два десятилетия? В целом
машинное обуче­ние стоит на «трех китах»:
„„ оборудование;
„„ наборы данных и тесты;
„„ современные алгоритмы.

Глава 1

48

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

Поскольку в области машинного обуче­ния главную роль играют
экспериментальные выводы, а не теория, алгоритмические достижения возможны только при наличии данных и оборудования, пригодных для проверки идей (или, как это часто бывает, для возрождения старых идей). Машинное обуче­ние – это не математика и не
физика, где прорывы могут быть сделаны с по­мощью ручки и бумаги. Это инженерная наука.
Настоящим узким местом на протяжении 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-реализации нейронных сетей.
Одними из первых стали Дэн Кайесан1 и Алекс Крижевски2.
Получилось так, что игровая индустрия субсидировала создание
суперкомпьютеров для следующего поколения приложений искусственного интеллекта. Иногда крупные достижения начинают1

2

Flexible, High Performance Convolutional Neural Networks for Image Classification, Proceedings of the 22nd International Joint Conference on Artificial Intelligence (2011), http://mng.bz/nN0K.
ImageNet Classification with Deep Convolutional Neural Networks, Advances in
Neural Information Processing Systems 25 (2012), http://mng.bz/2286.

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

49

ся с игр. Современный графический процессор NVIDIA TITAN RTX,
стоивший 2500 долларов США в конце 2019 года, способен выдать
пиковую производительность 16 терафлопс с одинарной точностью
(16 трлн операций в секунду с числами типа float32). Это почти
в 500 раз больше производительности лучшего суперкомпьютера
1990-х Intel Touchstone Delta. Графическому процессору TITAN RTX
требуется всего несколько часов для обуче­ния модели ImageNet типа
той, что выиграла конкурс ILSVRC в 2012 или 2013 го­ду. Крупные
компании обучают модели глубокого обуче­ния на кластерах, состоящих из сотен GPU.
Более того, индустрия глубокого обуче­ния начинает выходить за
рамки GPU и инвестировать средства в развитие еще более специа­
лизированных процессоров, наиболее эффективно показывающих
себя в области глубокого обуче­ния. В 2016 го­ду на своей ежегодной
конференции Google I/O компания Google продемонстрировала
свой проект тензорного процессора (Tensor Processing Unit, TPU):
разработанная с нуля архитектура позволяет обучать глубокие нейронные сети значительно быстрее и гораздо эффективнее с точки
зрения энергопотребления, чем лучшие графические процессоры.
В 2020 го­ду третья версия карты TPU имела вычислительную мощность 420 терафлопс. Это в 10 000 раз больше, чем у Intel Touchstone
Delta в 1990 го­ду.
Карты TPU предназначены для сборки в крупномасштабные модули, называемые «стручками» (pod). Один модуль (1024 карты TPU)
достигает пиковой производительности 100 петафлопс. Для сравнения, это около 10 % пиковой вычислительной мощности самого
крупного на сегодняшний день суперкомпьютера IBM Summit в национальной лаборатории Ок-Ридж, который состоит из 27 000 графических процессоров NVIDIA и достигает пиковой производительности около 1,1 экзафлопса.

1.3.2

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

Глава 1

50

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

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

1.3.3

Алгоритмы
Кроме оборудования и данных, до конца 2000-х нам не хватало надежного способа обуче­ния очень глубоких нейронных сетей. Как
результат нейронные сети оставались очень неглубокими, имеющими один или два слоя представления; в связи с этим они не могли
противостоять более совершенным поверхностным методам, таким
как метод опорных векторов и случайные леса. Основная проблема
заключалась в распространении градиента через глубокие пакеты
слоев. Сигнал обратной связи, используемый для обуче­ния нейронных сетей, затухает по мере увеличения количества слоев.
Ситуация изменилась в 2009–2010 годах с появлением некоторых
простых, но важных алгоритмических усовершенствований, позволивших улучшить распространение градиента:
„„ улучшенные функции активации;
„„ улучшенные схемы инициализации весов, начиная с предварительного послойного обуче­ния, от которого быстро отказались;
„„ улучшенные схемы оптимизации, такие как RMSProp и Adam.
Только когда эти улучшения позволили создавать модели
с 10 слоя­ми и более, началось развитие глубокого обуче­ния. Наконец в 2014, 2015 и 2016 годах были открыты еще более совершенные
способы распространения градиента, такие как пакетная нормализация, остаточные связи и раздельные свертки по глубине.
Сегодня мы можем обучать с нуля модели произвольной глубины.
Это открыло возможность использования чрезвычайно больших моделей, обладающих значительной репрезентативностью, то есть кодирующих очень богатые пространства гипотез. Такая невероятная
масштабируемость является одной из определяющих характеристик
1

ImageNet Large Scale Visual Recognition Challenge (ILSVRC), http://www.
image-net.org/challenges/LSVRC.

51

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

современного глубокого обуче­ния. Архитектуры крупномасштабных
моделей с десятками уровней и десятками миллионов параметров
легли в основу важных достижений как в компьютерном зрении (например, такие архитектуры, как ResNet, Inception или Xception), так
и в обработке естественного языка (например, архитектуры на основе трансформеров, такие как BERT, GPT-3 или XLNet).

1.3.4

Новая волна инвестиций
Как мы уже говорили, в 2012–2013 годах глубокое обуче­ние вывело
на новый уровень распознавание образов и в конечном счете все задачи распознавания. За этим последовала постепенно нарастающая
волна инвестиций в индустрию, намного превосходящая все предыдущие, наблюдавшиеся в истории ИИ (рис. 1.14).
Total estimated investments in Al startups, 2011–2017 and first semester 2018
US

USD billion

China

EU

By startup location
Israel
Canada

Japan

Other

India

18
16

Israel
EU

14
12

China
10
8

Israel
EU
China

6
EU

4
2
0

US

US

2011

2012

US

US

2014

2015

US
US

US
2013

2016

2017

Рис. 1.14 Объем общих инвестиций в стартапы ИИ по данным ОЭСР
(источник: http://mng.bz/zGN6)

В 2011 го­ду, как раз перед тем, как в центре внимания оказалось
глубокое обуче­ние, общие венчурные инвестиции в ИИ по всему
миру составили менее миллиарда долларов, которые почти пол­
ностью пошли на практическое применение поверхностных подходов машинного обуче­ния. В 2015 го­ду инвестиции выросли до более чем 5 млрд долларов, а в 2017 го­ду – до ошеломляющих 16 млрд

Глава 1

52

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

долларов. За эти несколько лет появились сотни стартапов, пытающихся извлечь выгоду из поднявшейся шумихи. Между тем крупные
компании, такие как Google, Facebook, Baidu и Microsoft, инвестировали деньги в исследования, проводившиеся внутренними подразделениями, и объемы этих инвестиций почти наверняка превысили
инвестиции венчурного капитала.
Машинное обуче­ние, и глубокое обуче­ние в частности, заняло
центральное место среди стратегических продуктов этих технологических гигантов. В конце 2015 го­ду генеральный директор Google
Сундар Пичаи отметил: «Машинное обуче­ние – это повод для решительной смены системы координат во всех видах нашей деятельности. Мы вдумчиво применяем его во всех наших продуктах, будь то
поиск, реклама, YouTube или Play. И мы с самого начала – и систематически – применяем машинное обуче­ние во всех этих областях»1.
В результате этой волны инвестиций за прошедшие 10 лет число людей, работающих над глубоким обуче­ни­ем, увеличилось с нескольких сотен до десятков тысяч, а прогресс в исследованиях достиг
небывалого уровня.

1.3.5

Демократизация глубокого обуче­ния
Одним из ключевых факторов, обусловивших приток новых лиц
в глубокое обуче­ние, стала демократизация инструментов, используемых в этой области. На начальном этапе глубокое обуче­ние требовало значительных знаний и опыта программирования на C++
и владения CUDA, чем могли похвастать очень немногие.
В настоящее время базовых навыков написания сценариев R или
Python достаточно для проведения масштабных исследований в области глубокого обуче­ния. В первую очередь это стало возможным благодаря появлению библиотеки TensorFlow – фреймворка для работы
с тензорами, который поддерживает автодифференциацию, что значительно упрощает реализацию новых моделей, – а также удобных
для пользователя библиотек, таких как Keras, которые делают глубокое обуче­ние таким же простым, как использование кубиков LEGO.
После выпуска в начале 2015 года Keras быстро стал популярным решением для глубокого обуче­ния среди большого количества новых
стартапов, аспирантов и исследователей, работающих в этой области.

1.3.6

Ждать ли продолжения этой тенденции?
Есть ли что-то особенное в глубоком обуче­нии, что делает его «правильным» выбором и для компаний, делающих инвестиции, и для
исследователей? Или глубокое обуче­ние – это просто увлечение, которое не продлится долго? Будем ли мы использовать глубокие нейронные сети через 20 лет?
1

Sundar Pichai, Alphabet earnings call, Oct. 22, 2015.

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

53

Глубокое обуче­ние имеет несколько свойств, которые оправдывают его статус как революции в ИИ, и оно задержится надолго. Возможно, мы перестанем использовать нейронные сети через два десятилетия, но все, что останется взамен, будет прямым наследником
современного глубокого обуче­ния и его основных идей. Важнейшие
свойства глубокого обуче­ния можно разделить на три категории:
простота – глубокое обуче­ние избавляет от необходимости
конструировать признаки, заменяя сложные, противоречивые
и тяжелые конвейеры простыми обучаемыми моделями, которые обычно строятся с использованием пяти-шести тензорных
операций;
„„ масштабируемость – глубокое обуче­ние легко поддается распараллеливанию на GPU или TPU, поэтому оно в полной мере
может использовать закон Мура. Кроме того, обуче­ние моделей
можно производить итеративно, на небольших пакетах данных,
что дает возможность проводить обуче­ние на наборах данных
произвольного размера. (Единственным узким местом является объем доступной вычислительной мощности для параллельных вычислений, которая, как следует из закона Мура, является
быстро приближающимся барьером);
„„ гибкость и пригодность к многократному использованию – в отличие от многих предыдущих подходов, модели глубокого
обуче­ния могут обучаться на дополнительных данных без полного перезапуска, что делает их пригодными для непрерывного и продолжительного обуче­ния – очень важное свойство для
очень больших промышленных моделей. Кроме того, обучаемые модели глубокого обуче­ния можно перенацеливать и, соответственно, использовать многократно: например, модель,
обученную классификации изображений, можно включить
в конвейер обработки видео. Это позволяет использовать предыдущие наработки для создания все более сложных и мощных
моделей. Это также позволяет применить глубокое обуче­ние
к очень маленьким объемам данных.
„„

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

54

Глава 1

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

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

2

Математические основы
нейронных сетей

Эта глава охватывает следующие темы:
первый пример нейронной сети;
тензоры и операции с тензорами;
„„ обуче­ние нейронной сети методами обратного
распространения ошибки и градиентного спуска.
„„
„„

Для понимания глубокого обуче­ния необходимо знать множество
простых математических понятий: тензоры, операции с тензорами, дифференцирование, градиентный спуск и т. д. Наша цель в этой
главе – познакомиться с этими понятиями, не погружаясь слишком
глубоко в теорию. В частности, мы будем избегать математических
формул, которые не всегда нужны для достаточно полного объяснения и могут оттолкнуть читателей, не имеющих математической
подготовки.
Чтобы вам проще было разобраться с тензорами и градиентным
спуском, мы начнем главу с практического примера нейронной
сети. А затем станем постепенно знакомиться с новыми понятиями.
Имейте в виду, что знание этих понятий потребуется вам для понимания практических примеров в следующих главах.
После этой главы у вас сформируется понимание основных теоретических принципов, лежащих в основе глубокого обуче­ния, и вы
будете готовы приступить к изучению Keras и TensorFlow в главе 3.

56

2.1

Глава 2

Математические основы нейронных сетей

Первое знакомство с нейронной сетью
Рассмотрим конкретный пример нейронной сети, созданной с по­
мощью пакета Keras R, которая обучается классификации рукописных цифр. Если у вас нет опыта использования Keras или других
подобных библиотек, возможно, вы не все поймете в этом первом
примере. Может быть, вы еще не установили Keras; в этом нет ничего страшного. В следующей главе мы рассмотрим каждый элемент
в примере и подробно объясним их. Поэтому не волнуйтесь, если
какие-то шаги покажутся вам непонятными или похожими на магию – мы ведь должны с чего-то начать.
Перед нами стоит задача реализовать классификацию черно-белых изображений рукописных цифр (28×28 пикселов) по 10 категориям (от 0 до 9). Мы будем использовать набор данных MNIST, популярный в сообществе исследователей глубокого обуче­ния, который
существует практически столько же, сколько сама область машинного обуче­ния, и широко используется для обуче­ния. Этот набор содержит 60 000 обучающих изображений плюс 10 000 контрольных
изображений, собранных Национальным институтом стандартов
и технологий США (National Institute of Standards and Technology –
часть NIST в аббревиатуре MNIST) в 1980-х. Решение задачи MNIST
можно рассматривать как своеобразный пример «Hello World» в глубоком обуче­нии – часто это первое, что вы делаете, чтобы убедиться,
что ваши алгоритмы действуют в точности как ожидалось. По мере
углубления в практику машинного обуче­ния вы увидите, что MNIST
нередко упоминается в научных статьях, в блогах и т. д. Несколько
образцов изображений из набора MNIST показаны на рис. 2.1.

Рис. 2.1 Образцы изображений MNIST

В машинном обуче­нии категория в задаче классификации называется классом. Элементы исходных данных называются образцами.
Класс, связанный с конкретным образцом, называется меткой.
Не пытайтесь воспроизвести этот пример на своем компьютере
прямо сейчас. Чтобы его опробовать, нужно сначала установить биб­
лиотеку Keras, о чем рассказывается в разделе 3.5.1. Набор данных
MNIST входит состав в Keras в виде набора из четырех массивов R,
организованных в два списка с именами train и test.
Листинг 2.1

Загрузка набора данных MNIST в Keras

library(tensorflow)
library(keras)

Первое знакомство с нейронной сетью

57

mnist