Наслаждайтесь миллионами электронных книг, аудиокниг, журналов и других видов контента в бесплатной пробной версии

Только $11.99 в месяц после пробной версии. Можно отменить в любое время.

Глубокое обучение с fastai и PyTorch: минимум формул, минимум кода, максимум эффективности
Глубокое обучение с fastai и PyTorch: минимум формул, минимум кода, максимум эффективности
Глубокое обучение с fastai и PyTorch: минимум формул, минимум кода, максимум эффективности
Электронная книга1 206 страниц8 часов

Глубокое обучение с fastai и PyTorch: минимум формул, минимум кода, максимум эффективности

Рейтинг: 0 из 5 звезд

()

Читать отрывок

Об этой электронной книге

Обычно на глубокое обучение смотрят с ужасом, считая, что только доктор математических наук или ботан, работающий в крутой айтишной корпорации, могут разобраться в этой теме. Отбросьте стереотипы: любой программист, знакомый с Python, может добиться впечатляющих результатов. Как? С помощью fastai — библиотеки, предоставляющей комфортный интерфейс для решения наиболее популярных задач.

Создатели fastai доказали, что самые модные и актуальные приложения можно делать быстро и не засыпать над скучными теоретическими выкладками и зубодробительными формулами.
ЯзыкРусский
ИздательПитер
Дата выпуска11 нояб. 2022 г.
ISBN9785446114757
Глубокое обучение с fastai и PyTorch: минимум формул, минимум кода, максимум эффективности
Читать отрывок

Связано с Глубокое обучение с fastai и PyTorch

Похожие электронные книги

Похожие статьи

Отзывы о Глубокое обучение с fastai и PyTorch

Рейтинг: 0 из 5 звезд
0 оценок

0 оценок0 отзывов

Ваше мнение?

Нажмите, чтобы оценить

Отзыв должен содержать не менее 10 слов

    Предварительный просмотр книги

    Глубокое обучение с fastai и PyTorch - Джереми Ховард

    Введение

    Глубокое обучение (deep learning, DL) — новая мощная технология, и мы считаем, что ее следует использовать в разных дисциплинах. Эксперты, скорее всего, найдут новые возможности ее применения, и нам хотелось бы, чтобы специалисты различного профиля также включились в процесс обучения.

    По этой причине и не только Джереми принял участие в создании fast.ai, организации, которая стремится сделать глубокое обучение доступным с помощью бесплатных онлайн-курсов и ПО. Сильвейн — инженер-исследователь в Hugging Face. До этого он занимал должность ученого-исследователя в fast.ai, а также преподавал математику и computer science по программе подготовки студентов к поступлению в элитные университеты Франции. Мы вместе написали эту книгу, чтобы помочь как можно большему числу людей начать использовать глубокое обучение.

    Для кого эта книга

    Если вы новичок в области глубокого и машинного обучения, эта книга для вас. Но желательно уметь писать код на Python.

    voron.tif Нет опыта? Не проблема!

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

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

    Что нужно знать

    Единственное (желательное) требование — умение писать код (года опыта будет достаточно), лучше всего на Python, а также знание математики из курса старших классов. Даже если вы ее подзабыли, мы поможем освежить знания. Отличным вспомогательным ресурсом послужит Khan Academy (https://www.khanacademy.org/).

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

    Начнем с общей картины и постепенно будем углубляться, поэтому время от времени вам может потребоваться изучить дополнительные темы (программирование чего-либо или математику). Это нормально — именно так мы и будем строить работу. Читайте книгу и изучайте дополнительные ресурсы по мере необходимости.

    voron.tif Онлайн-ресурсы

    Все примеры кода доступны онлайн в виде блокнотов Jupyter (в главе 1 мы расскажем, что это). Это интерактивная версия книги, где можно выполнять код и экспериментировать с ним. Дополнительно об этом можно прочитать на сайте книги (https://book.fast.ai/). Там же содержится актуальная информация о настройке различных инструментов и дополнительные главы.

    Чему вы научитесь

    Прочитав эту книгу, вы будете знать следующее.

    • Как обучать модели, достигающие эталонных результатов:

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

    • в обработке естественного языка (NLP), включая классификацию документов (например, анализ тональности) и языковое моделирование;

    • в обработке табличных данных (например, прогнозировании продаж) с категориальными, непрерывными и смешанными данными, включая временной ряд;

    • в совместной фильтрации (например, рекомендации фильмов).

    • Как преобразовывать модели в веб-приложения.

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

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

    • Как читать исследовательские работы по глубокому обучению.

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

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

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

    • аффинные функции и нелинейности;

    • параметры и активации;

    • случайная инициализация и трансфертное обучение (transfer learning);

    • SGD, Momentum, Adam и другие оптимизаторы;

    • свертки;

    • пакетная нормализация;

    • дропаут;

    • увеличение (аугментация) данных;

    • уменьшение весов;

    • архитектуры ResNet и DenseNet;

    • классификация и регрессия изображений;

    • вложения;

    • рекуррентные нейронные сети (RNN);

    • сегментация;

    • U-Net

    • и многое другое!

    voron.tif Вопросники

    В конце каждой главы вы найдете тест. Он поможет закрепить полученные знания — если (мы надеемся!) вы сможете ответить на все вопросы. Кстати, один из рецензентов книги (спасибо, Фред!) сказал, что предпочитает начинать главу именно с вопросника, чтобы сразу понимать, на что обращать внимание.

    Предисловие

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

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

    Эта область охватывает невероятный объем знаний — теорию и великое множество техник и инструментов, стоящих за ней. Надо признать, что люди склонны объяснять простое сложным языком. Ученые используют в своих работах непонятные слова и математические выражения, и кажется, что ни посты, ни туториалы не освещают нужную информацию доступным образом. Инженеры и программисты предполагают, что вы уже знаете, как работают GPU, и разбираетесь в малоизвестных инструментах.

    Именно здесь закрадывается мысль, что неплохо бы иметь наставника или друга, которому можно задать вопросы. Кого-то, кто уже бывал в похожей ситуации и знает и инструменты, и математику, кто сможет рассказать о наилучших исследованиях, эталонных техниках и продвинутых инженерных решениях, до смешного упрощая задачу. Я был в похожей ситуации около десяти лет назад, когда только начинал знакомиться с машинным обучением (machine learning, ML). Несколько лет я с трудом понимал работы, где была математика. Меня окружали хорошие наставники, которые здорово помогали, но чтобы начать уверенно использовать машинное и глубокое обучение, потребовались годы. Это послужило мотивом принять участие в разработке PyTorch, фреймворка, делающего глубокое обучение доступным.

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

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

    Вас познакомят с последними достижениями в области компьютерного зрения, научат обработке естественного языка и дадут основы математики. Но на этом веселье не заканчивается — ведь затем вам покажут, как реализовать ваши идеи в продакшене. Пускай сообщество fast.ai, объединяющее тысячи практиков онлайн, станет вашей семьей, где все люди могут обсуждать и находить решения любых проблем.

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

    Сумит Чинтала (Soumith Chintala), соавтор PyTorch

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

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

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

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

    Часть I. Глубокое обучение на практике

    Глава 1. Путешествие в мир глубокого обучения

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

    Глубокое обучение для всех

    Многие предполагают, что для успеха в глубоком обучении нужны разные труднодоступные материалы. Но как вы увидите позже, это ошибочное мнение. В табл. 1.1 перечислено то, что вам совершенно не понадобится для достижения успеха.

    Таблица 1.1. Что НЕ нужно для глубокого обучения

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

    В глубоком обучении кроется мощь, гибкость и простота. Именно поэтому мы верим, что его следует применять во многих дисциплинах, включая гуманитарные и технические науки, искусство, медицину, финансы и многое другое. Вот вам личный пример: несмотря на отсутствие опыта в медицине, Джереми организовал Entilic — компанию, использующую алгоритмы глубокого обучения для постановки диагнозов. Спустя всего несколько месяцев после запуска компании было объявлено, что используемые алгоритмы способны обнаруживать злокачественные опухоли точнее, чем рентгенологи (https://oreil.ly/aTwdE).

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

    Обработка естественного языка (NLP)

    Ответы на вопросы; распознавание речи; классификация документов; обнаружение имен, дат и т.п. в документах; поиск статей, содержащих определенное понятие.

    Компьютерное зрение

    Интерпретация снимков со спутников и дронов (например, для предупреждения стихийных бедствий), распознавание лиц, захват изображений, чтение дорожных знаков, обнаружение автономными транспортными средствами пешеходов и других транспортных средств.

    Медицина

    Обнаружение аномалий на радиологических снимках, включая КТ, МРТ и рентген; подсчет признаков патологий на слайдах; измерение признаков в ультразвуке; диагностирование диабетической ретинопатии.

    Биология

    Свертывание белков; классификация белков; ряд задач геномики, включая секвенирование «опухоль — норма» и классификацию клинически значимых генетических мутаций; классификация клеток; анализ белков и белковых взаимодействий.

    Создание изображений

    Раскрашивание изображений, увеличение их разрешения, удаление шума, преобразование изображений в произведения искусства, оформленные в стиле известных художников.

    Системы рекомендаций

    Веб-поиск, рекомендации, создание домашней страницы.

    Игры

    Шахматы, го, большинство видеоигр от Atari, разные стратегии в реальном времени.

    Робототехника

    Обработка сложных для обнаружения объектов (например, прозрачных, блестящих, с отсутствием текстур) или тех, которые сложно захватить.

    Другие сферы

    Финансовое и логистическое прогнозирование, перевод текста в речь и многое другое…

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

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

    Нейронные сети: краткая история

    В 1943 году нейрофизиолог Уоррен Маккаллок (Warren McCulloch) и логик Уолтер Питтс (Walter Pitts) занялись разработкой математической модели искусственного нейрона. В работе «Логическое исчисление идей, относящихся к нервной активности» они заявили следующее:

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

    Маккаллок и Питтс поняли, что упрощенную модель реального нейрона можно представить с помощью простого сложения и определения порога (рис. 1.1). Питтс был самоучкой и к 12 годам уже получил предложение учиться в Кэмбриджском университете у великого Бертранда Рассела. Он отказался, как и от всех остальных предложений о присвоении ученых степеней и руководящих должностей, которые получал в течение жизни. Большая часть его выдающихся работ была создана им во времена, когда у него даже не было собственного жилья. Несмотря на отсутствие официально признанного положения и увеличивающуюся социальную изоляцию Питтса, его работа с Маккаллоком серьезно заинтересовала психолога Фрэнка Розенблатта (Frank Rosenblatt).

    16836.png

    Рис. 1.1. Естественный и искусственный нейроны

    Розенблатт усовершенствовал искусственный нейрон, чтобы тот смог обу­чаться. Более того, он работал над созданием первого устройства, использующего эти принципы: перцептрона «Марк-1». В своей работе The Design of an Intelligent Automaton Розенблатт писал об этом так: «Мы готовимся узреть рождение такой машины — машины, способной воспринимать, распознавать и идентифицировать свое окружение, не требуя какого-либо обучения или контроля со стороны человека». Перцептрон был создан и мог успешно распознавать простые формы.

    Профессор Массачусетского технологического института (MIT) Марвин Мински (Marvin Minsky) (который в школе учился в одном классе с Розенблаттом!) совместно с Сеймуром Папертом (Seymour Papert) написал книгу Perceptrons (MIT Press), в которой рассказывалось об изобретении Розенблатта. В этой книге они показали, что один слой таких устройств не способен изучить простые, но критически важные функции, например XOR. Кроме этого, они показали, что устранить эти ограничения можно через использование нескольких слоев устройств. К сожалению, широко были приняты только первые из этих выводов, и в итоге глобальное научное ­сообщество практически полностью прекратило изучение нейронных сетей на последующие 20 лет.

    Наиболее же значительным трудом в этой области за последние 50 лет стала многотомная работа Parallel Distributed Processing (PDP) («Параллельная распределенная обработка»), написанная Дэвидом Румельхартом (David Rumelhart), Джеймсом Макклиландом (James McClelland) и исследовательской группой PDP. Она была издана MIT Press в 1986 году. В первой главе высказывается та же идея, о которой когда-то говорил Розенблатт:

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

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

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

    • набор блоков обработки;

    • состояние активации;

    • функция вывода для каждого блока;

    • паттерн связей между блоками;

    • правило распространения для распространения шаблонов активности через сеть взаимосвязей;

    • правило активации для объединения вводов, влияющих на блок, с текущим состоянием этого блока, чтобы можно было генерировать его вывод;

    • правило обучения, согласно которому модели связей изменяются в процессе получения опыта;

    • среда, в которой система должна функционировать.

    В этой книге мы увидим, что современные нейронные сети отвечают всем перечисленным требованиям.

    В 1980-х большинство моделей создавались со вторым слоем нейронов, что помогало избежать проблемы, выявленной Мински и Папертом (это была их «модель связей между нейронами» для использования предыдущей структуры). Нейронные сети действительно широко использовались на протяжении 80-х и 90-х годов прошлого века в реальных практических проектах. Тем не менее недопонимание теоретических сложностей в очередной раз привело к замедлению развития области. Считалось, что добавления всего одного дополнительного слоя нейронов должно хватать, чтобы такие сети могли аппроксимировать любую математическую функцию, но на практике эти сети зачастую оказывались слишком большими и медленными для эффективного использования.

    И хотя исследователи еще 30 лет назад показали, что для получения хорошей практической производительности необходимо использовать больше нейронных слоев, этот принцип был широко принят и начал применяться только в течение последнего десятилетия. Нейронные сети наконец-то приближаются к реализации собственного потенциала. К этому привело развитие компьютерного оборудования, позволившего использовать большее число слоев, а также повышение доступности данных и доработка алгоритмических приемов, что в совокупности упростило и ускорило обучение нейронных сетей. Теперь мы получили то, что обещал нам Розенблатт: «машину, способную воспринимать, узнавать и идентифицировать окружение без какого-либо обучения или контроля со стороны человека».

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

    Кто мы

    Мы — это Сильвейн и Джереми, ваши гиды в предстоящем путешествии. Надеемся, что вы сочтете нас подходящими на эту роль.

    Джереми использует и преподает машинное обучение на протяжении почти 30 лет. Применять нейронные сети он начал 25 лет назад. За все это время он курировал многие компании и проекты, использующие в своей основе ML. К его достижениям можно отнести основание первой компании Enlitic, занимающейся глубоким обучением в сфере медицины, а также деятельность на посту президента и научного руководителя в Kaggle — крупнейшем мировом сообществе машинного обучения. Совместно с доктором Рейчел Томас (Rachel Thomas) он основал fast.ai, организацию, разработавшую учебный курс, на котором основывается данная книга.

    Во врезках вы будете встречать наши комментарии:

    lemur.tif Слово Джереми

    Всем привет! Меня зовут Джереми! Возможно, вам будет интересно узнать, что у меня нет формального технического образования. Я отучился на бакалавра философии и более серьезных ученых степеней не получал. Мне было гораздо интереснее заниматься практическими задачами, чем изучать теорию, поэтому в студенческие годы я на полную ставку работал в консалтинговой фирме McKinsey and Company. Если вы тоже предпочитаете заниматься делом, а не тратить годы, изучая абстрактные концепции, то поймете, о чем я говорю. Не пропускайте мои комментарии — в них вы найдете информацию, предназначенную для тех, кто не имеет глубокого математического или технического бэкграунда, то есть для таких же людей, как я сам.

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

    lemur.tif Слово Сильвейну

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

    Курс fast.ai прошли сотни тысяч студентов со всего мира. Сильвейн же, по мнению Джереми, выделялся среди всех встречавшихся ему за годы обучения студентов, в связи с чем он в итоге стал сначала сотрудником fast.ai, а затем в соавторстве с Джереми написал библиотеку ПО fastai.

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

    Любой, кто смотрел спортивные передачи, знает, что если действия команды комментируют двое, то им нужен третий участник для «особых комментариев». Таким комментатором будет Алексис Галлахер (Alexis Gallagher). У Алексиса очень разнообразный опыт: он занимался исследованиями в области математической биологии, писал киносценарии, был исполнителем-импровизатором, консультантом в фирме McKinskey (как и Джереми!), программировал на Swift и даже занимал должность технического директора.

    lemur.tif Слово Алексису

    Я решил, что пришло время узнать об этих ваших искусственных интеллектах. Перепробовал я очень многое… Но на самом деле у меня нет опыта разработки моделей ML. И все же… Насколько это может быть сложно? По ходу книги я собираюсь учиться вместе с вами. Заглядывайте в мои комментарии — здесь вас ждут подсказки, которые пригодились мне самому на моем пути. Надеюсь, что и для вас они окажутся полезны.

    Как изучать глубокое обучение

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

    Пол Локхарт (Paul Lockhart), доктор математических наук Колумбийского университета, бывший профессор Университета Брауна, а также учитель математики полного курса, в своем известном эссе A Mathematician’s Lament («Плач математика», https://oreil.ly/yNimZ) рисует мрачный мир, где музыке и искусству обучают так же, как математике. Детям не разрешается слушать музыку или играть, пока они не проведут более десяти лет за освоением нотной грамоты и теории, бесконечно перенося на уроках ноты в другую тональность. В художественном же классе студенты изучают краски и кисти, но рисовать им разрешается только после поступления в колледж. Звучит абсурдно, не так ли? А ведь именно так преподают математику: мы требуем, чтобы студенты годами занимались механическим запоминанием и изучением сухих, разрозненных основ, которые, как мы их заверяем, пригодятся в дальнейшем, когда многие из них уже просто бросят изучение этого предмета.

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

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

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

    Целостный подход обучения

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

    Обучение только на примерах

    Мы не будем жонглировать алгебраическими символами, а дадим вам контекст и цель, которые можно понять интуитивно.

    Максимальное упрощение

    Мы провели годы за разработкой инструментов и преподаванием методов, которые делают некогда сложные темы простыми.

    Устранение барьеров

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

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

    Иногда вам будет тяжело, местами вы будете застревать, но не сдавайтесь! Возвращайтесь к той части книги, в которой полностью разобрались, а затем не спеша продолжайте читать с этого места в поиске первого непонятного момента. Затем постарайтесь самостоятельно поэкспериментировать с кодом, погуглите дополнительные уроки по возникшему вопросу — это поможет найти иной угол обзора и разобраться. Абсолютно нормально, что при первом прочтении некоторые моменты, особенно код, будут непонятны. Иногда бывает сложно понять материал последовательно, не забегая вперед. Бывает, что все встает на свои места, когда вы получаете больше контекста из последующего материала, показывающего более общую картину. Поэтому если вы вдруг застрянете в каком-то разделе, то попробуйте перейти дальше, отметив, что к этому разделу нужно вернуться позднее.

    Чтобы достичь успеха в области глубокого обучения, не требуется особая академическая подготовка. Многие важнейшие прорывы в исследованиях и самой индустрии были сделаны людьми, не имеющими ученых степеней. Например, можно привести работу Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks (https://oreil.ly/JV6rL) — один из наиболее влиятельных трудов последнего десятилетия, который был процитирован более 5000 раз. А написал его Алек Рэдфорд (Alec Radford) еще в годы своего студенчества. Илон Маск — генеральный директор компании Tesla, решающей чрезвычайно сложные задачи по созданию беспилотных машин, говорит (https://oreil.ly/nQCmO):

    Ученая степень точно не требуется. Важно лишь глубокое понимание ИИ и способность реализовывать нейронные сети так, чтобы они были действительно полезны (и последнее — очень трудно). При этом неважно, окончили вы вообще среднюю школу или нет.

    Для достижения успеха вам нужно будет применять полученные в этой книге знания в собственных проектах и упорно продолжать делать свое дело.

    Ваши проекты и мышление

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

    Какие же задачи подходят для хороших тестовых примеров? Можно обучить модель различать картины Пикассо и Моне или выбирать фотографии дочери, а не сына. Это помогает сосредоточиться на ваших увлечениях и пристрастиях — выбор четырех или пяти небольших проектов вместо стремления решить одну огромную суперзадачу упростит начало изучения данной области. Поскольку в этом деле очень легко застрять, излишнее рвение на ранних этапах может дать обратный эффект. Но когда вы уже освоите основы, можете нацеливаться на решение более серьезных задач.

    lemur.tif Слово Джереми

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

    Как правило, люди, успешно справляющиеся с глубоким обучением, отличаются любопытством. Покойный физик Ричард Фейнман — пример того, кто, по нашему мнению, преуспел бы в глубоком обучении: в основу его работы над движением субатомных частиц легло увлеченное наблюдение за колеблющимися в воздухе тарелками для игры в фрисби.

    А теперь сфокусируемся на том, что конкретно вы будете изучать, и начнем с софта.

    ПО: PyTorch, fastai и Jupyter (почему это важно)

    Мы завершили сотни проектов машинного обучения, используя десятки разных пакетов и множество языков программирования. В fast.ai мы подготовили онлайн-курсы с помощью большинства из основных пакетов ML и DL. После того как в 2017 году появился PyTorch, мы провели более тысячи часов за его тестированием, прежде чем решили, что будем использовать этот пакет в будущих курсах, разработке ПО и исследованиях. С тех пор PyTorch стал самой быстро растущей библиотекой глубокого обучения, которая уже применяется в большинстве исследовательских работ, представленных на престижных конференциях. По большому счету, это главный показатель используемости в индустрии, потому что эти работы в итоге применяются в коммерческих продуктах и сервисах. Мы выяснили, что PyTorch — это наиболее гибкая и выразительная библиотека для глубокого обучения. Она не жертвует скоростью ради простоты, обеспечивая и то и другое.

    PyTorch лучше всего работает как базовая библиотека низкого уровня, предоставляющая основные операции для высокоуровневой функциональности. fastai же — это наиболее популярная библиотека для добавления этой высокоуровневой функциональности поверх PyTorch. Кроме того, она отлично подходит для целей этой книги, потому что уникальным образом предоставляет глубокую многослойную архитектуру ПО (об этом многослойном API есть даже научная статья (https://oreil.ly/Uo3GR)). По мере освоения глубокого обучения мы будем также погружаться в слои fastai. Эта книга рассказывает о ее второй версии, являющейся полностью переработанным вариантом со множеством уникальных возможностей.

    Не имеет значения, какое ПО вы изучите, — для переключения с одной библио­теки на другую требуется всего несколько дней. По-настоящему же важным является изучение основ глубокого обучения и его техник. Мы сосредоточимся на коде, который максимально отчетливо выражает необходимые для освоения принципы. При объяснении высокоуровневых принципов мы будем использовать высокоуровневый код fastai. Там же, где будет рассказываться о низко­уровневых принципах, будем использовать низкоуровневый PyTorch или даже чистый код на Python.

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

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

    Поскольку написание кода и эксперименты — это важнейшая часть освоения глубокого обучения, потребуется хорошая платформа для работы с кодом. Наиболее популярная — Jupyter (https://jupyter.org/). Именно ее мы и будем использовать в книге. Мы покажем, как с ее помощью обучать модели и экспериментировать с ними, рассмотрим каждый этап конвейера предварительной обработки данных и разработки модели. Jupyter неспроста считается самым популярным инструментом для научной работы с данными в Python. Он мощный, гибкий и легкий в использовании. Уверены, вы его полюбите!

    Давайте же посмотрим его в деле, обучив нашу первую модель.

    Ваша первая модель

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

    lemur.tif Слово Сильвейну

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

    Настройка сервера глубокого обучения на GPU

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

    voron.tif Термин: графический процессор (GPU)

    Иначе называется графическим адаптером, или видеокартой. Особый вид процессора, который может обрабатывать тысячи отдельных задач одновременно. Разработан, в частности, для отображения 3D-сред в видеоиграх. Выполняемые им базовые задачи очень похожи на те, с которыми работают нейросети, в связи с чем GPU может обучать нейросети в сотни раз быстрее обычного CPU. GPU установлен в каждом современном компьютере, но лишь в некоторых используется подходящий для глубокого обучения.

    Предпочтительные GPU-cерверы будут со временем меняться, так как ком­пании появляются и исчезают, и цены тоже не стоят на месте. Мы поддерживаем ­актуальность списка рекомендуемых вариантов на сайте книги (https://book.fast.ai), так что можете перейти туда прямо сейчас и выполнить инструкции для подключения к предпочтительному GPU-серверу глубокого обучения. Не волнуйтесь: потребуется всего около двух минут, чтобы выполнить настройку для большинства платформ. При этом в ряде случаев даже не придется платить или использовать кредитную карту.

    lemur.tif Слово Алексису

    Внесу свою лепту: прислушайтесь к этому совету! Если вы любите компьютеры, то наверняка захотите настроить собственный. Будьте осторожны! Это реально, но сильно затягивает и отвлекает. Неспроста мы не назвали эту книгу «Все, что вы хотели знать об администрировании системы Ubuntu, установке драйверов Nvidia, apt-get, conda, pip и конфигурации Jupyter Notebook». Собрав и развернув производственную инфраструктуру ML на работе, я могу гарантировать, что она справляется со своей задачей, но при этом не связана с моделированием, как обслуживание самолета не связано с управлением его полетом.

    Каждый представленный на сайте вариант содержит руководство, проследовав которому вы увидите экран как на рис. 1.2.

    01_02.tif

    Рис. 1.2. Начальное представление Jupyter Notebook

    Теперь вы готовы к запуску своего первого блокнота Jupyter!

    voron.tif Термин: блокнот Jupyter

    Элемент ПО, позволяющий включать форматированный текст, код, изображения, видео и многое другое в один интерактивный документ. Благодаря своему широкому использованию и невероятному влиянию на многие академические области и индустрию, Jupyter получил высочайшую награду ACM Software System. Блокноты Jupyter наиболее активно используются специалистами по работе с данными для разработки моделей глубокого ­обучения и взаимодействия с ними.

    Запуск первого блокнота

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

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

    voron.tif Заполненные (full) и пустые (stripped) блокноты

    Есть два каталога, в которых находятся разные версии блокнотов. Каталог full содержит блокноты, использованные для создания этой книги. В них прописано все содержание и выводы. Пустая версия содержит те же заголовки и ячейки кода, но все выводы и содержание из них удалены. После прочтения раздела книги мы рекомендуем закрывать ее и прорабатывать именно пустые блокноты, чтобы проверить, удастся ли вам выяснить, что покажет каждая ячейка, прежде чем вы ее выполните. Также старайтесь вспомнить, что тот или иной код демонстрирует.

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

    Блокнот состоит из ячеек, которые делятся на два основных вида:

    • содержащие форматированный текст, изображения и т.д. Они созданы с помощью языка разметки Markdown, о котором вы можете прочесть в приложении А;

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

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

    01_03.tif

    Рис. 1.3. Блокнот Jupyter

    Прежде чем продолжить, нажмите клавишу Esc для перехода в режим команд (если вы уже находитесь в этом режиме, ничего не произойдет, поэтому нажмите на всякий случай). Вызвать полный список доступных функций можно нажатием клавиши H. Для выхода из этого вспомогательного экрана нажмите Esc. Обратите внимание, что в отличие от большинства программ в этом режиме выполнение команд не требует удержания Ctrl, Alt и т.п. — вы просто нажимаете нужную буквенную клавишу.

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

    Щелкните на ячейке, начинающейся со строки # CLICK ME, чтобы выбрать ее. Первый знак в этой строке указывает, что далее следует комментарий Python, поэтому при выполнении ячейки он игнорируется. Остальная часть ячейки — это, как ни странно, полноценная система для создания и обучения эталонной модели, которая будет распознавать кошек и собак. Итак, приступим к ее обучению! Для этого просто нажмите Shift+Enter или кнопку Play на панели инструментов. ­Затем подождите несколько минут, в течение которых произойдет следующее.

    1. Из коллекции датасетов fast.ai на используемый вами GPU-сервер будет загружен, а затем извлечен датасет под названием Oxford-IIIT Pet Dataset (https://oreil.ly/c_4Bv), содержащий 7349 изображений кошек и собак 37 пород.

    2. Из интернета будет загружена предварительно обученная на 1,3 млн изображений модель.

    3. Эта модель будет скорректирована с помощью последних достижений в технологии переноса обучения (transfer learning) для получения модели, распознающей собак и кошек.

    Первые два шага выполняются только один раз на GPU-сервере. Если вы выполните ячейку повторно, она использует уже загруженные датасет и модель. Заглянем в содержимое ячейки и ее результаты (табл. 1.2):

    # CLICK ME

    from fastai.vision.all import *

    path = untar_data(URLs.PETS)/'images'

    def is_cat(x): return x[0].isupper()

    dls = ImageDataLoaders.from_name_func(

        path, get_image_files(path), valid_pct=0.2, seed=42,

        label_func=is_cat, item_tfms=Resize(224))

        learn = cnn_learner(dls, resnet34, metrics=error_rate)

        learn.fine_tune(1)

    Таблица 1.2. Результаты первого обучения

    Возможно, ваши результаты будут другими. На обучение влияет множество небольших произвольных вариаций. Однако в этом примере частота ошибок (error rate) обычно не превышает 0.02.

    lemur.tif Время обучения

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

    Эта книга была написана в блокнотах Jupyter

    Мы написали эту книгу, используя блокноты Jupyter, поэтому почти для каждого графика, таблицы и вычислений мы будем приводить точный код, с помощью которого вы сможете их повторить. По этой же причине вы очень часто будете видеть код сразу за таблицей, картинкой или просто текстом. Весь этот код можно найти на сайте книги (https://book.fast.ai/) и самостоятельно поэкспериментировать с выполнением и изменением каждого примера.

    Вы только что видели, как в книге выглядит ячейка, выводящая таблицу. А вот пример ячейки, выводящей текст:

    1+1

    2

    Jupyter всегда выводит или показывает результат последней строки (если таковая присутствует). Например, вот образец ячейки, выводящей изображение:

    img = PILImage.create('images/chapter1_cat_example.jpg')

    img.to_thumb(192)

    pic01_01.tif

    Как же нам узнать, что модель работает хорошо? В последнем столбце таблицы указана частота ошибок, то есть доля неверно распознанных изображений. Частота ошибок служит в качестве метрики — полноценной и интуитивно понятной меры качества модели. В данном случае видно, что модель близка к идеалу, даже несмотря на то, что время обучения составило всего несколько секунд (без учета времени на загрузку датасета и предварительно обученной модели). В действительности еще десять лет назад такой точности не удавалось достичь никому.

    В завершение убедимся, что эта модель на самом деле работает. Сделайте фото собаки или кошки. Если рядом с вами нет этих животных, то просто скачайте изображение из Google. Теперь выполните ячейку с определенным uploader. Это выведет кнопку для выбора изображения, которое требуется классифицировать.

    uploader = widgets.FileUpload()

    uploader

    pic01_02.tif

    Теперь можете передать загруженный файл в модель. Убедитесь, что это отчетливый снимок собаки или кошки, а не рисунок, мультфильм или нечто подобное. Блокнот сообщит вам, узнает ли он на снимке собаку или кошку и насколько он уверен в своем выборе. Надеемся, что ваша модель отлично справится с задачей:

    img = PILImage.create(uploader.data[0])

    is_cat,_,probs = learn.predict(img)

    print(fIs this a cat?: {is_cat}.)

    print(fProbability it's a cat: {probs[1].item():.6f})

    Is this a cat?: True.

    Probability it's a cat: 0.999986

    Поздравляем вас с созданием первого классификатора!

    Но что это значит? Что вы на самом деле сделали? А теперь несколько отвлечемся и взглянем на картину обобщенно.

    Что такое машинное обучение

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