Опубликовано

Новинка: “Машинное обучение с PyTorch и Scikit-Learn”

Машинное обучение с PyTorch и Scikit-Learn

Исчерпывающее руководство по машинному (МО) и глубокому обучению с использованием языка программирования 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

Yuxi (Hayden) Liu

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

 

 

Vahid Mirjalili

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

 

 

Sebastian Raschka

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