Вы заинтересованы в искусственном интеллекте и хотите узнать о программном обеспечении, используемом для создания глубоких нейронных сетей, таких как те, которые используются в ChatGPT и Stable Diffusion? Узнайте больше об опыте членов нашей команды WAT.ai, работающих над нашим проектом, сравнивая производительность различных сред глубокого обучения, таких как TensorFlow, PyTorch и других!

Что такое WAT.ai?

WAT.ai — это команда студентов-дизайнеров, которая занимается развитием талантов студентов в области искусственного интеллекта в Университете Ватерлоо. Участвуя в 8-месячных проектах, члены команды получают актуальный и полезный опыт, работая над исследованиями и отраслевыми приложениями ИИ. Проект Deep Learning Frameworks Comparison (DLFC) был одним из таких проектов, который проходил с сентября 2022 года по май 2023 года.

Многие из наших основных членов, которые присоединились к команде фреймворков, присоединились, потому что они были увлечены ИИ и хотели развить навыки глубокого обучения. К командам могут присоединиться люди с разным опытом и навыками. У нас было несколько новых участников, которые никогда не прикасались к глубокому обучению и очень хотели учиться! Члены команды могли сотрудничать с единомышленниками и учиться на опыте друг друга. Кроме того, проект — отличная вещь, которую работодатели могут выделить в резюме!

Члены WAT.ai также получают возможность посетить интересные мероприятия, такие как Канадская студенческая конференция по искусственному интеллекту (CUCAI). WAT.ai также проводит собственные образовательные занятия и мероприятия в Университете Ватерлоо, открытые для всех желающих!

О чем вообще ваш проект?

Цель нашего проекта — сравнить скорость различных программных фреймворков, используемых для построения нейронных сетей. В настоящее время двумя самыми популярными платформами глубокого обучения являются TensorFlow и PyTorch, обе на языке программирования Python. Тем не менее, как в Python, так и в Julia есть много других альтернатив с открытым исходным кодом, которые часто утверждают, что имеют преимущество в скорости по сравнению с другими. Мы построили пару сетей с нуля и оценили скорость их обучения и тестирования на стандартных наборах данных. Каждый член команды отвечал за разные фреймворки, включая TensorFlow, PyTorch, MXNet и JAX в Python, а также Flux и KNet в Julia.

Услышать от членов нашей команды!

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

Могли бы вы представиться?

Тревор: я студент первого курса магистратуры по специальности «Проектирование систем» и технический руководитель проекта (TPM) в команде DFLC.

Ануша: я учусь на четвертом курсе бакалавриата математики в области науки о данных и являюсь TPM команды DLFC.

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

Город: я учусь на четвертом курсе бакалавриата мехатроники и являюсь основным членом команды DLFC.

Яш: я учусь на третьем курсе бакалавриата в области инженерии управления и являюсь основным членом команды DLFC.

Почему вы присоединились к WAT.ai?

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

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

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

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

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

Каковы ваши впечатления от вашего фреймворка, понравилось ли вам его использование?

Тревор: в качестве TPM я работал с несколькими фреймворками, чтобы помогать людям в их работе. Мне понравилось узнавать, как каждая из платформ выполняет разные задачи, и я оценил усилия популярных платформ, таких как PyTorch и TensorFlow, для упрощения использования своих API.

Ануша: для этого проекта я работала с библиотекой Джулии Flux. Это был мой первый опыт работы с Джулией, так что было очень весело изучать новый язык программирования. Кроме того, я считаю, что с помощью этой библиотеки я узнал больше о нейронных сетях, поскольку модели было не так просто реализовать, как в некоторых популярных средах Python. Реализация всего на более низком уровне дала мне более глубокое понимание того, почему определенные вещи работают.

Musaab: Это был мой первый опыт использования Mxnet, но я скажу, что он был забавным. Мне повезло, что он имеет много общего с PyTorch, поэтому я смог объединить многие свои знания и концепции и применить их в MXNet.

Городской: я сосредоточился на JAX. Раньше я использовал другие фреймворки, такие как TensorFlow, Keras и Pytorch, но никогда не использовал JAX. В целом, это было намного сложнее, чем любой другой фреймворк, поскольку вам нужно было создавать все компоненты с нуля, например, определять все векторы/матрицы для всех весов и параметров, вручную обновлять их и выполнять функции активации. Хотя мне и нравилось работать в сети на более низком уровне, учиться работать с JAX было все труднее и труднее.

Яш: Это был мой первый опыт использования фреймворка KNet, который фокусируется на использовании Джулии. KNet показался мне интересным, поскольку он помог мне выйти из зоны комфорта и выучить новый язык программирования. Кроме того, известно, что KNet предназначен для исследований и не очень широко используется в отрасли. В целом, у меня были проблемы с использованием фреймворка KNet, но я многому научился и развил свой набор навыков.

С какими трудностями вы столкнулись при использовании вашего фреймворка и как вы их решили?

Тревор: я многому научился с функциональной точки зрения создания моделей глубокого обучения, работая с Flux, KNet и JAX. Это был совершенно другой образ мышления по сравнению с объектно-ориентированной точкой зрения большинства фреймворков Python. JAX, вероятно, был самым сложным в использовании, и мне приходилось много консультироваться с их документацией при разработке моделей и обучающего кода. Тем не менее, преимущества Jax в производительности окупились!

Ануша: Поскольку Джулия в основном используется в академических кругах, а не в промышленности, было довольно сложно получить учебные пособия по конкретным вещам, в отличие от PyTorch и TensorFlow, у которых много учебных пособий. Тем не менее, у Джулии, и особенно у Flux, есть тонны документации, и это помогло мне решить некоторые проблемы. Это также научило меня важности наличия хорошей документации и важности подробного изучения документации, поскольку она может предоставить много полезной информации.

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

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

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

Какие основные выводы вы сделали, работая в WAT.ai?

Тревор: Есть много увлеченных студентов, заинтересованных в изучении ИИ, и я рад продолжить работу с этой командой в следующем году для разработки более интересных проектов!

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

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

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

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

Детали проекта

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

Основанные на Python фреймворки TensorFlow и PyTorch «удобны для начинающих» и являются хорошим выбором для тех, кто делает первый шаг в глубоком обучении. Были и более сложные фреймворки Python, такие как MXNet и JAX, с которыми люди работали. JAX, в частности, использует подход функционального программирования к написанию кода нейронной сети, который сильно отличается от объектно-ориентированного подхода TensorFlow и PyTorch.

Кроме того, некоторые из наших участников взяли на себя дополнительную задачу по изучению фреймворков на основе Julia, а именно Flux и KNet. Julia — это новый язык программирования, который во многом похож на Python, MATLAB и R и предназначен для повышения производительности, особенно для числовых и научных вычислений. Таким образом, помимо изучения нейронных сетей, эти члены команды также изучили новый язык программирования.

Каждый член команды использовал свою структуру для создания, обучения и тестирования сети на двух задачах: многоуровневый персептрон (MLP), примененный к набору данных MNIST, и сверточная нейронная сеть ResNet, примененная к набору данных CIFAR-10. Мы разберем эти две задачи ниже!

Задача 1: MLP на MNIST

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

Задача 2: ResNet CNN на CIFAR-10

Вторая сеть, которую мы построили, была сверточной нейронной сетью (CNN) для классификации изображений набора данных крошечных изображений CIFAR-10. CNN используют операцию свертки как способ эффективной обработки изображений путем применения общих фильтров в пространственных измерениях. Подобно тому, как изображения имеют цветовые каналы RGB, CNN также обрабатывают изображения в разных каналах и могут объединять информацию из разных каналов для создания представлений признаков более высокого уровня, которые передаются в выходной классификационный слой. В этой сети мы реализовали архитектуру ResNetv2. ResNet — это популярная архитектура, используемая для обработки изображений, которая стала основой для многих инноваций в последующих архитектурах нейронных сетей. Благодаря этому заданию мы также узнали об увеличении данных и о том, как использовать графические процессоры для обучения нейронных сетей.

Полученные результаты

После тестирования всех фреймворков мы обнаружили, что JAX был одним из самых быстрых фреймворков как в задачах MLP, так и в задачах CNN, имея впечатляющее ускорение в 8,5–17 раз по сравнению с другими фреймворками для метрики времени обучения CNN за эпоху на GPU. Для получения более подробной информации о коде, наших методах и результатах, пожалуйста, обратитесь к нашей странице GitHub и документу, который мы отправили в CUCAI.

Заворачивать

Это конец нашего поста Project Talks! Большое спасибо, что нашли время, чтобы прочитать наш блог. Не стесняйтесь обращаться к нашим членам, чтобы задать вопросы по электронной почте или LinkedIn. Мы надеемся, что вы хотите стать частью нашей команды и стать нашими спутниками на пути к глубокому обучению! Если вам также интересно узнать больше о том, что мы сделали, ознакомьтесь с нашим проектом GitHub и paper.

Наконец, если вы хотите быть в курсе WAT.ai, мы рекомендуем вам подписаться на Страницу WAT.ai LinkedIn. Следите за сообщениями о том, как присоединиться к новым проектам и образовательным занятиям по искусственному интеллекту, которые пройдут в сентябре 2023 года!