Нейронные сети в PyTorch
Покупка
Новинка
Основная коллекция
Тематика:
Общенаучное знание и теории
Издательство:
Казанский (Приволжский) федеральный университет
Год издания: 2024
Кол-во страниц: 106
Дополнительно
Учебное пособие посвящено изучению использования фреймворка PyTorch в работе с нейронными сетями. В пособии подробно рассмотрены основные концепции, такие как тензоры, слои, функции активации, в контексте фреймворка PyTorch. Рассмотрены базовые теоретические основы и особенности построения нейронных сетей различной архитектуры, таких как многослойные полносвязные нейронные сети перцептронного типа, рекуррентные нейронные сети, сверточные нейронные сети, графовые нейронные сети, а также нейронные сети архитектуры трансформер. На основе множества примеров рассмотрены основные этапы разработки нейронных сетей, начиная с определения архитектуры и заканчивая процессом обучения и оценки модели.
Адресовано в первую очередь студентам-бакалаврам, магистрантам направления «Информационные системы и технологии», а также широкому кругу читателей, интересующихся нейронными сетями и приложениями. Это комплексное методическое пособие предназначено для студентов, исследователей и практикующих специалистов, стремящихся освоить создание и обучение нейронных сетей с использованием фреймворка PyTorch.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.02: Информационные системы и технологии
- ВО - Магистратура
- 09.04.02: Информационные системы и технологии
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
КАЗАНСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ ИНСТИТУТ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ Кафедра информационных систем Ф.М. ГАФАРОВ, А.Ф. ГИЛЕМЗЯНОВ НЕЙРОННЫЕ СЕТИ В PYTORCH Учебное пособие КАЗАНЬ 2024
УДК 004.032.26 ББК 32.973.2 Г24 Принято на заседании учебно-методической комиссии ИВМиИТ (протокол № 8 от 29 марта 2024 года) Рецензенты: кандидат физико-математических наук, заведующий кафедрой прикладной математики и искусственного интеллекта КФУ Д.М. Тумаков; кандидат технических наук, заместитель директора Института прикладной семиотики АН РТ А.Р. Гатиятуллин Г24 Гафаров Ф.М. Нейронные сети в PyTorch / Ф.М. Гафаров, А.Ф. Гилемзянов. – Казань: Казанский федеральный университет, 2024. – 106 с. Учебное пособие посвящено изучению использования фреймворка PyTorch в работе с нейронными сетями. В пособии подробно рассмотрены основные концепции, такие как тензоры, слои, функции активации, в контексте фреймворка PyTorch. Рассмотрены базовые теоретические основы и особенности построения нейронных сетей различной архитектуры, таких как многослойные полносвязные нейронные сети перцептронного типа, рекуррентные нейронные сети, сверточные нейронные сети, графовые нейронные сети, а также нейронные сети архитектуры трансформер. На основе множества примеров рассмотрены основные этапы разработки нейронных сетей, начиная с определения архитектуры и заканчивая процессом обучения и оценки модели. Адресовано в первую очередь студентам-бакалаврам, магистрантам направления «Информационные системы и технологии», а также широкому кругу читателей, интересующихся нейронными сетями и приложениями. Это комплексное методическое пособие предназначено для студентов, исследователей и практикующих специалистов, стремящихся освоить создание и обучение нейронных сетей с использованием фреймворка PyTorch. УДК 004.032.26 ББК 32.973.2 © Гафаров Ф.М., Гилемзянов А.Ф., 2024 © Казанский федеральный университет, 2024
СОДЕРЖАНИЕ Введение .................................................................................................................... 4 Глава 1. Основы PyTorch. Работа с тензорами в PyTorch. ................................... 7 Глава 2. Вычислительные графы и автоматическое вычисление градиентов .... 17 Глава 3. Однослойные и многослойные нейронные сети в PyTorch ................... 28 Глава 4. Подготовка данных и организация процесса обучения нейронной сети .......................................................................................................... 38 Глава 5. Рекуррентные нейронные сети .................................................................. 47 Глава 6. Прогнозирование временных рядов с помощью рекуррентных нейронных сетей ........................................................................................................ 55 Глава 7. Сверточные нейронные сети и их приложения ....................................... 66 Глава 8. Графовые нейронные сети и их приложения .......................................... 76 Глава 9. Нейросетевые архитектуры на основе Transformer ................................ 86 Литература………………………………………………………………………....103 3
ВВЕДЕНИЕ В последние десятилетия искусственные нейронные сети (ИНС) стали важным инструментом в области искусственного интеллекта, привнося в обработку данных и машинное обучение новые перспективы и возможности. Искусственные нейронные сети представляют собой математические модели, которые могут быть воплощены как программные или аппаратные системы. Они создаются с учетом принципов организации и функционирования биологических нейронных сетей, которые присутствуют в живых организмах. Термин этот возник в ходе изучения мозговых процессов с целью их моделирования. С точки зрения реализации искусственные нейронные сети представляют собой систему простых процессоров, искусственных нейронов, взаимодействующих и соединенных между собой. Подобные процессоры, в сравнении с теми, что используются в персональных компьютерах, обычно являются более простыми. Каждый из них работает исключительно с сигналами, которые он периодически получает, и сигналами, которые периодически посылает другим процессорам. При их объединении в обширную сеть с управляемым взаимодействием эти простые процессоры способны вместе справляться с сложными задачами. Отличительной особенностью нейронных сетей является их способность к обучению, в отличие от традиционных алгоритмов, которые подразумевают программирование. Обучение заключается в настройке коэффициентов связей между нейронами. В ходе этого процесса нейронная сеть может выявлять сложные зависимости между входными и выходными данными, а также осуществлять обобщение. Успешное обучение позволяет сети давать верные результаты на основе данных, которые не входили в обучающую выборку, а также справляться с неполными и шумными данными, даже если они частично искажены. Искусственные нейронные сети применяются для решения наиболее популярных типов задач, перечисленных ниже. 1. Распознавание образов и классификация. Образы могут представлять собой разнообразные объекты, такие как символы текста, изображения, образцы звуков и другие. В процессе обучения нейронной сети предоставляются разнообразные образцы, сопоставленные определенным классам. Обычно каждый образец представлен в виде вектора, содержащего значения различных признаков. В данной задаче количество нейронов в выходном слое обычно соответствует количеству уникальных классов. Устанавливается соответствие между выходами нейронной сети и классами, которые они представляют. Когда сети предъявляется конкретный образ, один из ее выходов должен сигнализировать о том, что данный образ принадлежит определенному классу. 4
2. Кластеризация. Кластеризация представляет собой процесс разделения набора входных сигналов на группы, при этом как количество, так и характеристики этих групп заранее неизвестны. После завершения обучения такой нейронной сети она способна идентифицировать, к какому конкретному классу принадлежит поступивший входной сигнал. Таким образом, данная сеть может выявлять новые классы сигналов, которые ранее были неизвестны. Установление соответствия между выделенными сетью классами и классами, существующими в предметной области, производится человеком. Примером инструмента для кластеризации может служить нейронная сеть Кохонена. 3. Прогнозирование. Задача прогнозирования с использованием нейронных сетей представляет собой важное направление в области искусственного интеллекта, где нейронные сети применяются для анализа данных и предсказания будущих событий. Применение нейронных сетей в задаче прогнозирования обусловлено их способностью автоматически выявлять сложные зависимости в данных и обобщать информацию из прошлого опыта для предсказания будущих событий. Например, в финансовой сфере нейронные сети могут использоваться для прогнозирования изменений цен на акции, в метеорологии – для предсказания погоды; кроме того, они могут быть использованы и в здравоохранении. 4. Аппроксимация функций. Нейронные сети могут аппроксимировать непрерывные функции. Применение нейронных сетей в задаче аппроксимации представляет собой мощный инструмент для приближения сложных и нелинейных функций. Аппроксимация в данном контексте означает создание модели, которая приближает неизвестную функцию на основе доступных данных. 5. Принятие решений и управление. Эта задача схожа с задачей классификации. В рамках классификации на вход нейронной сети поступают ситуации с их характеристиками, и сеть генерирует выходной признак, представляющий принятое ею решение. В данном случае в качестве входных сигналов используются разнообразные критерии, описывающие состояние контролируемой системы. 6. Сжатие данных и ассоциативная память. Нейросети обладают способностью выявлять взаимосвязи между различными параметрами, что предоставляет возможность более компактного представления данных большой размерности, особенно в случае тесных взаимосвязей между ними. Процесс, обратный этому, – восстановление полного набора данных из части информации, называется ассоциативной памятью. Ассоциативная память также дает возможность восстановления исходного сигнала или образа из исходных данных, даже если они зашумлены или повреждены. 5
7. Генеративные задачи. Применение нейронных сетей в генеративных задачах представляет собой важное направление в области искусственного интеллекта, где модели способны создавать новые данные, визуальные изображения, звуки и другие выразительные контенты. Генеративные задачи, в основе которых лежит использование нейронных сетей, имеют значительный потенциал в различных областях искусства, развлечений, дизайна и науки, предоставляя возможность творческого и инновационного подхода к созданию данных и контента. Практическое изучение нейронных сетей будет основано на фреймворке PyTorch, который является одним из ведущих фреймворков для построения, обучения и применения ИНС. Он стал популярным среди исследователей и разработчиков благодаря своей гибкости, интуитивному интерфейсу и активному сообществу. Разработка нейронных сетей в PyTorch предоставляет уникальные преимущества, облегчая процесс создания и оптимизации моделей. Одной из ключевых особенностей PyTorch является динамический вычислительный граф, который облегчает отладку и экспериментирование с различными архитектурами нейронных сетей. Это особенно важно при выполнении исследовательских задач, когда требуется быстрая адаптация и изменение структуры модели. В данном пособии мы рассмотрим основные этапы разработки нейронных сетей в PyTorch, начиная с определения архитектуры и заканчивая процессом обучения и оценки модели. Разберем основные концепции, такие как тензоры, слои, функции активации, а также рассмотрим практические примеры использования PyTorch для создания эффективных и мощных нейронных сетей различных архитектур. Программные коды всех примеров, рассмотренных в данном пособии, опубликованы в GitHub репозитории по адресу: https://github.com/fgafarov1977/pytorch_nn_tutorial. 6
ГЛАВА 1. Основы PyTorch. Работа с тензорами в PyTorch PyTorch – это фреймворк машинного обучения, построенный на основе языка программирования Python. В настоящее время язык Python является одним из наиболее популярных языков программирования при построении проектов машинного обучения. Популярность этого языка программирования связана с его удобством и простотой, а также наличием огромного количества разнообразных библиотек и модулей для решения задач в различных областях. PyTorch является проектом с открытым исходным кодом, поэтому любой желающий может участвовать в развитии этого проекта. Изначально PyTorch, который назывался просто Torch, был разработан на языке Lua, и его первый релиз был 2002 г. Потом появилась версия на языке Python, который был назван PyTorch. PyTorch используется для решения различных задач, таких как машинное обучение, нейронные сети, компьютерное зрение, обработка естественного языка и звука, и многих других. Перечислим основные особенности библиотеки PyTorch. Во-первых, это простой и удобный в использовании программный интерфейс API (application programming interface). Благодаря этом интерфейсу разрабатывать программный код во фреймворке PyTorch довольно просто, наглядно и удобно. Пользователь может без особых сложностей построить модели самых разнообразных нейронных сетей, эффективно организовать процесс их обучения и применять обученные модели уже на практике в самых разных областях. Вторая важная особенность – это использование языка программирования Python. Благодаря этому разработчики проектов машинного обучения в PyTorch фреймворке могут использовать все возможности и функции, предлагаемые средой Python. Третья важная особенность – это использование вычислительных графов, которые, по сути, являются основой этой библиотеки. PyTorch предоставляет собой платформу, которая содержит в себе необходимые инструменты для работы с динамическими вычислительными графами и инструменты автоматического вычисления градиентов и производных на их основе. К настоящему времени вокруг этого фреймворка выстроена довольно обширная экосистема, состоящая из различных библиотек, разрабатываемых сторонними разработчиками и командами, которые расширяют возможности PyTorch, упрощают и ускоряют процесс обучения моделей. Наиболее известные из них перечислены ниже. 1. TorchVision. Эта библиотека предоставляет набор инструментов и датасетов для компьютерного зрения, включая функции для работы с изображениями, аугментации данных и предобученные модели. 7
2. TorchText. Библиотека для обработки текстовых данных, включающая в себя функции токенизации, представления текста и другие утилиты для работы с естественным языком. 3. TorchAudio. Данная библиотека содержит инструменты для обработки аудиоданных, включая функции извлечения признаков, преобразования и предварительно обученные модели. 4. TorchHub. Библиотека, которая позволяет легко обмениваться и использовать предобученные модели и компоненты, обеспечивая удобный доступ к моделям, опубликованным сообществом. 5. Ignite. Библиотека для управления обучением и оценкой моделей. Предоставляет инструменты для организации цикла обучения, визуализации результатов и других операций. 6. PyTorch Lightning. Высокоуровневая библиотека для обучения глубоких нейронных сетей, предоставляющая удобный интерфейс и автоматизированный цикл обучения. 7. Catalyst. Библиотека для управления обучением, предоставляющая набор инструментов для обучения и оценки моделей. 8. PyTorch Geometric. Библиотека, предназначенная для работы с графовыми данными и графовыми нейронными сетями. PyTorch содержит мощные и удобные инструменты и методы для работы с тензорами. Тензоры PyTorch похожи на массивы numpy, однако имеют дополнительные возможности, с помощью которых их можно эффективно и удобно использовать в проектах машинного обучения. Для построения различных типов нейронных сетей имеется большое количество различных готовых слоев, которые легко можно использовать. В настоящее время PyTorch содержит десятки различных слоев, среди которых есть линейные слои, разнообразные сверочные слои, рекуррентные слои, слои нормализации, дропаут слои, и многие другие. Возможность использования графических процессоров для проведения высокопроизводительных вычислений в настоящее чрезвычайно необходима для обучения и использования нейронных сетей. Большинство «боевых» проектов машинного обучения использует графические процессоры. PyTorch позволяет в полной мере использовать все возможности, предоставляемые графическими процессорами на основе платформы CUDA. Благодаря использованию GPU вычисления можно проводить в десятки и сотни раз быстрее, чем на обычных процессорах СPU. Проведение вычислений с тензорами PyTorch на устройствах CUDA заложено в самом ядре фреймворка, поэтому даже без глубоких теоретических знаний касательно вычислений на CUDA можно легко и эффективно его использовать. 8
Перечислим основные модули, которые непосредственно используются при организации проектов машинного обучения. Модуль Autograd. Этот модуль используется для автоматического вычисления производных в вычислительном графе. На основе возможностей этого модуля производится сохранение в памяти истории последовательных вычислений, произведенных в прямом направлении. Затем на их основе производится воспроизведение этих вычислений в обратном порядке для автоматического вычисления градиентов. Этот модуль очень удобен и эффективен при построении и обучении нейронных сетей. Модуль Optim. Этот модуль, реализует основные алгоритмы оптимизации, которые используются при обучении нейронных сетей. В нем реализовано большинство наиболее часто используемых методов оптимизации, таких как стохастический градиентный спуск, метод Adama, метод Adagrad, и многие другие. Модуль nn. Это базовый класс для всех модулей нейронной сети, все модели, создаваемые пользователями, также должны наследоваться от этого класса. В этом модуле также содержаться все слои, которые уже имеются в PyTorch. Для того чтобы начать работать в PyТorch, необходимо его сначала установить. Для этого необходимо зайти на сайт https://pytorch.org/get-started/locally/. На этой странице есть удобный интерфейс (см. рис. 1), в котором вы можете указать необходимые параметры, такие как операционная система, тип установщика, использование CUDA, и т. д. И в зависимости от этих параметров система предложит вам команду для установки PyTorch, которую будет необходимо выполнить в командной строке. Рис. 1. Установка PyTorch 9
Если же вы работаете в системе Google Collab, то устанавливать PyTorch нет необходимости, так как он там уже установлен по умолчанию. Подключить библиотеку PyTorch можно написав import torch в самом начале программного скрипта. В PyTorch имеется особый тип данных, который называется тензором. Тензоры – это специализированная структура данных, очень похожая на массивы и матрицы NumPy. Эти тензоры используются для кодирования входных и выходных данных модели, а также хранения параметров модели. Например, при подаче данных на вход нейронных сетей эти данные обязательно преобразуются в тензоры. При последовательном прохождении информации через различные слои нейронной сети от одного слоя другому фактически передаются тензоры разной формы. И еще одна важная особенность этих тензоров заключается в том, что они могут работать на графических процессорах или другом специализированном оборудовании для ускорения вычислений. На рисунке 2 показаны тензоры в трех представлениях. Рис. 2. Тензоры в PyTorch Рассмотрим более подробно инструментарий для работы с тензорами. В самом начале тензоры необходимо каким-либо образом создавать и инициализировать какими-либо значениями. Тензоры можно создавать напрямую из имеющихся структур данных. В этом случае тип данных определяется автоматически. Например, если у нас имеется вложенный список, содержащий четыре значения, то из него можно создать тензор вызовом метода torch.tensor(), например data = [[1, 2], [3, 4]] data_t = torch.tensor (data). Таrже тензоры могут быть созданы из массивов NumPy: array = np.array (data) x_t = torch.from_numpy(array). 10