Пора научиться использовать TensorFlow.js для построения моделей глубокого обучения, работающих непосредственно в браузере! Умные веб-приложения захватили мир, а реализовать их в браузере или серверной части позволяет TensorFlow.js. Данная библиотека блестяще портируется, ее модели работают везде, где работает JаvaScript. Специалисты из Google Brain создали книгу, которая поможет решать реальные прикладные задачи. Вы не будете скучать над теорией, а сразу освоите базу глубокого обучения и познакомитесь с продвинутыми концепциями ИИ на примерах анализа текста, обработки речи, распознавания образов и самообучающегося игрового искусственного интеллекта.
Author(s): Шолле Франсуа, Нильсон Эрик, Байлесчи Стэн, Цэй Шэнкуинг
Series: Библиотека программиста
Publisher: Питер
Year: 2021
Language: Russian
Pages: 576
City: Санкт-Петербург
От издательства
Об иллюстрации на обложке
Об авторах
Благодарности
Введение
Предисловие
Об этой книге
Для кого предназначено издание
Структура издания
О коде
Дискуссионный форум книги
Часть I. Актуальность и основные понятия
Глава 1. Глубокое обучение и JavaScript
1.1. Искусственный интеллект, машинное обучение, нейронные сети и глубокое обучение
1.1.1. Искусственный интеллект
1.1.2. Машинное обучение: отличия от традиционного программирования
1.1.3. Нейронные сети и глубокое обучение
1.1.4. Почему глубокое обучение? И почему именно сейчас?
1.2. Какой смысл в сочетании JavaScript и машинного обучения
1.2.1. Глубокое обучение с помощью Node.js
1.2.2. Экосистема JavaScript
1.3. Почему именно TensorFlow.js
1.3.1. Краткая история TensorFlow, Keras и TensorFlow.js
1.3.2. Почему именно TensorFlow.js: краткое сравнение с аналогичными библиотеками
1.3.3. Как TensorFlow.js используется в мире
1.3.4. Что вы узнаете о TensorFlow.js из этой книги, а что — нет
Упражнения
Резюме
Часть II. Введение в TensorFlow.js
Глава 2. Приступим: простая линейная регрессия в TensorFlow.js
2.1. Пример 1. Предсказание продолжительности скачивания с помощью TensorFlow.js
2.1.1. Обзор проекта: предсказание продолжительности
2.1.2. Примечания относительно листингов и команд консоли
2.1.3. Создание и форматирование данных
2.1.4. Описываем простую модель
2.1.5. Подгонка модели к обучающим данным
2.1.6. Используем обученную модель для предсказаний
2.1.7. Резюме нашего первого примера
2.2. Внутреннее устройство Model.fit(): анализируем градиентный спуск из примера 1
2.2.1. Основные идеи оптимизации на основе градиентного спуска
2.2.2. Обратное распространение ошибки: внутри градиентного спуска
2.3. Множественная линейная регрессия
2.3.1. Набор данных стоимости жилья в Бостоне
2.3.2. Получаем из GitHub и запускаем проект Boston-housing
2.3.3. Доступ к данным о бостонских ценах на недвижимость
2.3.4. Точная формулировка задачи проекта Boston-housing
2.3.5. Небольшое отступление: нормализация данных
2.3.6. Линейная регрессия по набору данных Boston-housing
2.4. Интерпретация модели
2.4.1. Выясняем смысл усвоенных весов
2.4.2. Извлекаем из модели внутренние веса
2.4.3. Нюансы интерпретируемости
Упражнения
Резюме
Глава 3. Вводим нелинейность: теперь не только взвешенные суммы
3.1. Нелинейность: что это такое и где может пригодиться
3.1.1. Развиваем чутье на нелинейность в нейронных сетях
3.1.2. Гиперпараметры и их оптимизация
3.2. Нелинейность на выходе модели: модели для классификации
3.2.1. Бинарная классификация
3.2.2. Измерение качества работы бинарных классификаторов: точность, полнота, безошибочность и кривые ROC
3.2.3. Кривая ROC: наглядное представление соотношения плюсов и минусов при бинарной классификации
3.2.4. Бинарная перекрестная энтропия
3.3. Многоклассовая классификация
3.3.1. Унитарное кодирование категориальных данных
3.3.2. Многомерная логистическая функция активации
3.3.3. Категориальная перекрестная энтропия: функция потерь для многоклассовой классификации
3.3.4. Матрица различий: детальный анализ многоклассовой классификации
Упражнения
Резюме
Глава 4. Распознавание изображений и звуковых сигналов с помощью сверточных сетей
4.1. От векторов к тензорам: представление изображений
4.1.1. Набор данных MNIST
4.2. Ваша первая сверточная нейронная сеть
4.2.1. Слой conv2d
4.2.2. Слой maxPooling2d
4.2.3. «Лейтмотивы» свертки и субдискретизации
4.2.4. Слои схлопывания и плотные слои
4.2.5. Обучение сверточной сети
4.2.6. Предсказания с помощью сверточной сети
4.3. Вне браузера: обучаем модели быстрее с помощью Node.js
4.3.1. Зависимости и импорты, необходимые для tfjs-node
4.3.2. Сохранение модели из Node.js и загрузка ее в браузере
4.4. Распознавание устной речи
4.4.1. Спектрограммы: представление звуков в виде изображений
Упражнения
Резюме
Глава 5. Перенос обучения: переиспользование предобученных нейронных сетей
5.1. Переиспользование предобученных моделей
5.1.1. Перенос обучения при совместимых формах выходных сигналов: блокировка слоев
5.1.2. Перенос обучения при несовместимых формах выходных сигналов: создание новой модели на основе выходных сигналов базовой модели
5.1.3. Извлекаем максимум пользы из переноса обучения благодаря тонкой настройке: пример обработки аудиоданных
5.2. Обнаружение объектов с помощью переноса обучения для сверточной сети
5.2.1. Задача обнаружения простых объектов на синтезированных изображениях
5.2.2. Углубляемся в обнаружение простых объектов
Упражнения
Резюме
Часть III. Продвинутые возможности глубокого обучения с TensorFlow.js
Глава 6. Работа с данными
6.1. Работа с данными с помощью пространства имен tf.data
6.1.1. Объект tf.data.Dataset
6.1.2. Создание объекта tf.data.Dataset
6.1.3. Доступ к данным в объекте Dataset
6.1.4. Операции над наборами данных модуля tfjs-data
6.2. Обучение моделей с помощью model.fitDataset
6.3. Распространенные паттерны доступа к данным
6.3.1. Работаем с форматом данных CSV
6.3.2. Доступ к видеоданным с помощью метода tf.data.webcam()
6.3.3. Доступ к аудиоданным с помощью API tf.data.microphone()
6.4. Вероятно, данные не без изъяна: обработка проблемных данных
6.4.1. Теория данных
6.4.2. Обнаружение и исправление проблем с данными
6.5. Дополнение данных
Упражнения
Резюме
Глава 7. Визуализация данных и моделей
7.1. Визуализация данных
7.1.1. Визуализация данных с помощью tfjs-vis
7.1.2. Комплексный практический пример: визуализация метеорологических данных с помощью tfjs-vis
7.2. Визуализация моделей после обучения
7.2.1. Визуализация внутренних функций активации сверточной сети
7.2.2. Визуализируем именно то, к чему чувствительны сверточные слои: наиболее активирующие изображения
7.2.3. Визуальная интерпретация результата классификации изображения сверточной сетью
Материалы для дальнейшего чтения и изучения
Упражнения
Резюме
Глава 8. Недообучение, переобучение и универсальный технологический процесс машинного обучения
8.1. Постановка задачи предсказания температуры
8.2. Недообучение, переобучение и меры противодействия им
8.2.1. Недообучение
8.2.2. Переобучение
8.2.3. Сокращаем переобучение за счет регуляризации весов и визуализируем эффект от нее
8.3. Универсальный технологический процесс машинного обучения
Упражнения
Резюме
Глава 9. Глубокое обучение для последовательностей и текста
9.1. Вторая попытка прогноза погоды: знакомство с RNN
9.1.1. Почему плотные слои не способны моделировать упорядоченность
9.1.2. Моделирование последовательного упорядочения с помощью RNN
9.2. Создание моделей глубокого обучения для обработки текста
9.2.1. Представление текста в машинном обучении: унитарное и федеративное кодирование
9.2.2. Первая попытка анализа тональностей
9.2.3. Более эффективное представление текста — вложения слов
9.2.4. Одномерные сверточные сети
9.3. Решение задач преобразования последовательностей в последовательности с помощью механизма внимания
9.3.1. Постановка задачи преобразования последовательности в последовательность
9.3.2. Архитектура «кодировщик — декодировщик» и механизм внимания
9.3.3. Заглянем глубже в модель «кодировщик-декодировщик», основанную на механизме внимания
Материалы для дальнейшего изучения
Упражнения
Резюме
Глава 10. Генеративное глубокое обучение
10.1. Генерация текста с помощью LSTM
10.1.1. Предсказание следующего символа: простой способ генерации текста
10.1.2. Пример LSTM-text-generation
10.1.3. Температура: настройка степени стохастичности генерируемого текста
10.2. Вариационные автокодировщики: поиск экономичного структурированного векторного представления изображений
10.2.1. Классический автокодировщик и VAE: основные понятия
10.2.2. Подробный пример VAE: пример Fashion-MNIST
10.3. Генерация изображений с помощью GAN
10.3.1. Основная идея GAN
10.3.2. «Кирпичики» GAN
10.3.3. Детальнее исследуем обучение ACGAN
10.3.4. Обучение ACGAN для набора данных MNIST и генерация изображений в действии
Материалы для дальнейшего изучения
Упражнения
Резюме
Глава 11. Основы глубокого обучения с подкреплением
11.1. Постановка задач обучения с подкреплением
11.2. Сети стратегий и градиентный спуск по стратегиям: пример cart-pole
11.2.1. Удержание шеста в равновесии в тележке как задача обучения с подкреплением
11.2.2. Сети стратегий
11.2.3. Обучение сети стратегий: алгоритм REINFORCE
11.3. Оценочные сети и Q-обучение: пример игры «Змейка»
11.3.1. «Змейка» как задача обучения с подкреплением
11.3.2. Марковский процесс принятия решений и Q-значения
11.3.3. Глубокая Q-сеть
11.3.4. Обучение глубокой Q-сети
Материалы для дальнейшего изучения
Упражнения
Резюме
Часть IV. Резюме и заключительное слово
Глава 12. Тестирование, оптимизация и развертывание моделей
12.1. Тестирование моделей TensorFlow.js
12.1.1. Традиционное модульное тестирование
12.1.2. Тестирование с помощью «золотых значений»
12.1.3. Соображения по поводу непрерывного обучения
12.2. Оптимизация модели
12.2.1. Оптимизация размера модели посредством квантования весовых коэффициентов модели после обучения
12.2.2. Оптимизация скорости выполнения вывода с помощью преобразования GraphModel
12.3. Развертывание моделей TensorFlow.js на различных платформах и в различных средах
12.3.1. Дополнительные нюансы развертывания на веб-платформе
12.3.2. Развертывание в облачных сервисах
12.3.3. Развертывание в среде браузерного расширения, например, Chrome Extension
12.3.4. Развертывание моделей TensorFlow.js в мобильных JavaScript-приложениях
12.3.5. Развертывание моделей TensorFlow.js в межплатформенных приложениях для настольных компьютеров на JavaScript
12.3.6. Развертывание моделей TensorFlow.js в WeChat и прочих системах плагинов мобильных приложений на основе JavaScript
12.3.7. Развертывание моделей TensorFlow.js на одноплатных компьютерах
12.3.8. Краткая сводка вариантов развертывания
Материалы для дальнейшего изучения
Упражнения
Резюме
Глава 13. Резюме, заключительные слова и дальнейшие источники информации
13.1. Обзор ключевых понятий
13.1.1. Различные подходы к ИИ
13.1.2. Почему глубокое обучение выделяется из всех прочих подобластей машинного обучения
13.1.3. Общая картина глубокого обучения
13.1.4. Ключевые технологии, благодаря которым возможно глубокое обучение
13.1.5. Сферы применения и возможности, открываемые благодаря глубокому обучению на JavaScript
13.2. Краткий обзор технологического процесса глубокого обучения и алгоритмов в TensorFlow.js
13.2.1. Универсальный технологический процесс машинного обучения с учителем
13.2.2. Типы моделей и слоев в TensorFlow.js: краткий справочник
13.2.3. Использование предобученных моделей в TensorFlow.js
13.2.4. Спектр возможностей
13.2.5. Ограничения глубокого обучения
13.3. Современные тенденции глубокого обучения
13.4. Рекомендации по дальнейшему изучению
13.4.1. Отрабатывайте навыки решения реальных задач на Kaggle
13.4.2. Читайте о последних новинках на arXiv
13.4.3. Исследование экосистемы TensorFlow.js
Заключительные слова
Приложения
Приложение А. Установка библиотеки tfjs-node-gpu и ее зависимостей
A.1. Установка tfjs-node-gpu в Linux
A.2. Установка tfjs-node-gpu в Windows
Приложение Б. Краткое руководство по тензорам и операциям над ними в TensorFlow.js
Б.1. Создание тензоров и соглашения про их оси координат
Б.1.1. Скаляры (тензоры ранга 0)
Б.1.2. tensor1d (тензоры ранга 1)
Б.1.3. tensor2d (тензоры ранга 2)
Б.1.4. Тензоры ранга 3 и более высоких рангов
Б.1.5. Понятие батчей данных
Б.1.6. Примеры тензоров из практики
Б.1.7. Создание тензоров из тензорных буферов
Б.1.8. Создание тензоров, содержащих одних нули и одни единицы
Б.1.9. Создание тензоров со случайными значениями
Б.2. Основные операции над тензорами
Б.2.1. Унарные операции
Б.2.2. Бинарные операции
Б.2.3 Конкатенация и срезы тензоров
Б.3. Управление памятью в TensorFlow.js: tf.dispose() и tf.tidy()
Б.4. Вычисление градиентов
Упражнения