Оглавление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8
Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
Благодарности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .19
Об этой книге . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .20
Об иллюстрации на обложке . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .24
Об авторах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25
Глава 1. Что такое глубокое обучение? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26
1.1 Искусственный интеллект, машинное и глубокое обучение . . . . . . . . . . . . . . . . . . . . .27
1.1.1 Искусственный интеллект . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27
1.1.2 Машинное обучение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28
1.1.3 Извлечение правил и представлений из данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30
1.1.4 «Глубина» глубокого обучения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33
1.1.5 Принцип действия глубокого обучения в трех рисунках . . . . . . . . . . . . . . . . . . . . .35
1.1.6 Каких успехов достигло глубокое обучение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37
1.1.7 Не верьте рекламной шумихе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .38
1.1.8 Перспективы развития ИИ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .39
1.2 Краткая история машинного обучения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40
1.2.1 Вероятностное моделирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
1.2.2 Первые нейронные сети . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41
1.2.3 Ядерные методы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .42
1.2.4 Деревья решений, случайные леса и градиентный бустинг . . . . . . . . . . . . . . . . . . . .44
1.2.5 Назад к нейронным сетям . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45
1.2.6 Отличительные черты глубокого обучения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46
1.2.7 Современный ландшафт машинного обучения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .47
1.3 Почему глубокое обучение? Почему сейчас? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49
1.3.1 Оборудование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .50
1.3.2 Данные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .51
1.3.3 Алгоритмы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52
1.3.4 Новая волна инвестиций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53
1.3.5 Демократизация глубокого обучения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
1.3.6 Ждать ли продолжения этой тенденции? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .54
Глава 2. Математические основы нейронных сетей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .57
2.1 Первое знакомство с нейронной сетью . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58
2.2 Представление данных для нейронных сетей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .62
2.2.1 Скаляры (тензоры нулевого ранга) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
2.2.2 Векторы (тензоры первого ранга) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
2.2.3 Матрицы (тензоры второго ранга) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
2.2.4 Тензоры третьего и более высокого рангов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
2.2.5 Ключевые атрибуты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .64
2.2.6 Манипулирование тензорами в R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
2.2.7 Пакеты данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .66
2.2.8 Практические примеры тензоров с данными . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67
2.2.9 Векторные данные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67
2.2.10 Временные ряды, или последовательности данных . . . . . . . . . . . . . . . . . . . . . . . . . . .68
2.2.11 Изображения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
2.2.12 Видеоданные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .69
2.3 Шестеренки нейронных сетей: операции с тензорами . . . . . . . . . . . . . . . . . . . . . . . . . . .70
2.3.1 Поэлементные операции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .71
2.3.2 Операции с тензорами разной размерности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .72
2.3.3 Скалярное произведение тензоров . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .74
2.3.4 Изменение формы тензора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .76
2.3.5 Геометрическая интерпретация операций с тензорами . . . . . . . . . . . . . . . . . . . . . . . .77
2.3.6 Геометрическая интерпретация глубокого обучения . . . . . . . . . . . . . . . . . . . . . . . . .81
2.4 Механизм нейронных сетей: оптимизация на основе градиента . . . . . . . . . . . . . . . . . .82
2.4.1 Что такое производная? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .84
2.4.2 Производная операций с тензорами: градиент . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .85
2.4.3 Стохастический градиентный спуск . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .87
2.4.4 Объединение производных: алгоритм обратного распространения ошибки . . . . . . .90
2.5 Возвращаясь к нашему первому примеру . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .97
2.5.1 Повторная реализация нашего первого примера с нуля в TensorFlow . . . . . . . . . .99
2.5.2 Выполнение одного шага обучения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101
2.5.3 Полный цикл обучения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .103
2.5.4 Оценка модели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .104
Краткие итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105
Глава 3. Введение в Keras и TensorFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .106
3.1 Что такое TensorFlow? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .107
3.2 Что такое Keras? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .108
3.3 Keras и TensorFlow: краткая история . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .109
3.4 Интерфейсы Python и R: краткая история . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .110
3.5 Настройка среды разработки для глубокого обучения . . . . . . . . . . . . . . . . . . . . . . . . .111
3.5.1 Установка Keras и TensorFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .112
3.6 Первые шаги с TensorFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .113
3.6.1 Тензоры TensorFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114
3.7 Атрибуты тензоров . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .115
3.7.1 Форма тензора и ее изменение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .116
3.7.2 Срезы тензоров . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118
3.7.3 Операции с тензорами разной размерности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .119
3.7.4 Модуль tf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .119
3.7.5 Неизменность тензоров и переменные . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .121
3.7.6 Математические операции в TensorFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .122
3.7.7 Взгляд на API GradientTape с другой стороны . . . . . . . . . . . . . . . . . . . . . . . . . . . . .123
3.7.8 Полный пример: линейный классификатор в чистом TensorFlow . . . . . . . . . . . . . . .124
3.8 Анатомия нейронной сети и основы API Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129
3.8.1 Слои: строительные блоки глубокого обучения . . . . . . . . . . . . . . . . . . . . . . . . . . . .130
3.8.2 От слоев к моделям . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .134
3.8.3 Этап «компиляции»: настройка процесса обучения . . . . . . . . . . . . . . . . . . . . . . . . . .136
3.8.4 Выбор функции потерь . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .139
3.8.5 Использование метода fit() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .140
3.8.6 Отслеживание потерь и показателей на контрольных данных . . . . . . . . . . . . . . . . .141
3.8.7 Использование модели после обучения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .142
Краткие итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143
Глава 4. Примеры работы с нейросетью: классификация и регрессия . . . . . . . . . . . . . . .145
4.1 Классификация отзывов к фильмам: пример бинарной классификации . . . . . . . . . . . .147
4.1.1 Набор данных IMDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .147
4.1.2 Подготовка данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149
4.1.3 Создание модели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .150
4.1.4 Проверка вашего выбора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .153
4.1.5 Использование обученной сети для прогнозирования на новых данных . . . . . . . .156
4.1.6 Продолжаем эксперименты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .157
4.1.7 Промежуточные итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .157
4.2 Классификация новостных лент: пример многоклассовой классификации . . . . . . . . .158
4.2.1 Набор данных Reuters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .158
4.2.2 Подготовка данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160
4.2.3 Построение модели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .160
4.2.4 Проверка модели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .161
4.2.5 Предсказания на новых данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .163
4.2.6 Другой способ обработки меток и потерь . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .164
4.2.7 Важность использования достаточно больших промежуточных слоев . . . . . . . . . . .164
4.2.8 Дальнейшие эксперименты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165
4.2.9 Промежуточные итоги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165
4.3 Предсказание цен на дома: пример регрессии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .166
4.3.1 Набор данных с ценами на жилье в Бостоне . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .166
4.3.2 Подготовка данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .167
4.3.3 Построение модели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .167
4.3.4 Оценка качества модели методом K-кратной перекрестной проверки . . . . . . . . . .168
4.3.5 Выдача прогнозов на новых данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .173
4.3.6 Промежуточные выводы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .173
Краткие итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .173
Глава 5. Основы машинного обучения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175
5.1 Обобщение – цель машинного обучения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .175
5.1.1 Недообучение и переобучение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .176
5.1.2 Базовые принципы обобщения в глубоком обучении . . . . . . . . . . . . . . . . . . . . . . . . .182
5.2 Оценка моделей машинного обучения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .189
5.2.1 Наборы данных для обучения, проверки и контроля . . . . . . . . . . . . . . . . . . . . . . . .189
5.2.2 Использование критериев, основанных на здравом смысле . . . . . . . . . . . . . . . . . . .193
5.2.3 Что следует помнить об оценке модели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .194
5.3 Улучшение качества обучения модели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .195
5.3.1 Настройка ключевых параметров градиентного спуска . . . . . . . . . . . . . . . . . . . . . . .195
5.3.2 Использование лучшей априорно обоснованной архитектуры . . . . . . . . . . . . . . . . . .198
5.3.3 Увеличение емкости модели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .199
5.4 Как улучшить обобщение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201
5.4.1 Подготовка набора данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .201
5.4.2 Конструирование признаков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .202
5.4.3 Использование ранней остановки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204
5.4.4 Регуляризация модели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .204
Краткие итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .215
Глава 6. Обобщенный рабочий процесс машинного обучения . . . . . . . . . . . . . . . . . . . . . . . .217
6.1 Постановка задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .219
6.1.1 Уточнение задачи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .219
6.1.2 Получение исходных данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221
6.1.3 Добейтесь понимания данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225
6.1.4 Выберите меру успеха . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .226
6.2 Разработка модели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .227
6.2.1 Подготовка данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .227
6.2.2 Выбор протокола оценки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .229
6.2.3 Как превзойти простой базовый уровень . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .230
6.2.4 Масштабирование: разработка модели, способной к переобучению . . . . . . . . . . . .231
6.2.5 Регуляризация и настройка модели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .232
6.3 Развертывание модели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233
6.3.1 Представление модели заказчику . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233
6.3.2 Передача модели заказчику . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .234
6.3.3 Мониторинг модели в рабочей среде . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .238
6.3.4 Поддержка и обновление модели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .238
Краткие итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239
Глава 7. Работа с Keras: углубленные навыки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .241
7.1 Широкий спектр рабочих процессов Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242
7.2 Различные способы построения моделей Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .242
7.2.1 Sequential API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .243
7.2.2 Functional API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .246
7.2.3 Создание подкласса класса Model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .253
7.2.4 Смешивание и сочетание разных компонентов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .257
7.2.5 Используйте правильные инструменты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .258
7.3 Использование встроенных циклов обучения и оценки . . . . . . . . . . . . . . . . . . . . . . . . .258
7.3.1 Разработка собственных метрик . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .259
7.3.2 Использование обратных вызовов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .262
7.3.3 Разработка собственных обратных вызовов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .264
7.3.4 Мониторинг и визуализация с помощью TensorBoard . . . . . . . . . . . . . . . . . . . . . . . .266
7.4 Разработка собственных циклов обучения и оценки . . . . . . . . . . . . . . . . . . . . . . . . . . .268
7.4.1 Обучение или логический вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .269
7.4.2 Использование метрик на низком уровне . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .270
7.4.3 Полный цикл обучения и оценки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .271
7.4.4 Увеличьте быстродействие с помощью tf_function() . . . . . . . . . . . . . . . . . . . . . . .274
7.4.5 Использование fit() с пользовательским циклом обучения . . . . . . . . . . . . . . . . . .275
Краткие итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .278
Глава 8. Глубокое обучение в компьютерном зрении . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .279
8.1 Введение в сверточные нейронные сети . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .280
8.1.1 Операция свертки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .283
8.1.2 Выбор максимального значения из соседних (max-pooling) . . . . . . . . . . . . . . . . . .288
8.2 Обучение сверточной нейронной сети с нуля на небольшом наборе данных . . . . . .291
8.2.1 Целесообразность глубокого обучения для решения задач с небольшими наборами данных .292
8.2.2 Загрузка данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .292
8.2.3 Построение сети . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .295
8.2.4 Предварительная обработка данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .297
8.2.5 Расширение данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .303
8.3 Использование предварительно обученной сверточной нейронной сети . . . . . . . . . .307
8.3.1 Выделение признаков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .308
8.3.2 Дообучение ранее обученной модели . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .318
Краткие итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .322
Глава 9. Глубокое обучение для компьютерного зрения . . . . . . . . . . . . . . . . . . . . . . . . . . .323
9.1 Три основные задачи компьютерного зрения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .324
9.2 Пример сегментации изображения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .325
9.3 Современные стандартные архитектуры сверточных сетей . . . . . . . . . . . . . . . . . . . . . .335
9.3.1 Модульность, иерархия и повторное использование . . . . . . . . . . . . . . . . . . . . . . . . .336
9.3.2 Остаточные связи . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .339
9.3.3 Пакетная нормализация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .343
9.3.4 Разделяемые по глубине свертки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .346
9.3.5 Применим знания на практике: мини-модель, подобная Xception . . . . . . . . . . . . .349
9.4 Интерпретация знаний сверточной нейросети . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .352
9.4.1 Визуализация промежуточных активаций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .353
9.4.2 Визуализация сетевых фильтров . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .359
9.4.3 Визуализация тепловых карт активации класса . . . . . . . . . . . . . . . . . . . . . . . . . . . . .365
Краткие итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .371
Глава 10. Глубокое обучение и временные ряды . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .372
10.1 Различные виды задач временных рядов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .372
10.2 Пример прогнозирования температуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .374
10.2.1 Подготовка данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .378
10.2.2 Простое решение задачи без привлечения машинного обучения . . . . . . . . . . . . . .382
10.2.3 Решение с использованием базовой модели машинного обучения . . . . . . . . . . . . .384
10.2.4 Эксперимент с одномерной сверточной сетью . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .386
10.2.5 Первый вариант простой рекуррентной модели . . . . . . . . . . . . . . . . . . . . . . . . . . . . .389
10.3 Рекуррентные нейронные сети . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .390
10.3.1 Рекуррентный слой в Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .393
10.4 Продвинутое применение рекуррентных нейронных сетей . . . . . . . . . . . . . . . . . . . . . .398
10.4.1 Использование рекуррентного прореживания для борьбы с переобучением . .399
10.4.2 Наложение рекуррентных слоев . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .402
10.4.3 Использование двунаправленных рекуррентных сетей . . . . . . . . . . . . . . . . . . . . . . .404
10.4.4 Что дальше . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .407
Краткие итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .409
Глава 11. Глубокое обучение в обработке текстов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .410
11.1 Обработка естественного языка: обзор отрасли . . . . . . . . . . . . . . . . . . . . . . . . . . . . .410
11.2 Подготовка текстовых данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .413
11.2.1 Стандартизация текста . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .414
11.2.2 Разделение текста (токенизация) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .415
11.2.3 Индексация словаря . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .416
11.2.4 Использование слоя layer_text_vectorization . . . . . . . . . . . . . . . . . . . . . . . . . . . .418
11.3 Два подхода к представлению групп слов: наборы и последовательности . . . . . .422
11.3.1 Подготовка данных обзоров фильмов IMDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .423
11.3.2 Обработка слов без учета порядка . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .426
11.3.3 Обработка последовательности слов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .434
11.4 Архитектура Transformer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .448
11.4.1 Механизм самовнимания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .448
11.4.2 Многоголовое внимание . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .454
11.4.3 Кодировщик в архитектуре Transformer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .455
11.4.4 Когда следует использовать модели последовательности, а не модели мешка слов .465
11.5 Помимо классификации текста: обучение преобразованию последовательностей .466
11.5.1 Пример машинного перевода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .468
11.5.3 Рекуррентная модель преобразования последовательностей . . . . . . . . . . . . . . . . .471
11.5.4 Преобразование последовательностей с Transformer . . . . . . . . . . . . . . . . . . . . . . .478
Краткие итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .484
Глава 12. Генеративные модели глубокого обучения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .486
12.1 Генерирование текста с помощью Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .488
12.1.1 Краткая история генеративных сетей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .488
12.1.2 Как генерируют последовательности данных? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .490
12.1.3 Важность стратегии выбора . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .490
12.1.4 Реализация генерации текста с помощью Keras . . . . . . . . . . . . . . . . . . . . . . . . . . .493
12.1.5 Обратный вызов генерации текста с выборкой при разной температуре . . . . . .497
12.1.6 Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .504
12.2 DeepDream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .504
12.2.1 Реализация DeepDream в Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .505
12.2.2 Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .513
12.3 Нейронный перенос стиля . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .514
12.3.1 Функция потерь содержания . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .515
12.3.2 Функция потерь стиля . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .515
12.3.3 Реализация переноса стиля в Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .516
12.3.4 Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .524
12.4 Генерация изображений с помощью вариационных автокодировщиков . . . . . . . . . . . .524
12.4.1 Выбор шаблонов из скрытых пространств изображений . . . . . . . . . . . . . . . . . . . . . .525
12.4.2 Концептуальные векторы для редактирования изображений . . . . . . . . . . . . . . . . . .526
12.4.3 Вариационные автокодировщики . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .527
12.4.4 Реализация VAE с помощью Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .530
12.4.5 Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .536
12.5 Введение в генеративно-состязательные сети . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .536
12.5.1 Реализация генеративно-состязательной сети . . . . . . . . . . . . . . . . . . . . . . . . . . . . .538
12.5.2 Полезные технические приемы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .539
12.5.3 Получение набора данных CelebA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .540
12.5.4 Дискриминатор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .542
12.5.5 Генератор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .543
12.5.6 Состязательная сеть . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .544
12.5.7 Подведение итогов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .547
Краткие итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .548
Глава 13. Глубокое обучение в реальной жизни . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .549
13.1 Получение максимальной отдачи от ваших моделей . . . . . . . . . . . . . . . . . . . . . . . . . . .550
13.1.1 Оптимизация гиперпараметров . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .550
13.1.2 Ансамблирование моделей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .559
13.2 Масштабируемое обучение моделей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .561
13.2.1 Ускорение обучения на GPU со смешанной точностью . . . . . . . . . . . . . . . . . . . . . .562
13.2.2 Обучение модели на нескольких GPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .565
13.2.3 Обучение модели на TPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .570
Краткие итоги главы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .572
Глава 14. Заключение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .573
14.1 Краткий обзор ключевых понятий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .574
14.1.1 Различные подходы к ИИ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .574
14.1.2 Что выделяет глубокое обучение среди других подходов к машинному обучению .575
14.1.3 Как правильно воспринимать глубокое обучение . . . . . . . . . . . . . . . . . . . . . . . . . .575
14.1.4 Ключевые технологии глубокого обучения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .577
14.1.5 Обобщенный рабочий процесс машинного обучения . . . . . . . . . . . . . . . . . . . . . . . . .578
14.1.6 Основные архитектуры сетей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .579
14.1.7 Пространство возможностей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .584
14.2 Ограничения глубокого обучения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .586
14.2.1 Риск очеловечивания моделей глубокого обучения . . . . . . . . . . . . . . . . . . . . . . . .587
14.2.2 Принципиальное различие между автоматом и интеллектом . . . . . . . . . . . . . . . . . .589
14.2.3 Различие между локальным и экстремальным обобщением . . . . . . . . . . . . . . . . . . . .591
14.2.4 Предназначение интеллекта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .594
14.2.5 Восхождение по уровням обобщения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .595
14.3 Курс на большую универсальность в ИИ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .596
14.3.1 О важности постановки правильной цели: правило короткого пути . . . . . . . . . .596
14.3.2 Новая цель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .599
14.4 Реализация интеллекта: недостающие ингредиенты . . . . . . . . . . . . . . . . . . . . . . . . . . .601
14.4.1 Построение и использование абстрактных аналогий . . . . . . . . . . . . . . . . . . . . . . . .601
14.4.2 Два полюса абстракции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .603
14.4.3 Сочетание двух полюсов абстракции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .606
14.4.4 Недостающая половина картинки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .606
14.5 Будущее глубокого обучения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .608
14.5.1 Модели как программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .608
14.5.2 Машинное обучение и синтез программ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .610
14.5.3 Сочетание глубокого обучения и синтеза программ . . . . . . . . . . . . . . . . . . . . . . .610
14.5.4 Непрерывное обучение и повторное использование модульных подпрограмм . .613
14.5.5 Долгосрочная перспектива . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .614
14.6 Как не отстать от прогресса в быстро развивающейся отрасли . . . . . . . . . . . . . . .616
14.6.1 Решения реальных задач на сайте Kaggle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .616
14.6.2 Знакомство с последними разработками на сайте arXiv . . . . . . . . . . . . . . . . . . . .616
14.6.3 Исследование экосистемы Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .617
14.7 Заключительное слово . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .618
Приложение. Введение в Python для пользователей R . . . . . . . . . . . . . . . . . . . . . . . . . . . . .619
Предметный указатель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .643
Перед вами второе, расширенное в 1.5 раза издание бестселлера от автора библиотеки Keras.
Умение работать с моделями глубокого обучения стало важным навыком современных ученых, исследователей и программистов. API языка R для Keras и TensorFlow делает глубокое обучение доступным для всех пользователей R, даже если у них нет опыта работы с машинным обучением или нейронными сетями.Интуитивно понятные объяснения, четкие иллюстрации и наглядные примеры помогут вам освоить основные навыки глубокого обучения с помощью R, такие как компьютерное зрение, обработка естественного языка, работа с текстом, и даже изучить передовую архитектуру Transformer.Для читателей со средними навыками программирования на R. Опыт работы с Keras, TensorFlow или моделями глубокого обучения не требуется.