Грокаем глубокое обучение - Эндрю Траск - E-Book

Грокаем глубокое обучение E-Book

Эндрю Траск

0,0

Beschreibung

Глубокое обучение — это раздел искусственного интеллекта, цель которого научить компьютеры обучаться с помощью нейронных сетей — технологии, созданной по образу и подобию человеческого мозга. Онлайн-переводчики, беспилотные автомобили, рекомендации по выбору товаров именно для вас и виртуальные голосовые помощники — вот лишь несколько достижений, которые стали возможны, благодаря глубокому обучению. «Грокаем глубокое обучение» научит конструировать нейронные сети с нуля! Эндрю Траск знакомит со всеми деталями и тонкостями этой нелегкой задачи. Python и библиотека NumPy способны научить ваши нейронные сети видеть и распознавать изображения, переводить любые тексты на все языки мира и даже писать не хуже Шекспира! Что вы найдете внутри книги : - Теоретические основы глубокого обучения - Приемы создания и обучения нейронных сетей - Работа с естественным языком - Федеративное обучение и работа с конфиденциальными данными Вам не понадобятся специальные навыки, выходящие за рамки школьного курса математики и базовых навыков программирования.

Sie lesen das E-Book in den Legimi-Apps auf:

Android
iOS
von Legimi
zertifizierten E-Readern
Kindle™-E-Readern
(für ausgewählte Pakete)

Seitenzahl: 326

Veröffentlichungsjahr: 2024

Das E-Book (TTS) können Sie hören im Abo „Legimi Premium” in Legimi-Apps auf:

Android
iOS
Bewertungen
0,0
0
0
0
0
0
Mehr Informationen
Mehr Informationen
Legimi prüft nicht, ob Rezensionen von Nutzern stammen, die den betreffenden Titel tatsächlich gekauft oder gelesen/gehört haben. Wir entfernen aber gefälschte Rezensionen.



Эндрю Траск
Грокаем глубокое обучение

Переводчик А. Макарова

Технический редактор О. Букатка

Литературный редактор А. Бульченко

Художники Л. Егорова, А. Руденко

Корректоры С. Беляева, М. Молчанова (Котова)

Верстка Л. Егорова

Эндрю Траск

Грокаем глубокое обучение. — СПб.: Питер, 2021.

ISBN 978-5-4461-1334-7

© ООО Издательство "Питер", 2021

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

Оглавление

Предисловие
Благодарности
О книге
Кому адресована книга
Структура
Соглашения об оформлении кода и его загрузке
Форум книги
Об авторе
От издательства
1. Введение в глубокое обучение: зачем его изучать
Добро пожаловать в «Грокаем глубокое обучение»!
Почему вам стоит изучать глубокое обучение
Этому трудно учиться?
Почему вы должны прочитать эту книгу
Что нужно для начала
Возможно, вам потребуется знание Python
Итоги
2. Основные понятия: как учатся машины?
Что такое глубокое обучение?
Что такое машинное обучение?
Машинное обучение с учителем
Машинное обучение без учителя
Параметрическое и непараметрическое обучение
Параметрическое обучение с учителем
Параметрическое обучение без учителя
Непараметрическое обучение
Итоги
3. Введение в нейронное прогнозирование: прямое распространение
Шаг 1: прогнозирование
Простая нейронная сеть, делающая прогноз
Что такое нейронная сеть?
Что делает эта нейронная сеть?
Прогнозирование с несколькими входами
Несколько входов: что делает эта нейронная сеть?
Несколько входов: полный выполняемый код
Прогнозирование с несколькими выходами
Прогнозирование с несколькими входами и выходами
Несколько входов и выходов: как это работает?
Прогнозирование на основе прогнозов
Короткий пример использования NumPy
Итоги
4. Введение в нейронное обучение: градиентный спуск
Предсказание, сравнение и обучение
Сравнение
Обучение
Сравнение: способны ли нейронные сети делать точные прогнозы?
Зачем измерять ошибку?
Как выглядит простейшая форма нейронного обучения?
Обучение методом «холодно/горячо»
Особенности обучения методом «холодно/горячо»
Вычисление направления и величины из ошибки
Одна итерация градиентного спуска
Обучение просто уменьшает ошибку
Рассмотрим несколько циклов обучения
Как это работает? Что такое weight_delta на самом деле?
Узкий взгляд на одно понятие
Коробка со стержнями
Производные: второй пример
Что действительно необходимо знать
Что знать необязательно
Как использовать производные для обучения
Выглядит знакомо?
Ломаем градиентный спуск
Визуальное представление избыточной коррекции
Расхождение
Знакомьтесь: альфа-коэффициент
Альфа-коэффициент в коде
Запоминание
5. Корректировка сразу нескольких весов: обобщение градиентного спуска
Обучение методом градиентного спуска с несколькими входами
Градиентный спуск с несколькими входами, описание
Рассмотрим несколько шагов обучения
Замораживание одного веса: для чего?
Обучение методом градиентного спуска с несколькими выходами
Обучение методом градиентного спуска с несколькими входами и выходами
Чему обучаются эти веса?
Визуализация значений весов
Визуализация скалярных произведений (сумм весов)
Итоги
6. Создание первой глубокой нейронной сети: введение в обратное распространение
Задача о светофоре
Подготовка данных
Матрицы и матричные отношения
Создание матриц в Python
Создание нейронной сети
Обучение на полном наборе данных
Полный, пакетный и стохастический градиентный спуск
Нейронные сети изучают корреляцию
Повышающее и понижающее давление
Пограничный случай: переобучение
Пограничный случай: конфликт давлений
Определение косвенной корреляции
Создание корреляции
Объединение нейронных сетей в стек: обзор
Обратное распространение: определение причин ошибок на расстоянии
Обратное распространение: как это работает?
Линейность и нелинейность
Почему составная нейронная сеть не работает
Тайна эпизодической корреляции
Короткий перерыв
Ваша первая глубокая нейронная сеть
Обратное распространение в коде
Одна итерация обратного распространения
Объединяем все вместе
Почему глубокие сети важны для нас?
7. Как изобразить нейронную сеть: в голове и на бумаге
Время упрощать
Обобщение корреляции
Прежняя усложненная визуализация
Упрощенная визуализация
Еще более упрощенная визуализация
Посмотрим, как эта сеть получает прогноз
Визуализация с использованием букв вместо картинок
Связывание переменных
Сравнение разных способов визуализации
Важность инструментов визуализации
8. Усиление сигнала и игнорирование шума: введение в регуляризацию и группировку
Трехслойная сеть для классификации набора данных MNIST
Это было просто
Запоминание и обобщение
Переобучение нейронных сетей
Причины переобучения
Простейшая регуляризация: ранняя остановка
Стандартный способ регуляризации: прореживание (дропаут)
Как работает прореживание: в работе участвуют ансамбли
Прореживание в коде
Влияние прореживания на модель MNIST
Пакетный градиентный спуск
Итоги
9. Моделирование случайности и нелинейности: функции активации
Что такое функция активации?
Стандартные функции активации для скрытых слоев
Стандартные функции активации для выходного слоя
Главная проблема: входные данные могут быть схожи между собой
Вычисление softmax
Инструкции по внедрению функций активации
Умножение разности на производную
Преобразование выхода в наклон (производную)
Усовершенствование сети MNIST
10. Края и углы нейронного обучения: введение в сверточные нейронные сети
Повторное использование весов в нескольких местах
Сверточный слой
Простая реализация в NumPy
Итоги
12. Нейронные сети, которые пишут как Шекспир: рекуррентные слои для данных переменной длины
Проблема произвольной длины
Действительно ли сравнение имеет значение?
Удивительная мощь усредненных векторов слов
Как векторные представления хранят информацию?
Как нейронная сеть использует векторные представления?
Ограничение векторов в модели «мешок слов»
Объединение векторных представлений слов с использованием единичной матрицы
Матрицы, которые ничего не меняют
Определение переходных матриц
Обучение созданию векторов предложений
Прямое распространение на Python
Как добавить сюда обратное распространение?
Обучим ее!
Подготовка
Прямое распространение с данными произвольной длины
Обратное распространение с данными произвольной длины
Корректировка весов с данными произвольной длины
Запуск и анализ результатов
Итоги
13. Введение в автоматическую оптимизацию: создание фреймворка глубокого обучения
Что такое фреймворк глубокого обучения?
Введение в тензоры
Введение в автоматическое вычисление градиента (autograd)
Контрольная точка
Тензоры, используемые многократно
Добавление поддержки тензоров многократного использования в реализацию autograd
Как работает сложение в обратном распространении?
Добавление поддержки отрицания
Добавление поддержки других операций
Использование autograd в обучении нейронной сети
Добавление автоматической оптимизации
Добавление поддержки слоев разных типов
Слои, содержащие другие слои
Слои с функцией потерь
Как научиться пользоваться фреймворком
Нелинейные слои
Слой с векторным представлением
Добавление индексирования в autograd
Слой с векторным представлением (повтор)
Слой с перекрестной энтропией
Рекуррентный слой
Итоги
14. Обучаем сеть писать как Шекспир: долгая краткосрочная память
Моделирование языка символов
Необходимо усеченное обратное распространение
Усеченное обратное распространение
Образец вывода
Затухающие и взрывные градиенты
Упрощенный пример обратного распространения в RNN
Ячейки долгой краткосрочной памяти (LSTM)
Аналогия, помогающая понять идею вентилей LSTM
Слой долгой краткосрочной памяти
Усовершенствование модели языка символов
Обучение LSTM-модели языка символов
Настройка LSTM-модели языка символов
Итоги
15. Глубокое обучение на конфиденциальных данных: введение в федеративное обучение
Проблема конфиденциальности в глубоком обучении
Федеративное обучение
Обучаем выявлять спам
Сделаем модель федеративной
Взламываем федеративную модель
Безопасное агрегирование
Гомоморфное шифрование
Федеративное обучение с гомоморфным шифрованием
Итоги
16. Куда пойти дальше: краткий путеводитель
Поздравляю!
Шаг 1: начните изучать PyTorch
Шаг 2: начните изучать следующий курс по глубокому обучению
Шаг 3: купите книгу по математике глубокого обучения
Шаг 4: заведите блог и рассказывайте в нем о глубоком обучении
Шаг 5: Twitter
Шаг 6: напишите руководство на основе академической статьи
Шаг 7: получите доступ к GPU
Шаг 8: найдите оплачиваемую работу, связанную с глубоким обучением
Шаг 9: присоединитесь к открытому проекту
Шаг 10: ищите единомышленников

Моей маме. Ты вложила так много сил и времени, чтобы дать хорошее образование нам с Тарой. И я надеюсь, в этой книге ты увидишь и свой вклад.

И папе. Спасибо, что любишь нас так сильно и нашел время, чтобы обучить меня программированию и технологиям в еще очень юном возрасте. Я бы не добился этого без тебя.

Для меня честь быть вашим сыном.

Предисловие

«Грокаем глубокое обучение» — это результат трехлетнего напряженного труда. Чтобы создать книгу, которую вы держите в руках, мне пришлось написать вдвое больше страниц, чем вы видите. Полдесятка глав три или четыре раза были переписаны заново, и только после этого я решил, что они готовы к публикации. Кроме этого, попутно были добавлены новые важные главы, отсутствовавшие в изначальном плане.

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

Работая над «Грокаем глубокое обучение», я преследовал цель максимально уменьшить порог входа в практику глубокого обучения. Вы не просто прочитаете теорию — вы откроете ее заново. А чтобы помочь вам в этом, я написал много кода и постарался выстроить объяснения в правильном порядке, чтобы фрагменты кода, необходимые для демонстрации, не были лишены смысла.

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

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

Есть много источников знаний о глубоком обучении. И я рад, что вы выбрали именно этот.

Благодарности

Я чрезвычайно благодарен всем, кто принял участие в работе над книгой. Прежде всего я хочу поблагодарить удивительную команду издательства Manning: Берта Бейтса (Bert Bates), научившего меня писать; Кристину Тейлор (Christina Taylor), терпеливо поддерживавшую меня в течение трех лет; Майкла Стивенса (Michael Stephens), чье творческое мышление позволило книге стать успешной еще до публикации; Марьяна Бейса (Marjan Bace), чья поддержка была определяющей во время задержек.

«Грокаем глубокое обучение» не получилась бы такой, какой получилась, без значительного вклада первых ее читателей, присылавших отзывы по электронной почте, в Twitter и GitHub. Я очень признателен Яше Суишеру (Jascha Swisher), Варуну Судхакару (Varun Sudhakar), Франсуа Шолле (Francois Chollet), Фредерику Виторино (Frederico Vitorino), Коди Хаммонду (Cody Hammond), Маурисио Марото Арриете (Mauricio Maroto Arrieta), Александару Драгосавлевичу (Aleksandar Dragosavljevic), Алану Картеру (Alan Carter), Френку Хинеку (Frank Hinek), Николасу Бенджамину Хокеру (Nicolas Benjamin Hocker), Хенку Мейссе (Hank Meisse), Уотеру Хибме (Wouter Hibma), Йоргу Розенкранцу (Joerg Rosenkranz), Алексу Виейре (Alex Vieira) и Чарли Харрингтону (Charlie Harrington) за их помощь в улучшении текста и кода в онлайн-репозитории.

Хочу также поблагодарить рецензентов, выкроивших время, чтобы прочитать рукопись на разных этапах работы: Александра А. Мыльцева (Alexander A. Myltsev), Амита Ламба (Amit Lamba), Ананда Саха (Anand Saha), Эндрю Хамора (Andrew Hamor), Кристиана Барриентоса (Cristian Barrientos), Монтойя (Montoya), Еремея Валетова (Eremey Valetov), Джеральда Мака (Gerald Mack), Яна Стирка (Ian Stirk), Каляна Редди (Kalyan Reddy), Камаля Раджа (Kamal Raj), Кельвина Д. Микса (Kelvin D. Meeks), Марко Пауло душ Сантуш Ногейра (Marco Paulo dos Santos Nogueira), Мартина Бира (Martin Beer), Массимо Иларио (Massimo Ilario), Ненси У. Греди (Nancy W. Grady), Питера Хемптона (Peter Hampton), Себастьяна Мальдонада (Sebastian Maldonado), Шашанка Гупту (Shashank Gupta), Тимотеуша Воложко (Tymoteusz Wolodzko), Кумара Унникришнана (Kumar Unnikrishnan), Випула Гупту (Vipul Gupta), Уилла Фугера (Will Fuger) и Уильяма Уилера (William Wheeler).

Я чрезвычайно благодарен Мэту (Mat) и Нико (Niko) из Udacity, которые включили книгу в свой курс обучения Deep Learning Nanodegree, что очень помогло популяризации книги среди молодых специалистов по глубокому обучению.

Я должен поблагодарить доктора Уильяма Хупера (Dr. William Hooper), позволившего мне зайти в его кабинет и поспорить по вопросам информатики, сделавшего исключение и давшего мне возможность попасть на его курс (где уже не было мест) по программированию и вдохновившего меня на карьеру в области глубокого обучения. Я чрезвычайно благодарен за терпение, проявленное ко мне с самого начала. Вы были безмерно щедры ко мне.

Наконец, я хочу сказать спасибо моей жене за то, что терпела, когда я ночи напролет работал над книгой. Спасибо, что много раз исправляла ошибки в тексте, а также создавала и настраивала репозиторий кода на GitHub.

О книге

Книга «Грокаем глубокое обучение» закладывает фундамент для дальнейшего овладения технологией глубокого обучения. Она начинается с описания основ нейронных сетей и затем подробно рассматривает дополнительные уровни и архитектуры.

Кому адресована книга

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

Структура

Книга состоит из 16 глав:

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

• Глава 2 начинает погружение в основные понятия, такие как машинное обучение, параметрические и непараметрические модели и обучение с учителем и без учителя. Она также знакомит с парадигмой «предсказание, сравнение, обучение», рассмотрение которой будет продолжено в следующих главах.

• Глава 3 показывает примеры использования простых сетей для предсказания, а также впервые знакомит с нейронными сетями.

• Глава 4 научит оценивать прогнозы, сделанные в главе 3, и выявлять ошибки, что позволит продолжить обучение моделям на следующем этапе.

• Глава 5 акцентирует внимание на части «обучение» в парадигме «предсказание, сравнение, обучение». Эта глава рассматривает процесс обучения на более обширном примере.

• В главе 6 вы создадите свою первую «глубокую» нейронную сеть, напишете код и сделаете все остальное.

• Глава 7 содержит общий обзор нейронных сетей, что поможет вам сформировать свое представление.

• Глава 8 познакомит вас с такими понятиями, как переобучение, регуляризация и пакетный градиентный спуск, а также научит, как классифицировать набор своих данных в новой, только что созданной сети.

• Глава 9 расскажет о функциях активации и как их использовать при моделировании вероятностей.

• Глава 10 знакомит со сверточными нейронными сетями, акцентируя внимание на приемах для предотвращения переобучения.

• Глава 11 посвящена обработке естественного языка (natural language processing, NLP) и определяет базовый словарь и понятия в области глубокого обучения.

• Глава 12 рассматривает рекуррентные нейронные сети, современный метод глубокого обучения, используемый почти во всех областях моделирования последовательностей, один из самых популярных инструментов в отрасли.

• Глава 13 кратко рассказывает, как создать свой фреймворк глубокого обу­чения с нуля и стать опытным пользователем таких фреймворков.

• В главе 14 вы используете свою рекуррентную нейронную сеть для решения более сложной задачи: моделирования текста на естественном языке.

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

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

Соглашения об оформлении кода и его загрузке

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

Код примеров в книге можно загрузить с сайта издательства: www.manning.com/books/grokking-deep-learning или из репозитория GitHub: https://github.com/iamtrask/grokking-deep-learning.

Форум книги

Приобретая книгу «Грокаем глубокое обучение», вы получаете бесплатный доступ на частный веб-форум на английском языке издательства Manning Publications, где сможете оставлять отзывы о книге, задавать вопросы и получать помощь от авторов и других пользователей. Чтобы получить доступ к форуму и зарегистрироваться на нем, откройте в браузере страницу https://forums.manning.com/forums/grokking-deep-learning. Кроме того, на странице https://forums.manning.com/forums/about вы можете узнать больше подробностей о форумах Manning и правилах поведения на них.

Издательство Manning обязуется предоставить своим читателям место встречи, где может состояться содержательный диалог между отдельными читателями и между читателями и автором. Но со стороны автора отсутствуют какие-либо обязательства уделять форуму какое-то определенное внимание — его присутствие на форуме остается добровольным (и неоплачиваемым). Мы предлагаем задавать автору стимулирующие вопросы, чтобы его интерес не угасал! Форум и архивы предыдущих дискуссий будут оставаться доступными, пока книга продолжает издаваться.

Об авторе

Эндрю Траск (Andrew Trask) — один из основателей лаборатории машинного обучения в Digital Reasoning, где изучаются методы глубокого обучения и их применение к обработке естественного языка, распознаванию образов и преобразованию речи в текст. В течение нескольких месяцев Эндрю и его коллегам удалось превзойти лучшие опубликованные результаты в области классификации эмоциональной окраски и маркировки частей речи. Он обучил крупнейшую нейронную сеть более чем со 160 миллиардами параметров и вместе со своим соавтором представил результаты на международной конференции по машинному обучению. Эти результаты были опубликованы в журнале Journal of Machine Learning. В настоящее время Эндрю руководит направлением анализа текста и речи в Digital Reasoning и отвечает за разработку планов анализа для платформы когнитивных вычислений Synthesys, в которой глубокое обучение является ключевой основой.

От издательства

Ваши замечания, предложения, вопросы отправляйте по адресу [email protected] (издательство «Питер», компьютерная редакция).

Мы будем рады узнать ваше мнение!

На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.

1. Введение в глубокое обучение: зачем его изучать

В этой главе

• Почему вам стоит изучать глубокое обучение.

• Почему вы должны прочитать эту книгу.

• Что потребуется для начала.

Не беспокойтесь о ваших сложностях с математикой. Могу вас заверить, что мои сложности куда больше.

Альберт Эйнштейн

Добро пожаловать в «Грокаем глубокое обучение»!

Вы приступаете к овладению одним из самых ценных навыков века!

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

Почему вам стоит изучать глубокое обучение

Это мощный инструмент для постепенной автоматизации интеллектуальных задач

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

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

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

У глубокого обучения хороший потенциал для автоматизации умственного труда

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

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

Это весело и интересно. Пытаясь сымитировать творчество и интеллект, вы многое узнаете о том, что значит быть человеком

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

Этому трудно учиться?

Насколько усердно придется поработать, прежде чем наступит «весело и интересно»?

Это мой любимый вопрос. В моем понимании «весело и интересно» — это опыт переживания чего-то, чему я научился. Есть что-то удивительное, когда видишь, как твое творение делает что-то необычное. Если вам знакомо это чувство, тогда ответ прост. На нескольких страницах в главе 3 вы создадите свою первую нейронную сеть. Единственное, над чем вам придется потрудиться, — прочитать страницы, отделяющие вас от этого.

Следующий забавный этап после главы 3, если вам интересно узнать, наступит в главе 4, когда вы после знакомства с небольшим фрагментом кода доберетесь до середины главы. Примерно так построены все главы: знакомство с небольшим фрагментом кода в предыдущей главе, чтение следующей главы и новый всплеск интереса от знакомства с новой нейронной сетью.

Почему вы должны прочитать эту книгу

Устанавливает очень низкий порог входа

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

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

Итак, почему вы должны изучать глубокое обучение с помощью этой книги? Я предполагаю, что у вас за плечами лишь школьный курс математики (и кое-что уже позабылось), и собираюсь объяснять все остальное по ходу дела. Помните таблицу умножения? Помните графики с системой координат x/y (такие квадраты с линиями на них)? Отлично! Вам этого будет достаточно.

Помогает понять, что находится внутри фреймворка (Torch, TensorFlow и других)

Есть две разновидности учебных материалов по глубокому обучению (книги или курсы). В материалах из одной группы рассказывается, как использовать популярные фреймворки и библиотеки, такие как Torch, TensorFlow, Keras и другие. А материалы из другой группы описывают собственно принципы глубокого обучения, то есть теорию, на которой эти фреймворки основываются.

Важно знать и то и другое. Если бы вы захотели стать пилотом NASCAR, то вам было бы нужно знать не только конкретную модель болида со всеми ее тонкостями (фреймворк), но и уметь управлять им (теория/навыки). Простое изучение фреймворков напоминает изучение достоинств и недостатков Chevrolet SS шестого поколения до знакомства с рычагом переключения передач. Эта книга познакомит вас с глубоким обучением и подготовит к изучению фреймворков.

Все связанное с математикой будет подкрепляться простыми и понятными аналогиями

Всякий раз, встречаясь с математической формулой в дикой природе, я использую двухэтапный подход. Сначала подбираю понятную аналогию из реального мира. Я почти никогда не принимаю формулы на веру и всегда разбиваю их на части, каждую со своей историей. Этот же подход я использовал и здесь. Каждый раз, подходя к какому-то математическому понятию, я буду предлагать аналогию тому, что фактически делает формула.

Все должно быть простым, насколько возможно, но не проще.

Приписывается Альберту Эйнштейну

Все после вступительных глав основано на понятии проекта

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

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

Что нужно для начала

Установите Jupyter Notebook и библиотеку NumPy для Python

Моим самым любимым рабочим инструментом является Jupyter Notebook. Я считаю, что при освоении глубокого обучения очень важно иметь возможность остановить процесс обучения сети и разобрать ее на составные части, чтобы увидеть, как она устроена. А для этого нет удобнее инструмента, чем Jupyter Notebook.

Ничто не скроется от нашего внимания, так как в книге используется единственная библиотека — библиотека матричных вычислений NumPy. Благодаря такому подходу вы узнаете саму суть глубокого обучения, а не только список функций фреймворка и порядок их вызова. Эта книга рассказывает о глубоком обучении всё: от начала и до конца.

Инструкции по установке этих инструментов можно найти по адресам: http://jupyter.org (для Jupyter) и http://numpy.org (для NumPy). Все примеры я создавал в Python 2.7, но также проверил их в Python 3. Чтобы Reddy упростить установку, рекомендую использовать фреймворк Anaconda: https://docs.continuum.io/anaconda/install.

Повторите школьный курс математики

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

Найдите задачу, которая интересна лично вам

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

Моей задачей было использование Twitter для предсказания котировок на фондовой бирже. Я просто посчитал такую задачу увлекательной. Именно она заставила меня сесть, прочитать следующую главу и создать прототип.

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

Возможно, вам потребуется знание Python

Python — мой любимый язык для обучения, но я покажу примеры на некоторых других интерактивных языках

Python — удивительно простой и понятный язык. Более того, я считаю его самым популярным и понятным из всех языков, созданных когда-либо. Сообщество пользователей Python испытывает неодолимую страсть к простоте. По этим причинам я написал все примеры на Python (точнее на Python 2.7). В исходном коде примеров, доступном для загрузки на сайте издательства www.manning.com/books/grokking-deep-learning, а также в репозитории на GitHub https://github.com/iamtrask/Grokking-Deep-Learning, я представлю примеры на некоторых других интерактивных языках.

Насколько большой опыт программирования требуется?

Загляните на страницу курса Python Codecademy (www.codecademy.com/learn/python). Если вы прочитали оглавление и все упомянутые там термины вам знакомы, значит, всё в порядке! Если нет, то пройдите курс до конца и возвращайтесь к книге, когда закончите. Он ориентирован на начинающих и очень хорошо продуман.

Итоги

Если вы установили Jupyter Notebook и знакомы с основами программирования на Python, тогда вы готовы перейти к следующей главе. Глава 2 — это последняя глава в этой книге, где мы с вами будем просто беседовать, ничего не создавая. Ее цель — познакомить вас с терминологией и с базовыми понятиями в области искусственного интеллекта, машинного обучения и, самое главное, глубокого обучения.