автордың кітабын онлайн тегін оқу PyTorch. Освещая глубокое обучение
Переводчик И. Пальти, С Черников
Эли Стивенс, Лука Антига, Томас Виман
PyTorch. Освещая глубокое обучение. — СПб.: Питер, 2022.
ISBN 978-5-4461-1945-5
© ООО Издательство "Питер", 2022
Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав.
Моей жене (эта книга не появилась бы без ее бесценной поддержки и участия), моим родителям (без них на свет не появился бы я) и моим детям (если бы не они, эта книга появилась бы намного раньше).
Спасибо вам за то, что вы — моя крепость, мой фундамент и моя радость.
Эли Стивенс (Eli Stevens)
Аналогично :) Впрочем, на самом деле посвящаю ее вам, Элис и Луиджи.
Лука Антига (Luca Antiga)
Еве, Ребекке, Джонатану и Давиду.
Томас Виман (Thomas Viehmann)
Предисловие
На момент начала работы над проектом PyTorch в середине 2016 года мы были просто группой фанатов программного обеспечения с открытым исходным кодом, которые встретились в интернете и захотели написать лучшее программное обеспечение для глубокого обучения. Двое из трех авторов этой книги, Лука Антига и Томас Виман, сыграли важную роль в разработке фреймворка PyTorch и достижении им того успеха, который он имеет сегодня.
Наша цель с PyTorch заключалась в создании как можно более гибкого фреймворка для реализации алгоритмов глубокого обучения. Мы работали очень сосредоточенно и за относительно короткий промежуток времени подготовили безупречный продукт. Это было бы невозможно, если бы мы не стояли на «плечах» гигантов. PyTorch унаследовал немалую долю своей базы кода из проекта Torch7, начатого в 2007 году Ронаном Колобером (Ronan Collobert) и другими, — истоки этого проекта лежат в языке программирования Lush, начало которому положили Ян Ле Кун (Yann Le Cun) и Леон Ботту (Leon Bottou). Эта богатая история помогла нам сосредоточить свое внимание на необходимых изменениях, вместо того чтобы начинать проектирование с нуля.
Успех PyTorch трудно объяснить каким-то одним фактором. Этот проект обладает удобным интерфейсом и улучшенными возможностями для отладки, что в конечном итоге обеспечивает более высокую продуктивность у пользователей. Широкое распространение PyTorch привело к созданию чудесной экосистемы основанного на нем программного обеспечения и исследований, которая еще больше обогатила этот фреймворк.
Для упрощения изучения PyTorch существует несколько курсов и университетских учебных программ, а также множество онлайн-блогов и руководств. Однако книг ему посвящено очень мало. В 2017 году, когда кто-то спросил меня: «Когда появится книга по PyTorch?» — я ответил: «Если кто-то сейчас такую и пишет, можете быть уверены, что к моменту выхода в свет она уже будет устаревшей».
С книгой «PyTorch. Освещая глубокое обучение» наконец-то появился полноценный учебный курс по PyTorch. В нем очень подробно рассматриваются базовые понятия и абстракции, разбираются основы структур данных, таких как тензоры и нейронные сети, и дается понимание всех нюансов реализации. Кроме того, здесь охвачены такие продвинутые темы, как JIT (англ. Just-in-Time, компиляция «точно в нужное время») и развертывание для промышленной эксплуатации (один из аспектов PyTorch, который в настоящее время не освещается ни в одной другой книге).
Кроме того, в книге описаны прикладные задачи: вы пройдете через все этапы использования нейронных сетей для решения сложной и важной медицинской проблемы. Благодаря глубоким знаниям Луки в сфере биоинженерии и медицинской визуализации, опыту Эли по созданию на практике программного обеспечения для медицинских устройств и выявления заболеваний, а также багажу знаний Томаса как разработчика ядра PyTorch этот путь будет пройден так основательно, как и должно быть.
В общем и целом, я надеюсь, что эта книга станет для вас «расширенным» справочником и важной составной частью вашей библиотеки.
Сумит Чинтала (Soumith Chintala), один из создателей PyTorch
Введение
В 1980-х годах, еще детьми, делая первые шаги на наших Commodore VIC 20 (Эли), Sinclair Spectrum 48K (Лука) и Commodore C16 (Томас), мы наблюдали расцвет персональных компьютеров, учились программировать и писать алгоритмы на все более быстрых машинах и часто мечтали о том, куда приведут нас компьютеры. Мы остро ощущали пропасть между тем, что делали компьютеры в фильмах, и тем, на что они были способны в реальности, дружно закатывая глаза, когда главный герой в шпионском боевике говорил: «Компьютер, повысь качество изображения».
Позднее, уже во время профессиональной деятельности, двое из нас, Эли и Лука, независимо друг от друга занялись анализом медицинских данных и столкнулись с одинаковыми проблемами при написании алгоритмов, способных справиться с естественным разнообразием параметров человеческого тела. Существует множество эвристических правил выбора наилучшего сочетания алгоритмов, позволяющих добиться нужных результатов и спасти положение. Томас на рубеже столетий изучал нейронные сети и распознавание закономерностей, но затем получил докторскую степень по математике, занимаясь моделированием.
В начале 2010-х появилось глубокое обучение (ГО), сначала в сфере машинного зрения, а затем и применительно к задачам анализа медицинских снимков, например к распознаванию различных структур и изменений. Как раз в это время, в первой половине десятилетия, глубокое обучение заинтересовало и нас. Понадобилось немного времени, чтобы осознать, что глубокое обучение представляет собой совершенно новый способ написания программного обеспечения: новый класс универсальных алгоритмов, способных обучаться решению сложных задач на основе наблюдения данных.
Для нас, поколения 80-х, горизонты возможного для компьютеров расширились в один миг. Теперь их ограничивали не умы лучших программистов, а лишь данные, архитектуры нейронных сетей и процесс обучения. Оставалось только заняться ими. Лука выбрал для этой цели Torch 7 (http://torch.ch/), уважаемого предшественника PyTorch, гибкого, облегченного и быстрого, с удобочитаемым исходным кодом, написанным на Lua и чистом C, дружелюбным сообществом пользователей и длинной предысторией. Лука влюбился в него с первого взгляда. Единственный серьезный недостаток Torch 7 заключался в его отрыве от непрерывно растущей экосистемы исследования данных Python data science, которой могли пользоваться другие платформы. Эли интересовался ИИ еще в колледже1, но его карьера пошла в другом направлении, да и прочие, более ранние фреймворки глубокого обучения показались ему слишком неудобными, чтобы с удовольствием использовать их в любительских проектах.
Поэтому мы все очень обрадовались, когда 18 января 2017 года был опубликован первый релиз PyTorch. Лука начал работать над его ядром, а Эли очень быстро присоединился к сообществу пользователей, предлагая множество исправлений ошибок, новые функции и обновления документации. Томас внес тонну функций и исправлений ошибок в PyTorch и в итоге стал полноценным разработчиком ядра. Было ощущение, что начинается нечто громадное, как раз на нужном уровне сложности и с минимальным количеством избыточных умственных усилий. Уроки бережеливого проектирования, полученные из Torch 7, были заимствованы, но на этот раз уже с набором современных возможностей, таких как автоматическое дифференцирование, динамические графы вычислений и интеграция NumPy.
С учетом нашей вовлеченности и энтузиазма и после организации нескольких семинаров по PyTorch написание книги представлялось естественным следующим шагом. Мы ставили перед собой задачу написать такую книгу, которая могла бы помочь нам в то время, когда мы только начинали.
Ничего удивительного, что мы начали с грандиозных задач: обучить всем основам, пройти вместе с читателями по проектам от начала до конца и показать наиболее современные и удачные модели на PyTorch. Вскоре мы поняли, что для этого понадобится намного больше одной книги, так что мы решили сосредоточить внимание на изначальной задаче: посвятить время и силы тому, чтобы охватить ключевые идеи PyTorch, не требуя от читателя практически никаких предварительных знаний глубокого обучения, и дойти до уровня, на котором можно будет показать читателям полноценный комплексный проект, для которого мы вернулись к истокам и решили продемонстрировать сложную задачу анализа медицинских снимков.
1 В те времена, когда «глубокой» нейронная сеть считалась при наличии трех скрытых слоев!
В те времена, когда «глубокой» нейронная сеть считалась при наличии трех скрытых слоев!
Для нас, поколения 80-х, горизонты возможного для компьютеров расширились в один миг. Теперь их ограничивали не умы лучших программистов, а лишь данные, архитектуры нейронных сетей и процесс обучения. Оставалось только заняться ими. Лука выбрал для этой цели Torch 7 (http://torch.ch/), уважаемого предшественника PyTorch, гибкого, облегченного и быстрого, с удобочитаемым исходным кодом, написанным на Lua и чистом C, дружелюбным сообществом пользователей и длинной предысторией. Лука влюбился в него с первого взгляда. Единственный серьезный недостаток Torch 7 заключался в его отрыве от непрерывно растущей экосистемы исследования данных Python data science, которой могли пользоваться другие платформы. Эли интересовался ИИ еще в колледже1, но его карьера пошла в другом направлении, да и прочие, более ранние фреймворки глубокого обучения показались ему слишком неудобными, чтобы с удовольствием использовать их в любительских проектах.
Благодарности
Мы глубоко признательны команде PyTorch. Благодаря их общим усилиям PyTorch органично вырос из проекта уровня летней стажировки в первоклассный инструмент глубокого обучения. Мы хотели бы упомянуть Сумита Чинталу (Soumith Chintala) и Адама Пашке (Adam Paszke), которые, не говоря об их великолепном коде, активно продвигали подход «главное — сообщество пользователей» в управлении данным проектом. Нынешний уровень процветания и терпимости в сообществе PyTorch — явное свидетельство их усилий.
Что касается сообщества, PyTorch не был бы таким, если бы не неустанный труд отдельных пользователей, помогающих как начинающим, так и опытным пользователям на дискуссионном форуме. Среди всех досточтимых участников проекта следует особо отметить нашей признательностью Петра Бялецкого (Pitr Bialecki). А что касается нашей книги, особая благодарность Джо Списаку (Joe Spisak) за веру в ценность ее для сообщества, а также Джефу Смиту (Jeff Smith), выполнившему колоссальный объем работы для того, чтобы эту ценность воплотить в жизнь. Также мы очень благодарны Брюсу Лину (Bruce Lin), который помог нам отдельно подготовить часть I этого текста и обеспечить свободный доступ к ней для сообщества пользователей PyTorch.
Мы хотели бы поблагодарить команду издательства Manning, которая чутко вела нас по этому пути, всегда учитывая хрупкое равновесие между семьей, работой и написанием книги. Спасибо Эрин Туи (Erin Twohey), обратившейся к нам и спросившей, не интересует ли нас написание книги, и Майклу Стивенсу (Michael Stephens), склонившему нас к положительному ответу. Мы ведь сказали тебе, что у нас нет времени! Брайан Хэнафи (Brian Hanafee) делал намного больше, чем обязан был сделать рецензент. Артур Зубарев (Arthur Zubarev) и Костас Пассадис (Kostas Passadis) присылали ценные замечания, а Дженнифер Хоул (Jennifer Houle) сумела справиться с нашим причудливым художественным стилем. Наш выпускающий редактор Тиффани Тейлор (Tiffany Taylor) была очень внимательна к деталям, так что во всех ошибках виноваты мы и только мы. Также мы хотели бы поблагодарить нашего редактора-координатора, Дейрдре Хайэм (Deirdre Hiam), нашего корректора Кэти Теннант (Katie Tennant) и нашего редактора-рецензента Ивана Мартиновича (Ivan Martinovic). Немало людей, мелькавших только в списке скрытых копий веток обсуждения состояния книги, также работало «за кулисами», чтобы довести эту книгу до печати. Спасибо всем, кого мы еще не упомянули! Сделать эту книгу лучше помогли также анонимные рецензенты, с их непредвзятыми отзывами и замечаниями.
Наш неустанный редактор Фрэнсис Левковиц (Frances Lefkowitz) заслуживает медали и недели на тропическом острове за то, что дотянула эту книгу до финишной прямой. Спасибо тебе за всю работу и за изящество, с которым она была проделана.
Мы хотели бы также поблагодарить рецензентов, которые помогли во многом улучшить эту книгу: Александра Ерофеева (Aleksandr Erofeev), Одри Карстенсен (Audrey Carstensen), Башира Чихани (Bachir Chihani), Карлоса Андреса Маришаля (Carlos Andres Mariscal), Дэйла Нила (Dale Neal), Дэниела Береша (Daniel Berecz), Донира Улмасова (Doniyor Ulmasov), Эзру Стивенса (Ezra Stevens), Готфрида Асамоа (Godfred Asamoah), Хелен Мэри Лабао Баррамеду (Helen Mary Labao Barrameda), Хильду ван Гисель (Hilde Van Gysel), Джейсона Леонарда (Jason Leonard), Джефа Когшалла (Jeff Coggshall), Костаса Пассадиса (Kostas Passadis), Линси Нил (Linnsey Nil), Мэтью Чжана (Mathieu Zhang), Майкла Константа (Michael Constant), Мигеля Монталво (Miguel Montalvo), Орландо Алехо Мендеса Моралеса (Orlando Alejo Mendez Morales), Филиппе ван Бергена (Philippe Van Bergen), Риз Стивенс (Reece Stevens), Шриниваса К. Рамана (Srinivas K. Raman) и Ючжана Шрестху (Yujan Shrestha).
Всем нашим друзьям и родственникам, недоумевавшим, что мы скрываем эти два года: «Привет! Мы соскучились по вам! Давайте как-нибудь сходим в ресторан».
Об этой книге
Цель книги — изложить основы глубокого обучения с помощью PyTorch и продемонстрировать их в действии на реальном примере. Мы постарались охватить ключевые идеи глубокого обучения и показать, как PyTorch помогает применять их на практике. В этой книге мы сделали все, чтобы вдохновить вас на дальнейшие исследования, для чего избирательно углублялись в подробности, объясняя, что происходит «за кулисами».
«PyTorch. Освещая глубокое обучение» не стремится к званию справочного руководства, скорее, это схематичный путеводитель, открывающий дорогу к самостоятельному изучению более продвинутых материалов в интернете. Поэтому мы сосредоточились на определенном подмножестве возможностей PyTorch. Наиболее заметно отсутствие упоминания рекуррентных нейронных сетей, но то же справедливо и относительно некоторых других частей API PyTorch.
Для кого предназначена эта книга
Книга предназначена для программистов, стремящихся либо заниматься глубоким обучением, либо просто познакомиться с PyTorch. В роли среднестатистического читателя мы представляем себе специалиста по вычислительной технике, исследователя данных, разработчика программного обеспечения или студента/аспиранта вуза соответствующей специализации. Поскольку мы не требуем предварительных знаний глубокого обучения, некоторые разделы в первой части книги представляют собой повторение понятий, уже хорошо знакомых опытным специалистам. Надеемся, что даже такие читатели смогут взглянуть на уже знакомые вопросы немного под другим углом.
Мы предполагаем, что читатели знакомы с основами императивного и объектно-ориентированного программирования. Поскольку в книге используется язык Python, вы должны быть знакомы с его синтаксисом и рабочей средой. Необходимое условие: уметь устанавливать пакеты и выполнять сценарии Python на вашей платформе. У читателей, работавших ранее на C++, Java, JavaScript, Ruby и других подобных языках программирования, не должно возникнуть проблем с этим, хотя может потребоваться изучить некоторые дополнительные материалы. Аналогично не помешает (а возможно, и необходимо) знакомство с библиотекой NumPy. Мы также ожидаем от вас понимания основ линейной алгебры, в частности знания, что такое матрицы, векторы и скалярное произведение.
Структура издания
Книга разбита на три отдельные части. Часть I охватывает основы, а часть II посвящена комплексному проекту, основанному на описанных в части I базовых понятиях с добавлением более продвинутых. Довольно короткая часть III завершает книгу обзором возможностей PyTorch по развертыванию. Вероятно, вы обратите внимание на различные стили написания и визуализации в разных частях. Хотя эта книга и является результатом бесчисленных часов совместного планирования, обсуждения и редактуры, написание и визуализация в разных частях были распределены между авторами: Лука в основном отвечал за часть I, а Эли — за часть II2. Томас же старался гармонично объединить свой стиль в части III и отдельных разделах со стилями частей I и II. Вместо того чтобы искать наименьший общий знаменатель, мы решили сохранить характерные для каждой из частей исходные стили авторов.
Ниже приведено разделение каждой части на главы и краткое описание каждой из них.
Часть I
В части I мы начнем знакомство с PyTorch, нарабатывая основные навыки, необходимые для понимания уже существующих проектов PyTorch, а также создания своих собственных. В ней охватываются API PyTorch и некоторые «закулисные» возможности, делающие библиотеку PyTorch такой, какая она есть. Также мы поработаем в ней над обучением нашей первой базовой модели классификации. К концу части I вы будете готовы приступить к настоящему проекту.
Глава 1 познакомит вас с библиотекой PyTorch и ее местом в революции глубокого обучения, а также расскажет о том, что отличает PyTorch от прочих фреймворков глубокого обучения.
Глава 2 показывает PyTorch в действии на примере предобученных сетей, а также объясняет, как скачивать и запускать модели в PyTorch Hub.
В главе 3 вы познакомитесь с основным «кирпичиком» PyTorch — тензором — и его API, а также некоторыми «закулисными» нюансами его реализации.
Глава 4 покажет представление различных типов данных в виде тензоров, а также расскажет, какие формы должны быть у тензоров для моделей глубокого обучения.
Глава 5 описывает техническую сторону обучения с помощью градиентного спуска и то, как PyTorch делает это через автоматическое дифференцирование.
Глава 6 демонстрирует процесс создания и обучения в PyTorch нейронной сети для регрессии с помощью модулей nn и optim.
Глава 7 продолжает начатое в предыдущей главе и описывает создание полносвязной модели для классификации изображений, а также расширяет ваши знания API PyTorch.
Глава 8 познакомит вас со сверточными нейронными сетями и затронет более сложные вопросы создания нейросетевых моделей и их реализации в PyTorch.
Часть II
Каждая глава в части II будет приближать нас к комплексному решению задачи автоматического обнаружения рака легких. Мы воспользуемся этой непростой задачей для демонстрации реальных подходов к решению таких масштабных проблем, как скрининг рака. Это большой проект с упором на тщательное проектирование, диагностику и устранение неполадок, а также решение проблем.
В главе 9 описывается комплексная стратегия, используемая нами для классификации опухолей легких, начиная со снимков компьютерной томографии (КТ).
В главе 10 мы загрузим данные сформированных людьми описаний вместе с КТ-снимками и преобразуем соответствующую информацию в тензоры с помощью стандартных API PyTorch.
В главе 11 представлена первая модель классификации, работающая на основе описанных в главе 10 обучающих данных. Мы обучим эту модель и соберем простейшие метрики ее работы. Также мы расскажем об использовании TensorBoard для мониторинга обучения.
В главе 12 мы исследуем и внедрим стандартные метрики производительности модели и воспользуемся ими для выявления слабых мест в выполненном ранее обучении. А затем устраним эти изъяны с помощью усовершенствованного обучающего набора данных с использованием балансировки и дополнения данных.
В главе 13 описывается сегментация, попиксельная архитектура модели, с помощью которой мы сгенерируем карту интенсивности возможных расположений узелков, охватывающую весь КТ-снимок. При помощи этой карты интенсивности можно находить узелки на КТ-снимках, для которых отсутствуют данные сформированных людьми описаний.
В главе 14 реализован окончательный полнофункциональный проект диагностики онкопациентов с помощью нашей новой модели сегментирования с последующей классификацией.
Часть III
Часть III состоит из одной главы, посвященной развертыванию. В главе 15 приведен обзор способов развертывания моделей PyTorch в простом веб-сервисе, встраивания их в программы на C++ или развертывания на мобильных устройствах.
О коде
Весь код в этой книге был написан в расчете на Python 3.6 или более позднюю версию. Исходный код доступен для скачивания с сайта издательства Manning (https://www.manning.com/books/deep-learning-with-pytorch) и на GitHub (https://github.com/deep-learning-with-pytorch/dlwpt-code). На момент написания книги текущей была версия 3.6.8, именно на ней мы и проверяли примеры из этой книги. Например:
$ python
Python 3.6.8 (default, Jan 14 2019, 11:02:34)
[GCC 8.0.1 20180414 on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Командные строки необходимо вводить в ответ на приглашение командной строки Bash, начинающееся с $ (например, как в строке $python в этом примере). Код внутри обычного текста выглядит воттак.
Начинающиеся с >>> блоки кода воспроизводят сеансы интерактивной командной строки Python. Эти символы >>> не являются входными данными; строки текста, не начинающиеся с >>> или ..., являются выводимыми результатами работы. В некоторых случаях перед >>> вставлена дополнительная пустая строка, для повышения удобочитаемости печатной версии книги. Эти пустые строки не нужно на самом деле вводить в интерактивной командной строке:
Мы также активно применяем блокноты Jupyter, как описывается в главе 1, в подразделе 1.5.1. Включенный в официальный репозиторий GitHub код из блокнотов выглядит следующим образом:
# In[1]:
print("Hello, world!")
# Out[1]:
Hello, world!
# In[2]:
print("Until next time...")
# Out[2]:
Until next time...
Практически все наши блокноты с примерами содержат следующий стереотипный код в первой ячейке (в первых главах некоторые его строки могут отсутствовать), которые мы в дальнейшем не будем включать в печатную версию книги:
# In[1]:
%matplotlib inline
from matplotlib import pyplot as plt
import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
torch.set_printoptions(edgeitems=2)
torch.manual_seed(123)
В остальном блоки кода представляют собой частичные или полные фрагменты исходных файлов .py.
Листинг 15.1. main.py:5, def main
def main():
print("Hello, world!")
if __name__ == '__main__':
main()
Во многих примерах книги используются отступы в два пробела. Но вследствие ограничений печати листинги кода ограничиваются строками в 80 символов, что неудобно для фрагментов кода с большими отступами. Отступы в два пробела позволяют устранить излишние переносы строк. Во всем доступном для скачивания коде для этой книги (опять же по адресам https://www.manning.com/books/deep-learning-with-pytorch и https://github.com/deep-learning-with-pytorch/dlwpt-code) везде используются отступы в четыре пробела. Переменные, название которых оканчивается на _t, представляют собой тензоры, хранимые в памяти CPU, на _g заканчиваются тензоры, хранимые в памяти GPU, на _a — массивы NumPy.
Аппаратные и программные требования
Для изучения части I не требуется особых вычислительных ресурсов. Достаточно любого более или менее современного компьютера или облачного сервиса. Аналогично не требуется какой-либо конкретной операционной системы. В части II мы предполагаем, что выполнение полного обучения для более продвинутых примеров потребует GPU с поддержкой CUDA. Используемые в части II параметры по умолчанию требуют GPU с 8 Гбайт памяти (рекомендуем использовать видеокарту NVIDIA GTX 1070 или вариант помощнее), но эти параметры можно откорректировать, если на вашем аппаратном обеспечении доступно меньше RAM. Исходные данные для проекта выявления рака из части II потребуют около 60 Гбайт трафика для скачивания, а для обучения в системе потребуется (как минимум) 200 Гбайт свободного места на диске. К счастью, работающие в интернете вычислительные сервисы недавно начали предлагать бесплатное время работы на GPU. Мы обсудим вычислительные требования подробнее в соответствующих разделах.
Вам понадобится Python 3.6 или более поздняя версия; инструкции можно найти на сайте Python (http://www.python.org/downloads). Информацию об установке PyTorch см. в руководстве Get Started на официальном сайте PyTorch (https://pytorch.org/get-started/locally). Мы рекомендуем пользователям Windows устанавливать его с помощью Anaconda или Miniconda (https://www.anaconda.com/distribution или https://docs.conda.io/en/latest/miniconda.html). В других операционных системах, например Linux, обычно имеется намного больше удобных вариантов, из которых Pip — самая распространенная система управления пакетами для Python. Мы предоставляем файл requirements.txt для установки зависимостей с помощью Pip. Поскольку современные ноутбуки Apple не включают GPU с поддержкой CUDA, заранее скомпилированные пакеты macOS для PyTorch работают только с CPU. Конечно, опытные пользователи могут устанавливать пакеты так, как удобнее для совместимости с их любимой средой разработки.
Прочие источники информации в интернете
Хотя для чтения этой книги не требуется никаких предварительных знаний глубокого обучения, она не является основательным введением в ГО. Мы охватили в ней основы, но главной целью было научить читателя работать с библиотекой PyTorch. Мы призываем заинтересованных читателей выработать интуитивное понимание глубокого обучения до, во время либо после чтения этой книги. Замечательное средство для формирования прочной ментальной модели и интуитивного понимания механизмов, лежащих в основе глубоких нейронных сетей, — книга «Грокаем глубокое обучение» (https://www.piter.com/book.phtml?978544611334). Исчерпывающее введение и справочник вы найдете в книге Deep Learning Яна Гудфеллоу (Goodfellow) и др.3 (http://www.deeplearningbook.org/).
От издательства
Ваши замечания, предложения, вопросы отправляйте по адресу comp@piter.com (издательство «Питер», компьютерная редакция).
Мы будем рады узнать ваше мнение!
На веб-сайте издательства www.piter.com вы найдете подробную информацию о наших книгах.
Хотя для чтения этой книги не требуется никаких предварительных знаний глубокого обучения, она не является основательным введением в ГО. Мы охватили в ней основы, но главной целью было научить читателя работать с библиотекой PyTorch. Мы призываем заинтересованных читателей выработать интуитивное понимание глубокого обучения до, во время либо после чтения этой книги. Замечательное средство для формирования прочной ментальной модели и интуитивного понимания механизмов, лежащих в основе глубоких нейронных сетей, — книга «Грокаем глубокое обучение» (https://www.piter.com/book.phtml?978544611334). Исчерпывающее введение и справочник вы найдете в книге Deep Learning Яна Гудфеллоу (Goodfellow) и др.3 (http://www.deeplearningbook.org/).
В других частях встречается мешанина стилей Эли и Томаса; не удивляйтесь, если стиль будет меняться прямо посередине главы!
Гудфеллоу Я., Бенджио И., Курвилль А. Глубокое обучение.
Книга разбита на три отдельные части. Часть I охватывает основы, а часть II посвящена комплексному проекту, основанному на описанных в части I базовых понятиях с добавлением более продвинутых. Довольно короткая часть III завершает книгу обзором возможностей PyTorch по развертыванию. Вероятно, вы обратите внимание на различные стили написания и визуализации в разных частях. Хотя эта книга и является результатом бесчисленных часов совместного планирования, обсуждения и редактуры, написание и визуализация в разных частях были распределены между авторами: Лука в основном отвечал за часть I, а Эли — за часть II2. Томас же старался гармонично объединить свой стиль в части III и отдельных разделах со стилями частей I и II. Вместо того чтобы искать наименьший общий знаменатель, мы решили сохранить характерные для каждой из частей исходные стили авторов.
Об авторах
Большую часть своей профессиональной жизни Эли потратил на работу в различных стартапах в Кремниевой долине на различных должностях, начиная с разработчика программного обеспечения до технического директора. На момент публикации этой книги он работает с машинным обучением в индустрии беспилотных автомобилей.
Лука Антига работал исследователем в сфере биоинженерии в 2000-х годах, а последнее десятилетие играл роль одного из основателей и технического директора компании, занимающейся проектированием систем искусственного интеллекта. Он участвовал в нескольких проектах с открытым исходным кодом, включая ядро PyTorch.
Томас Виман — инструктор и консультант по машинному обучению и PyTorch, проживающий в Мюнхене, а также разработчик ядра PyTorch. Как обладатель докторской степени по математике, он не боится теории, но подходит с практической стороны, применяя ее к сложным вычислительным задачам.
Об иллюстрации на обложке
Обложку украшает рисунок Kabardian («Кабардинец») из книги Жака Грассе де Сан-Савье (Jacques Grasset de Saint-Sauveur) Costumes Civils Actuels de Tous les Peuples Connus («Наряды из разных стран»), опубликованной во Франции в 1788 году. Широкое разнообразие коллекции нарядов Грассе де Сан-Савье напоминает нам о том, насколько 200 лет назад регионы мира были уникальны и индивидуальны. В те времена по одежде человека можно было легко определить, откуда он, чем занимается и каков его социальный статус.
Стили одежды с тех пор изменились, и уникальность различных регионов угасла. Зачастую непросто отличить даже жителя одного континента от жителя другого, не говоря уже о городах, регионах и странах. Возможно, мы променяли культурное многообразие на более разнообразную личную жизнь и уж точно на более разнообразную и стремительную технологичную реальность.
В наше время, когда компьютерные книги так мало отличаются друг от друга, издательство Manning подчеркивает изобретательность и оригинальность компьютерного мира обложками книг, основанными на богатом разнообразии культурной жизни двухвековой давности, возвращенном иллюстрациями Жака Грассе де Сен-Савье.
