
Исчерпывающее руководство по машинному (МО) и глубокому обучению с использованием языка программирования Python, фреймворка PyTorch и библиотеки scikit-learn. Рассмотрены основы МО, алгоритмы для задач классификации, классификаторы на основе scikit-learn, предварительная обработка и сжатие данных, современные методы оценки моделей и объединение различных моделей для ансамблевого обучения. Рассказано о применении МО для анализа текста и прогнозировании непрерывных целевых переменных с помощью регрессионного анализа, кластерном анализе и обучении без учителя, показано построение многослойной искусственной нейронной сети с нуля. Раскрыты продвинутые возможности PyTorch для решения сложных задач. Описано применение глубоких сверточных и рекуррентных нейронных сетей, трансформеров, генеративных состязательных и графовых нейронных сетей, Особое внимание уделено обучению с подкреплением для систем принятия решений в сложных средах. Электронный архив содержит цветные иллюстрации и коды всех примеров.
Для программистов в области машинного обучения
Разрабатывайте модели машинного и глубокого обучения с помощью Python
Перед вами не только исчерпывающее руководство по машинному и глубокому обучению с использованием Python, фреймворка PyTorch и библиотеки scikit-learn. но и справочник, к которому вы будете постоянно возвращаться при создании систем машинного обучения. Книга подробно описывает все основные методы машинного обучения и содержит четкие пояснения, визуализации и примеры. Автор стремится научить читателя принципам самостоятельного создания моделей и приложений, а не просто следовать жестким инструкциям.
Описаны новые дополнения к библиотеке scikit-learn. Рассмотрены различные методы машинного и глубокого обучения для классификации текста и изображений. Рассказано о генеративно-состязательных сетях (GAN) для синтеза новых данных и обучения интеллектуальных агентов Освещены последние тенденции в области глубокого обучения, включая введение в графовые нейронные сети и крупномасштабные преобразователи, используемые для обработки естественного языка (NLP). Книга будет полезна как начинающим разработчикам на Python, слабо знакомым с машинным обучением, так и опытным, желающим углубить свои знания.
Вы изучите:
- фреймворки, модели и методы машинного обучения, применимые к широкому кругу задач и наборов данных;
- библиотеку scikit-learn для машинного обучения и фреймворк PyTorch для глубокого обучения;
- приемы обучения классификаторов на изображениях, тексте и т. д.;
- средства создания и обучения нейронных сетей, преобразователей и графических нейронных сетей;
- передовые методы оценки и настройки моделей.
Вы сможете глубже понять:
- прогнозирование непрерывных целевых результатов с помощью регрессионного анализа;
- особенности текстовых данных и данных из социальных сетей с помощью тонального анализа.
Книгу “Машинное обучение с PyTorch и Scikit-Learn” можно купить со скидкой в интернет-магазине издательства “БХВ“.
Вступительное слово…………………………………………………………………………………………………………………… 15
Об авторах……………………………………………………………………………………………………………………………………. 17
Предисловие……………………………………………………………………………………………………………………………….. 19
Для кого эта книга?…………………………………………………………………………………………………………………………. 20
О чем рассказывает книга?…………………………………………………………………………………………………………….. 20
Как получить максимальную отдачу от этой книги?…………………………………………………………………………… 22
Скачивание примеров кода…………………………………………………………………………………………………………….. 23
Скачивание цветных изображений………………………………………………………………………………………………….. 23
Соглашения и условные обозначения……………………………………………………………………………………………… 24
Глава 1. Как помочь компьютеру учиться на данных?………………………………………………………………… 25
1.1. Интеллектуальные машины для преобразования данных в знания…………………………………………….. 25
1.2. Три типа машинного обучения………………………………………………………………………………………………….. 26
1.2.1. Предсказание будущего при помощи обучения с учителем………………………………………………… 27
Прогнозирование меток классов в задаче классификации…………………………………………………. 28
Прогнозирование непрерывного значения в задаче регрессии………………………………………….. 29
1.2.2. Применение обучения с подкреплением для решения интерактивных задач……………………… 30
1.2.3. Обнаружение скрытых структур с помощью обучения без учителя…………………………………….. 31
Поиск подгрупп путем кластеризации……………………………………………………………………………….. 32
Уменьшение размерности для сжатия данных………………………………………………………………….. 32
1.3. Введение в основную терминологию и обозначения………………………………………………………………….. 33
1.3.1. Соглашения и условные обозначения, используемые в этой книге……………………………………. 33
1.3.2. Терминология машинного обучения…………………………………………………………………………………. 35
1.4. Общие принципы построения систем машинного обучения………………………………………………………… 36
1.4.1. Предварительная обработка: приведение данных к нужному виду…………………………………….. 36
1.4.2. Обучение и выбор прогностической модели……………………………………………………………………… 37
1.4.3. Оценка моделей и прогнозирование незнакомых экземпляров данных………………………………. 38
1.5. Использование Python для машинного обучения……………………………………………………………………….. 38
1.5.1. Установка Python и пакетов из Python Package Index…………………………………………………………. 39
1.5.2. Использование дистрибутива Python Anaconda и менеджера пакетов………………………………… 39
1.5.3. Пакеты для научных вычислений, науки о данных и машинного обучения…………………………. 40
1.6. Заключение……………………………………………………………………………………………………………………………… 42
Глава 2. Простые алгоритмы машинного обучения для задач классификации…………………………. 43
2.1. Искусственные нейроны: краткий экскурс в историю машинного обучения………………………………….. 43
2.1.1. Формальное определение искусственного нейрона…………………………………………………………… 44
2.1.2. Правило обучения персептрона……………………………………………………………………………………….. 46
2.2. Реализация алгоритма обучения персептрона на Python……………………………………………………………. 49
2.2.1. Объектно-ориентированный API персептрона………………………………………………………………….. 49
2.2.2. Обучение модели персептрона на наборе данных Iris……………………………………………………….. 52
2.3. Адаптивные линейные нейроны и сходимость обучения…………………………………………………………….. 57
2.3.1. Минимизация функции потерь с помощью градиентного спуска…………………………………………. 58
2.3.2. Реализация Adaline на Python…………………………………………………………………………………………… 61
2.3.3. Улучшение градиентного спуска за счет масштабирования признаков………………………………. 65
2.3.4. Крупномасштабное машинное обучение и стохастический градиентный спуск……………………. 67
2.4. Заключение……………………………………………………………………………………………………………………………… 71
Глава 3. Знакомство с классификаторами машинного обучения на основе scikit-learn…………….. 73
3.1. Выбор алгоритма классификации……………………………………………………………………………………………… 73
3.2. Первые шаги с scikit-learn: обучение персептрона……………………………………………………………………… 74
3.3. Моделирование вероятностей классов с помощью логистической регрессии………………………………. 79
3.3.1. Логистическая регрессия и условные вероятности……………………………………………………………. 79
3.3.2. Изучение весов модели с помощью логистической функции потерь…………………………………… 83
3.3.3. Преобразование Adaline в алгоритм логистической регрессии…………………………………………… 86
3.3.4. Обучение модели логистической регрессии с помощью scikit-learn……………………………………… 89
3.3.5. Борьба с переобучением путем регуляризации…………………………………………………………………. 92
3.4. Классификация по наибольшему отступу с помощью метода опорных векторов………………………….. 95
3.4.1. Смысл максимизации зазора……………………………………………………………………………………………. 95
3.4.2. Работа с нелинейно разделимым случаем при использовании резервных переменных………. 96
3.4.3. Альтернативные реализации алгоритмов в scikit-learn………………………………………………………. 98
3.5. Решение нелинейных задач с использованием ядерного варианта SVM…………………………………….. 99
3.5.1. Ядерные методы для линейно неразделимых данных……………………………………………………….. 99
3.5.2. Использование ядерного трюка для поиска разделяющих гиперплоскостей
в многомерном пространстве………………………………………………………………………………………………….. 101
3.6. Обучение дерева решений……………………………………………………………………………………………………… 104
3.6.1. Максимизация IG: получение наибольшей отдачи от затраченных усилий……………………….. 105
3.6.2. Построение дерева решений…………………………………………………………………………………………. 110
3.6.3. Объединение нескольких деревьев решений с помощью случайных лесов………………………. 112
3.7. K-ближайшие соседи: «ленивый» алгоритм обучения………………………………………………………………. 115
3.8. Заключение……………………………………………………………………………………………………………………………. 118
Глава 4. Предварительная обработка данных для создания качественных
обучающих наборов…………………………………………………………………………………………………………………… 120
4.1. Как поступать с отсутствующими данными?……………………………………………………………………………… 120
4.1.1. Выявление пропущенных значений в табличных данных………………………………………………… 121
4.1.2. Исключение обучающих записей или признаков с пропущенными значениями…………………. 122
4.1.3. Подстановка пропущенных значений……………………………………………………………………………… 123
4.1.4. API оценивателя scikit-learn……………………………………………………………………………………………. 124
4.2. Работа с категориальными данными……………………………………………………………………………………….. 125
4.2.1. Категориальное кодирование данных при помощи pandas………………………………………………. 126
4.2.2. Сопоставление порядковых признаков…………………………………………………………………………… 126
4.2.3. Кодирование меток классов……………………………………………………………………………………………. 127
4.2.4. Позиционное кодирование номинальных признаков……………………………………………………….. 128
4.2.5. Кодирование порядковых признаков………………………………………………………………………………. 131
4.3. Разделение набора данных на обучающие и тестовые наборы………………………………………………… 131
4.4. Приведение признаков к одному масштабу……………………………………………………………………………… 134
4.5. Выбор значимых признаков…………………………………………………………………………………………………….. 136
4.5.1. Регуляризация L1 и L2 как штраф за сложность модели………………………………………………….. 136
4.5.2. Геометрическая интерпретация регуляризации L2………………………………………………………….. 137
4.5.3. Разреженные решения с регуляризацией L1…………………………………………………………………… 139
4.5.4. Последовательные алгоритмы отбора признаков……………………………………………………………. 142
4.6. Оценка важности признаков с помощью случайных лесов………………………………………………………… 147
4.7. Заключение……………………………………………………………………………………………………………………………. 150
Глава 5. Сжатие данных путем уменьшения размерности…………………………………………………………. 151
5.1. Уменьшение размерности без учителя с помощью метода главных компонент…………………………. 151
5.1.1. Основные этапы метода главных компонент…………………………………………………………………… 152
5.1.2. Пошаговый процесс извлечения основных компонент…………………………………………………….. 154
5.1.3. Общая и объясненная дисперсия…………………………………………………………………………………… 156
5.1.4. Преобразование признаков……………………………………………………………………………………………. 157
5.1.5. Анализ основных компонент в scikit-learn………………………………………………………………………… 160
5.1.6. Оценка вклада признаков………………………………………………………………………………………………. 163
5.2. Сжатие данных с учителем с помощью линейного дискриминантного анализа…………………………… 165
5.2.1. Сравнение методов PCA и LDA……………………………………………………………………………………… 165
5.2.2. Как устроен алгоритм LDA?……………………………………………………………………………………………. 166
5.2.3. Вычисление матриц разброса………………………………………………………………………………………… 167
5.2.4. Выбор линейных дискриминантов для нового подпространства признаков………………………. 169
5.2.5. Проецирование точек данных на новое функциональное пространство…………………………… 171
5.2.6. Реализация LDA при помощи scikit-learn…………………………………………………………………………. 171
5.3. Нелинейное уменьшение размерности и визуализация……………………………………………………………. 173
5.3.1. Зачем рассматривать нелинейное уменьшение размерности?…………………………………………. 174
5.3.2. Визуализация данных с помощью алгоритма t-SNE…………………………………………………………. 175
5.4. Заключение……………………………………………………………………………………………………………………………. 178
Глава 6. Современные методы оценки моделей и настройки гиперпараметров…………………….. 179
6.1. Оптимизация рабочих процессов с помощью конвейеров…………………………………………………………. 179
6.1.1. Загрузка набора данных по раку молочной железы в Висконсине…………………………………….. 179
6.1.2. Объединение преобразователей и оценивателей в конвейер………………………………………….. 181
6.2. Использование k-кратной перекрестной проверки для оценки производительности модели………. 183
6.2.1. Перекрестная проверка с отложенными данными…………………………………………………………… 183
6.2.2. k-кратная перекрестная проверка………………………………………………………………………………….. 184
6.3. Алгоритмы отладки с использованием кривых обучения и валидации……………………………………….. 188
6.3.1. Диагностика смещения и дисперсии с помощью кривых обучения……………………………………. 188
6.3.2. Устранение переобучения и недообучения с помощью кривых валидации……………………….. 191
6.4. Точная настройка моделей с помощью поиска по сетке……………………………………………………………. 193
6.4.1. Настройка гиперпараметров с помощью поиска по сетке………………………………………………… 193
6.4.2. Изучение обширных конфигураций гиперпараметров с помощью
рандомизированного поиска……………………………………………………………………………………………………. 195
6.4.3. Поиск гиперпараметров методом последовательного деления пополам…………………………… 197
6.4.4. Выбор алгоритма методом вложенной перекрестной проверки………………………………………… 199
6.5. Обзор различных показателей оценки эффективности…………………………………………………………….. 201
6.5.1. Чтение матрицы несоответствий……………………………………………………………………………………. 201
6.5.2. Оптимизация правильности и полноты модели классификации……………………………………….. 203
6.5.3. Построение рабочей характеристики приемника…………………………………………………………….. 205
6.5.4. Метрики оценки многоклассовой классификации…………………………………………………………….. 208
6.5.5. Борьба с дисбалансом классов……………………………………………………………………………………….. 209
6.6. Заключение……………………………………………………………………………………………………………………………. 211
Глава 7. Объединение различных моделей для ансамблевого обучения………………………………… 212
7.1. Обучение ансамблей моделей…………………………………………………………………………………………………. 212
7.2. Объединение классификаторов по методу большинства голосов……………………………………………… 216
7.2.1. Реализация простого мажоритарного классификатора…………………………………………………….. 216
7.2.2. Использование принципа мажоритарного голосования для прогнозирования…………………… 220
7.2.3. Оценка и настройка ансамблевого классификатора………………………………………………………… 223
7.3. Бэггинг: создание ансамбля классификаторов из исходного набора данных………………………………. 228
7.3.1. Коротко о бэггинге…………………………………………………………………………………………………………. 229
7.3.2. Применение бэггинга для классификации экземпляров набора данных Wine……………………. 230
7.4. Использование «слабых учеников» в механизме адаптивного бустинга…………………………………….. 234
7.4.1. Как работает адаптивный бустинг?…………………………………………………………………………………. 234
7.4.2. Применение AdaBoost с помощью scikit-learn…………………………………………………………………… 238
7.5. Градиентный бустинг: обучение ансамбля на основе градиентов потерь…………………………………… 241
7.5.1. Сравнение AdaBoost с градиентным бустингом……………………………………………………………….. 241
7.5.2. Описание обобщенного алгоритма градиентного бустинга……………………………………………….. 242
7.5.3. Применение алгоритма градиентного бустинга для классификации………………………………….. 243
7.5.4. Иллюстрация применения градиентного бустинга для классификации……………………………… 245
7.5.5. Использование XGBoost………………………………………………………………………………………………… 247
7.6. Заключение……………………………………………………………………………………………………………………………. 249
Глава 8. Применение машинного обучения для смыслового анализа текста…………………………… 250
8.1. Подготовка набора данных с обзорами фильмов на IMDb………………………………………………………… 250
8.1.1. Получение набора данных c обзорами фильмов……………………………………………………………… 251
8.1.2. Преобразование набора данных в более удобный формат……………………………………………… 251
8.2. Знакомство с моделью мешка слов………………………………………………………………………………………….. 253
8.2.1. Преобразование слов в векторы признаков……………………………………………………………………. 253
8.2.2. Оценка релевантности слов с помощью частоты термина и обратной частоты документа… 255
8.2.3. Очистка текстовых данных…………………………………………………………………………………………….. 257
8.2.4. Получение токенов из документов………………………………………………………………………………….. 259
8.3. Обучение модели логистической регрессии для классификации документов……………………………… 260
8.4. Работа с большими данными: онлайн-алгоритмы и внешнее обучение…………………………………….. 263
8.5. Моделирование тем с использованием скрытого распределения Дирихле………………………………… 266
8.5.1. Разбор текстовых документов с помощью LDA……………………………………………………………….. 267
8.5.2. Реализация LDA в библиотеке scikit-learn……………………………………………………………………….. 267
8.6. Заключение……………………………………………………………………………………………………………………………. 270
Глава 9. Прогнозирование непрерывных целевых переменных
с помощью регрессионного анализа………………………………………………………………………………………….. 272
9.1. Знакомство с линейной регрессией………………………………………………………………………………………….. 272
9.1.1. Простая линейная регрессия………………………………………………………………………………………….. 273
9.1.2. Множественная линейная регрессия………………………………………………………………………………. 273
9.2. Изучение набора данных Ames Housing…………………………………………………………………………………… 274
9.2.1. Загрузка набора данных Ames Housing в DataFrame……………………………………………………….. 275
9.2.2. Визуализация важных характеристик набора данных………………………………………………………. 277
9.2.3. Просмотр отношений с помощью матрицы корреляции…………………………………………………… 278
9.3. Реализация обычной модели линейной регрессии методом наименьших квадратов………………….. 280
9.3.1. Нахождение регрессии для параметров регрессии с градиентным спуском……………………….. 281
9.3.2. Оценка коэффициента регрессионной модели с помощью scikit-learn……………………………….. 284
9.4. Обучение устойчивой регрессионной модели с использованием RANSAC…………………………………. 286
9.5. Оценка производительности моделей линейной регрессии………………………………………………………. 289
9.6. Использование методов регуляризации для регрессии…………………………………………………………….. 293
9.7. Переход от прямой линии к кривой: полиномиальная регрессия……………………………………………….. 294
9.7.1. Добавление полиномиальных членов с помощью scikit-learn……………………………………………. 295
9.7.2. Моделирование нелинейных отношений в наборе данных Ames Housing…………………………. 296
9.8. Моделирование нелинейных отношений с использованием случайных лесов……………………………. 299
9.8.1. Регрессия на основе алгоритма дерева решений……………………………………………………………. 299
9.8.2. Регрессия на основе случайного леса…………………………………………………………………………….. 301
9.9. Заключение……………………………………………………………………………………………………………………………. 303
Глава 10. Работа с неразмеченными данными: кластерный анализ…………………………………………. 304
10.1. Группировка объектов по сходству с использованием k-средних…………………………………………….. 304
10.1.1. Кластеризация методом k-средних с использованием scikit-learn…………………………………… 304
10.1.2. Более разумный способ размещения начальных центроидов: алгоритм k-средних++…….. 309
10.1.3. Жесткая и мягкая кластеризация………………………………………………………………………………… 310
10.1.4. Использование метода локтя для нахождения оптимального количества кластеров……… 312
10.1.5. Количественная оценка качества кластеризации с помощью силуэтных графиков………… 313
10.2. Организация кластеров в виде иерархического дерева………………………………………………………….. 318
10.2.1. Группировка кластеров снизу вверх……………………………………………………………………………. 318
10.2.2. Выполнение иерархической кластеризации с матрицей расстояний……………………………… 319
10.2.3. Прикрепление дендрограмм к тепловой карте…………………………………………………………….. 323
10.2.4. Агломеративная кластеризация с помощью scikit-learn…………………………………………………. 324
10.3. Обнаружение областей высокой плотности с помощью DBSCAN…………………………………………….. 325
10.4. Заключение………………………………………………………………………………………………………………………….. 330
Глава 11. Построение многослойной искусственной нейронной сети с нуля…………………………… 331
11.1. Моделирование сложных функций с помощью искусственных нейросетей………………………………. 331
11.1.1. Вкратце об однослойной нейронной сети…………………………………………………………………….. 332
11.1.2. Знакомство с архитектурой многослойной нейронной сети…………………………………………… 334
11.1.3. Активация нейронной сети прямого распространения………………………………………………….. 336
11.2. Классификация рукописных цифр………………………………………………………………………………………….. 338
11.2.1. Получение и подготовка набора данных MNIST…………………………………………………………… 339
11.2.2. Реализация многослойного персептрона…………………………………………………………………….. 342
11.2.3. Обучающий цикл нейронной сети……………………………………………………………………………….. 346
11.2.4. Оценка производительности нейронной сети………………………………………………………………. 351
11.3. Обучение искусственной нейронной сети……………………………………………………………………………….. 354
11.3.1. Вычисление функции потерь………………………………………………………………………………………. 354
11.3.2. Подробнее о механизме обратного распространения…………………………………………………… 356
11.3.3. Обучение нейронных сетей с помощью обратного распространения…………………………….. 358
11.4. О сходимости в нейронных сетях…………………………………………………………………………………………… 361
11.5. Несколько заключительных слов о реализации нейронной сети……………………………………………… 362
11.6. Заключение………………………………………………………………………………………………………………………….. 363
Глава 12. Глубокое обучение нейронных сетей на основе PyTorch………………………………………….. 364
12.1. PyTorch и производительность обучения……………………………………………………………………………….. 364
12.1.1. Проблемы с быстродействием……………………………………………………………………………………. 364
12.1.2. Что такое PyTorch?…………………………………………………………………………………………………….. 366
12.1.3. Как мы будем изучать PyTorch?………………………………………………………………………………….. 367
12.2. Первые шаги с PyTorch…………………………………………………………………………………………………………. 367
12.2.1. Установка PyTorch……………………………………………………………………………………………………… 367
12.2.2. Создание тензоров в PyTorch…………………………………………………………………………………….. 369
12.2.3. Управление типом данных и формой тензора……………………………………………………………… 369
12.2.4. Применение к тензорам математических операций……………………………………………………… 370
12.2.5. Разделение, стекирование и конкатенация тензоров…………………………………………………… 371
12.3. Построение конвейеров ввода в PyTorch………………………………………………………………………………. 373
12.3.1. Создание объекта DataLoader из существующих тензоров…………………………………………… 373
12.3.2. Объединение двух тензоров в совместный набор данных……………………………………………. 374
12.3.3. Перемешивание, группировка и повторение……………………………………………………………….. 375
12.3.4. Создание набора данных из файлов на локальном диске…………………………………………….. 377
12.3.5. Получение доступных наборов данных из библиотеки torchvision.datasets…………………….. 380
12.4. Построение нейросетевой модели в PyTorch…………………………………………………………………………. 384
12.4.1. Модуль нейронной сети PyTorch (torch.nn)………………………………………………………………….. 384
12.4.2. Построение модели линейной регрессии…………………………………………………………………….. 384
12.4.3. Обучение модели с помощью модулей torch.nn и torch.optim………………………………………… 388
12.4.4. Построение многослойного персептрона для классификации цветков
в наборе данных Iris……………………………………………………………………………………………………………… 389
12.4.5. Оценка обученной модели на тестовом наборе данных……………………………………………….. 391
12.4.6. Сохранение и повторная загрузка обученной модели………………………………………………….. 392
12.5. Выбор функций активации для многослойных нейронных сетей……………………………………………… 393
12.5.1. Несколько слов о логистической функции……………………………………………………………………. 393
12.5.2. Оценка вероятностей классов в мультиклассовой классификации с помощью
функции softmax……………………………………………………………………………………………………………………. 395
12.5.3. Расширение выходного спектра с использованием гиперболического тангенса…………….. 396
12.5.4. Спрямленная линейная активация……………………………………………………………………………… 398
12.6. Заключение………………………………………………………………………………………………………………………….. 399
Глава 13. Углубленное знакомство с PyTorch……………………………………………………………………………. 400
13.1. Основные возможности PyTorch……………………………………………………………………………………………. 401
13.2. Граф вычислений PyTorch…………………………………………………………………………………………………….. 401
13.2.1. Вкратце о графе вычислений……………………………………………………………………………………… 401
13.2.2. Создание графа в PyTorch…………………………………………………………………………………………. 402
13.3. Тензорные объекты PyTorch для хранения и обновления параметров модели………………………… 403
13.4. Вычисление градиентов с помощью автоматического дифференцирования……………………………. 405
13.4.1. Вычисление градиентов потерь по обучаемым переменным………………………………………… 405
13.4.2. Как работает автоматическое дифференцирование?………………………………………………….. 406
13.4.3. Состязательные примеры………………………………………………………………………………………….. 407
13.5. Упрощение реализации популярных архитектур с помощью модуля torch.nn…………………………… 407
13.5.1. Реализация моделей на основе nn.Sequential………………………………………………………………. 407
13.5.2. Выбор функции потерь………………………………………………………………………………………………. 409
13.5.3. Решение задачи классификации XOR…………………………………………………………………………. 409
13.5.4. Более гибкое построение моделей с помощью nn.Module…………………………………………….. 414
13.5.5. Создание в PyTorch пользовательских слоев………………………………………………………………. 416
13.6. Проект № 1: прогнозирование расхода топлива автомобиля…………………………………………………… 420
13.6.1. Работа со столбцами признаков………………………………………………………………………………….. 420
13.6.2. Обучение регрессионной модели DNN………………………………………………………………………… 423
13.7. Проект № 2: классификация рукописных цифр из набора MNIST…………………………………………….. 425
13.8. API PyTorch более высокого уровня: краткое введение в PyTorch-Lightning…………………………….. 428
13.8.1. Настройка модели PyTorch Lightning……………………………………………………………………………. 428
13.8.2. Настройка загрузчиков данных для Lightning……………………………………………………………….. 431
13.8.3. Обучение модели с помощью класса PyTorch Lightning Trainer……………………………………… 432
13.8.4. Оценка модели с помощью TensorBoard……………………………………………………………………… 433
13.9. Заключение………………………………………………………………………………………………………………………….. 436
Глава 14. Классификация изображений с помощью глубоких сверточных нейронных сетей… 437
14.1. Функциональные блоки CNN…………………………………………………………………………………………………. 437
14.1.1. Устройство CNN и понятие иерархии признаков………………………………………………………….. 438
14.1.2. Выполнение дискретных сверток………………………………………………………………………………… 439
Дискретные свертки в одном измерении……………………………………………………………………… 440
Заполнение входных данных для управления размером выходных карт признаков……….. 442
Определение размера вывода свертки……………………………………………………………………….. 443
Вычисление дискретной двумерной свертки………………………………………………………………… 445
14.1.3. Слои подвыборки………………………………………………………………………………………………………. 448
14.2. Практическая реализация CNN…………………………………………………………………………………………….. 449
14.2.1. Работа с несколькими входными или цветовыми каналами………………………………………….. 450
14.2.2. Регуляризация L2 и прореживание……………………………………………………………………………… 452
14.2.3. Функции потерь для задач классификации………………………………………………………………….. 456
14.3. Реализация глубокой CNN с использованием PyTorch……………………………………………………………. 458
14.3.1. Архитектура многослойной CNN…………………………………………………………………………………. 458
14.3.2. Загрузка и предварительная обработка данных…………………………………………………………… 459
14.3.3. Реализация CNN с использованием модуля torch.nn……………………………………………………. 460
Настройка слоев CNN в PyTorch…………………………………………………………………………………. 460
Создание CNN в PyTorch……………………………………………………………………………………………. 461
14.4. Классификация улыбающихся лиц с помощью CNN……………………………………………………………….. 466
14.4.1. Загрузка набора данных CelebA………………………………………………………………………………….. 466
14.4.2. Преобразование изображений и дополнение данных…………………………………………………… 467
14.4.3. Обучение классификатора улыбки на основе CNN………………………………………………………. 473
14.5. Заключение………………………………………………………………………………………………………………………….. 479
Глава 15. Моделирование последовательных данных с помощью
рекуррентных нейронных сетей………………………………………………………………………………………………… 480
15.1. Знакомство с понятием последовательных данных………………………………………………………………… 480
15.1.1. Моделирование последовательных данных: порядок имеет значение………………………….. 481
15.1.2. Данные временнх рядов — особый тип последовательных данных……………………………. 481
15.1.3. Способы представления последовательностей…………………………………………………………… 481
15.1.4. Различные категории моделирования последовательности…………………………………………. 482
15.2. RNN для моделирования последовательностей…………………………………………………………………….. 484
15.2.1. Определение потока данных в RNN……………………………………………………………………………. 484
15.2.2. Вычисление активаций в RNN……………………………………………………………………………………. 486
15.2.3. Скрытая и выходная рекуррентность………………………………………………………………………….. 488
15.2.4. Проблемы изучения дальних взаимодействий…………………………………………………………….. 491
15.2.5. Ячейки долгой краткосрочной памяти…………………………………………………………………………. 492
15.3. Реализация RNN для моделирования последовательностей в PyTorch…………………………………… 494
15.3.1. Проект № 1: предсказание эмоциональной окраски отзывов на фильмы IMDb……………… 494
Подготовка данных отзывов на фильмы……………………………………………………………………… 495
Слои встраивания для кодирования предложений………………………………………………………. 499
Построение модели RNN……………………………………………………………………………………………. 501
Построение модели RNN для задачи анализа тональности………………………………………….. 502
Подробнее о двунаправленной RNN…………………………………………………………………………… 504
15.3.2. Проект № 2: моделирование языка на уровне символов в PyTorch………………………………. 506
Предварительная обработка набора данных………………………………………………………………. 507
Построение модели RNN символьного уровня…………………………………………………………….. 511
Этап оценки: создание новых отрывков текста……………………………………………………………. 513
15.4. Заключение………………………………………………………………………………………………………………………….. 517
Глава 16. Трансформеры: улучшение обработки естественного языка с помощью механизмов внимания 518
16.1. Добавляем к RNN механизм внимания…………………………………………………………………………………… 519
16.1.1. Как внимание помогает RNN извлекать информацию?………………………………………………… 519
16.1.2. Оригинальный механизм внимания для RNN………………………………………………………………. 520
16.1.3. Обработка входных данных с использованием двунаправленной RNN…………………………. 520
16.1.4. Генерация выходных данных из векторов контекста……………………………………………………. 522
16.1.5. Вычисление весов внимания………………………………………………………………………………………. 522
16.2. Знакомство с механизмом самовнимания……………………………………………………………………………….. 523
16.2.1. Начнем с базовой формы самовнимания…………………………………………………………………….. 524
16.2.2. Параметризация механизма самовнимания: взвешенное скалярное произведение………. 527
16.3. Внимание — это все, что нам нужно: знакомство с архитектурой Transformer………………………….. 530
16.3.1. Кодирование контекстных встраиваний с помощью многоголового внимания……………….. 531
16.3.2. Обучение языковой модели: декодер и маскированное многоголовое внимание…………… 535
16.3.3. Детали реализации: позиционное кодирование и нормализация слоев…………………………. 536
16.4. Построение больших языковых моделей с использованием неразмеченных данных……………….. 538
16.4.1. Предварительное обучение и тонкая настройка моделей трансформеров……………………. 539
16.4.2. Использование неразмеченных данных с помощью GPT……………………………………………… 541
16.4.3. Использование GPT-2 для создания нового текста……………………………………………………… 545
16.4.4. Двунаправленное предварительное обучение модели BERT……………………………………….. 547
16.4.5. Лучшее из двух миров: BART……………………………………………………………………………………… 550
16.5. Тонкая настройка модели BERT в PyTorch…………………………………………………………………………….. 553
16.5.1. Загрузка набора данных обзора фильмов IMDb…………………………………………………………… 554
16.5.2. Токенизация набора данных………………………………………………………………………………………. 555
16.5.3. Загрузка и тонкая настройка предварительно обученной модели BERT……………………….. 557
16.5.4. Удобная тонкая настройка трансформера с помощью API Trainer………………………………… 560
16.6. Заключение………………………………………………………………………………………………………………………….. 564
Глава 17. Генеративно-состязательные сети и синтез новых данных……………………………………… 566
17.1. Знакомство с генеративно-состязательными сетями………………………………………………………………. 566
17.1.1. Начнем с автокодировщиков………………………………………………………………………………………. 567
17.1.2. Генеративные модели для синтеза новых данных……………………………………………………….. 569
17.1.3. Генерация новых экземпляров данных с помощью GAN………………………………………………. 570
17.1.4. Функции потерь сетей генератора и дискриминатора в модели GAN…………………………….. 572
17.2. Строим собственную GAN с нуля…………………………………………………………………………………………… 574
17.2.1. Обучение моделей GAN в Google Colab………………………………………………………………………. 574
17.2.2. Реализация сетей генератора и дискриминатора…………………………………………………………. 577
17.2.3. Определение набора обучающих данных……………………………………………………………………. 580
17.2.4. Обучение модели GAN……………………………………………………………………………………………….. 582
17.3. Улучшение качества синтезированных изображений с помощью сверточной GAN
и метрики Вассерштейна………………………………………………………………………………………………………. 588
17.3.1. Транспонированная свертка………………………………………………………………………………………. 588
17.3.2. Пакетная нормализация…………………………………………………………………………………………….. 590
17.3.3. Реализация генератора и дискриминатора………………………………………………………………….. 592
17.3.4. Меры несходства между двумя распределениями………………………………………………………… 598
17.3.5. Практическое применение EM-расстояния для построения GAN………………………………….. 602
17.3.6. Штраф за градиент…………………………………………………………………………………………………….. 603
17.3.7. Реализация WGAN-GP для обучения модели DCGAN………………………………………………….. 603
17.3.8. Схлопывание мод распределения………………………………………………………………………………. 606
17.4. Другие применения GAN……………………………………………………………………………………………………….. 608
17.5. Заключение………………………………………………………………………………………………………………………….. 609
Глава 18. Графовые нейронные сети: выявление зависимостей
в структурированных графовых данных………………………………………………………………………………….. 610
18.1. Введение в графовые данные………………………………………………………………………………………………. 611
18.1.1. Неориентированные графы……………………………………………………………………………………….. 611
18.1.2. Ориентированные графы…………………………………………………………………………………………… 612
18.1.3. Помеченные графы……………………………………………………………………………………………………. 612
18.1.4. Представление молекул в виде графов………………………………………………………………………. 613
18.2. Что такое графовая свертка?………………………………………………………………………………………………… 614
18.2.1. Причина использования графовых сверток…………………………………………………………………. 614
18.2.2. Реализация базовой свертки графа……………………………………………………………………………. 616
18.3. Построение GNN в PyTorch с нуля…………………………………………………………………………………………. 620
18.3.1. Определение модели NodeNetwork…………………………………………………………………………….. 620
18.3.2. Реализация слоя графовой свертки NodeNetwork……………………………………………………….. 622
18.3.3. Добавочный слой глобального объединения для работы с графами разного размера…… 623
18.3.4. Подготовка загрузчика данных DataLoader………………………………………………………………….. 625
18.3.5. Использование NodeNetwork для прогнозирования…………………………………………………….. 627
18.4. Построение GNN с использованием геометрической библиотеки PyTorch……………………………….. 628
18.5. Другие слои GNN и новейшие разработки……………………………………………………………………………… 634
18.5.1. Спектральные графовые свертки……………………………………………………………………………….. 634
18.5.2. Объединение…………………………………………………………………………………………………………….. 635
18.5.3. Нормализация……………………………………………………………………………………………………………. 637
18.5.4. Дополнительная литература по графовым нейронным сетям………………………………………. 639
18.6. Заключение………………………………………………………………………………………………………………………….. 640
Глава 19. Обучение с подкреплением для принятия решений в сложных условиях………………… 641
19.1. Введение в обучение на собственном опыте………………………………………………………………………….. 642
19.1.1. Ключевые идеи обучения с подкреплением…………………………………………………………………. 642
19.1.2. Определение интерфейса агент-среда в системе обучения с подкреплением……………….. 643
19.2. Теоретические основы RL…………………………………………………………………………………………………….. 645
19.2.1. Марковские процессы принятия решений……………………………………………………………………. 645
Математическая основа марковских процессов принятия решений………………………………. 645
Визуальное представление марковского процесса………………………………………………………. 647
19.2.2. Эпизодические и непрерывные задачи……………………………………………………………………….. 648
19.2.3. Терминология RL: отдача, стратегия и функция ценности……………………………………………. 648
Отдача………………………………………………………………………………………………………………………. 648
Стратегия………………………………………………………………………………………………………………….. 650
Функция ценности………………………………………………………………………………………………………. 650
19.2.4. Уравнение Беллмана в динамическом программировании…………………………………………… 652
19.3. Алгоритмы обучения с подкреплением…………………………………………………………………………………… 653
19.3.1. Динамическое программирование………………………………………………………………………………. 653
Оценка стратегии: прогнозирование функции ценности с помощью
динамического программирования……………………………………………………………………………… 654
Улучшение стратегии с помощью известной функции ценности……………………………………. 655
Итерация стратегии……………………………………………………………………………………………………. 655
Итерация ценности…………………………………………………………………………………………………….. 655
19.3.2. Обучение с подкреплением по методу Монте-Карло…………………………………………………….. 656
Нахождение функции ценности состояния с использованием MC…………………………………. 656
Нахождение функции ценности действия с использованием MC…………………………………… 657
Поиск оптимальной стратегии с помощью MC-управления…………………………………………… 657
Улучшение стратегии: вычисление жадной стратегии на основе функции
ценности действия……………………………………………………………………………………………………… 657
19.3.3. Обучение на временнх разностях……………………………………………………………………………… 658
Прогнозирование ценности с TD…………………………………………………………………………………. 658
Алгоритм on-policy TD (SARSA)…………………………………………………………………………………… 660
Алгоритм off-policy TD (Q-обучение)……………………………………………………………………………. 660
19.4. Реализация первого алгоритма RL………………………………………………………………………………………… 661
19.4.1. Знакомство с набором инструментов OpenAI Gym………………………………………………………… 661
Работа с готовыми средами в OpenAI Gym………………………………………………………………….. 661
Пример клетчатого мира…………………………………………………………………………………………….. 663
Реализация среды клетчатого мира в OpenAI Gym………………………………………………………. 664
19.4.2. Решение задачи клетчатого мира с помощью Q-обучения…………………………………………… 670
19.5. Обзор глубокого Q-обучения…………………………………………………………………………………………………. 673
19.5.1. Применение алгоритма Q-обучения в моделях DQN……………………………………………………. 674
Глобальная память……………………………………………………………………………………………………. 674
Определение целей для расчета потерь……………………………………………………………………… 676
19.5.2. Реализация алгоритма глубокого Q-обучения……………………………………………………………… 677
19.6. Краткое содержание главы и книги………………………………………………………………………………………… 680

Юси (Хэйден) Лю — инженер-программист, отдел машинного обучения в Google. Он разрабатывает и совершенствует модели и системы машинного обучения для оптимизации рекламы в крупнейшей поисковой системе мира.

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

Себастьян Рашка — доцент кафедры статистики в Университете Висконсин-Мэдисон, специализирующийся на исследованиях в области машинного обучения и глубокого обучения. Будучи ведущим преподавателем искусственного интеллекта в Grid AI, Себастьян планирует и дальше следовать своей страсти — помогать людям осваивать машинное обучение и искусственный интеллект.
