Почему стоит перейти с TensorFlow на CNTK
Глубокое обучение за последние несколько лет полностью изменило область искусственного интеллекта (ИИ). Microsoft стремится к тому, чтобы любой человек мог использовать интеллектуальные технологии, а не только несколько элитных компаний. Для этого компания разработала Microsoft Cognitive Toolkit (CNTK, Microsoft Cognitive Toolbox). Это бесплатный, открытый и доступный для всех инструмент глубокого обучения, который сейчас является третьим по популярности пакетом машинного обучения на GitHub, после TensorFlow и Caffe.
В эпоху популярности TensorFlow нас часто спрашивают: почему кто-то хочет использовать CNTK вместо TensorFlow? Конечно, у людей есть склонность следовать за толпой, но в этой статье мы хотим привести некоторые убедительные аргументы в пользу CNTK и показать, что в некоторых случаях он может быть лучшим выбором. Вот причины, которые мы рассмотрим:
Эта статья подробно рассмотрит и объяснит эти преимущества.
Причина 1: Скорость
Глубокое обучение — это задача, требующая больших объёмов данных и вычислений, независимо от того, создаёте ли вы продукт или пишете статью. В плане скорости обучения и оценки, CNTK превосходит TensorFlow. Исследование, проведённое учёными из Гонконгского политехнического университета, показывает, что во всех протестированных сетях CNTK работает лучше, будь то на CPU или GPU. Фактически, на GPU CNTK является бесспорным лидером.
Для задач, связанных с изображениями, CNTK обычно в 2–3 раза быстрее, чем TensorFlow. А для рекуррентных нейронных сетей (RNN) CNTK — явный победитель. Как указано в статье, при работе на CPU «CNTK обеспечивает лучшую производительность (до 5–10 раз), чем Torch и TensorFlow». А на GPU «CNTK многократно превосходит все остальные инструменты». Это преимущество не случайно, так как исследовательский центр Microsoft провёл обширную оптимизацию в области обработки последовательностей в CNTK.
Если ваш проект связан с обработкой последовательностей, такой как распознавание речи, понимание естественного языка или машинный перевод, CNTK будет вашим лучшим выбором. Если вы занимаетесь визуальными исследованиями в области видеообработки, вам стоит попробовать CNTK.
Причина 2: Точность
Разработка инструментов глубокого обучения сложна, поскольку даже если в инструменте есть ошибки, вы можете компенсировать их, проектируя архитектуру сети. Многие примеры кода и исходные реализации других инструментов почти идентичны, и они предоставляют модель для загрузки и использования, что кажется безответственным. В CNTK мы уделяем большое внимание отслеживанию ошибок и гарантируем, что инструмент можно использовать для самостоятельного обучения модели и достижения максимальной точности.
Примером может служить сеть Inception V3, разработанная исследователями Google. TensorFlow поделился скриптом для обучения Inception V3 и предоставил возможность загрузить обученную модель. Однако трудно повторно обучить модель и достичь той же точности, поскольку это требует понимания дополнительных деталей, таких как предварительная обработка данных и улучшение. Исходная статья сообщает о наилучшей точности около 0,6%. Благодаря усилиям команды CNTK, CNTK теперь может обучать модель Inception V3 с top5 ошибкой всего 5,972%, что даже лучше, чем в исходной статье! Скрипт для обучения доступен для ознакомления.
Что касается рекуррентных нейронных сетей, алгоритм автоматического пакетного процесса CNTK может упаковывать последовательности разной длины и обладает высокой эффективностью выполнения. Более важно то, что он способен лучше инициализировать данные случайным образом, что может повысить точность на 1–2% по сравнению с исходными данными. Это позволило исследовательской группе Microsoft по голосу достичь более естественных результатов в распознавании голоса.
Причина 3: API-дизайн
Изначально TensorFlow включал только небольшое ядро C++ API, большая часть функциональности была реализована на Python. Преимущества такого дизайна очевидны: Python прост в использовании и быстро обновляется. Но, как и всё, у него есть обратная сторона: скорость работы остаётся низкой. Кроме того, для большинства реальных приложений, требующих строгого контроля над временем выполнения, сложно интегрировать код Python. В TensorFlow 1.0 C++ API стал более обширным, хотя его скорость всё ещё медленная.
С самого начала мы рассматривали оценку модели как важную часть приложения, и возможность интеграции обучения модели в такие приложения, как Office или Windows. С точки зрения дизайна, почти все функции CNTK написаны на C++, что обеспечивает высокую скорость и позволяет интегрировать C++ API в любое приложение. Одновременно это делает добавление дополнительных привязок, таких как Python, R, Java и т. д., более простым.
Кроме того, Python API CNTK содержит как низкоуровневую, так и высокоуровневую реализацию. Высокоуровневый Python API включает примеры функций и очень компактен и интуитивно понятен, особенно при работе с рекуррентными нейронными сетями. Напротив, TensorFlow обычно имеет низкий уровень Python API. TensorFlow полагается на сторонние высокоуровневые API, такие как TensorFlow Slim и Sonnet, чтобы заполнить этот пробел.
Причина 4: Масштабируемость
Современные задачи глубокого обучения обычно требуют обработки миллиардов тренировочных образцов, и масштабирование на множество GPU и машин становится необходимым. Инструменты, подобные TensorFlow, могут работать на одной машине с несколькими GPU, но масштабирование до нескольких машин усложняется.
CNTK выделяется своей мощной поддержкой распределённого обучения. Подобно примерам в репозитории CNTK, переход от одного GPU к нескольким GPU на нескольких машинах требует лишь нескольких изменений в скрипте обучения. Внутри Microsoft CNTK уже применяется к задачам, включающим множество машин и сотни GPU. Мы разработали несколько инновационных параллельных схем обучения, таких как однобитный SGD и блочный импульс SGD. Эти алгоритмы помогают настраивать гиперпараметры, позволяя достичь лучших моделей за более короткое время, например, в прорывном исследовании группы распознавания голоса Microsoft.
Причина 5: Оценка
TensorFlow имеет отличную историю в области обслуживания. Он поддерживает несколько версий моделей, сохраняет модели, оптимизированные для обслуживания, несколько метаграфов внутри одной модели для поддержки обслуживания на разных устройствах, и плагины для пользовательской настройки. Благодаря компиляции XLA AoT, TF может преобразовывать модель в исполняемый файл, что значительно уменьшает размер модели для мобильных и встраиваемых устройств и снижает задержку.
По сравнению с TensorFlow, CNTK больше фокусируется на прямой интеграции CNTK Eval в пользовательские приложения. Помимо Python и C++, CNTK предоставляет C#/.NET API для оценки. C#/.NET API построен непосредственно на основе C++ API с минимальными накладными расходами на производительность. Java API скоро станет доступным. Если вы создаёте приложение .NET и хотите выбрать инструмент глубокого обучения для оценки, CNTK будет более естественным выбором, чем TensorFlow.
CNTK также поддерживает параллельную оценку нескольких запросов с очень ограниченными накладными расходами памяти. Это обеспечивает отличные возможности для... Преимущество развёртывания моделей в среде сервисов, таких как веб-приложения.
Для периферийных устройств CNTK поддерживает платформы Intel и ARM.
TensorFlow — очень гибкий инструментарий, и с его помощью можно реализовать практически любую модель. Однако если вы сейчас используете Caffe, вам не повезло. Нет простого способа преобразовать ваш скрипт Caffe в TensorFlow, кроме как переписать всё с нуля. Аналогично, если вы хотите попробовать новый слой, изобретённый кем-то другим и написанный в другом инструментарии, у вас есть два варианта: либо реализовать его самостоятельно, либо подождать, пока кто-нибудь другой сделает это за вас.
CNTK, пожалуй, самый расширяемый из доступных инструментариев, поскольку такого ограничения нет. С помощью UserFunctions любой оператор может быть реализован на чистом Python. Имея массивы NumPy в качестве интерфейса между ядром CNTK и привязками Python, вы просто реализуете прямой и обратный проход, и вновь созданный оператор можно сразу поместить в граф. Более того, даже поместить выполнение графа другого инструментария в CNTK UserFunction и тем самым значительно ускорить этап экспериментов несложно.
То же самое относится и к алгоритмам обновления градиента. Хотя CNTK предоставляет большинство алгоритмов, таких как RMSProp или Adam, «из коробки», у вас есть полная свобода реализовывать новые подходы к обучению на чистом Python.
Глубокое обучение особенно эффективно, когда данных для обучения много. Для некоторых приложений данные настолько велики, что не помещаются в оперативную память, а иногда даже на одном компьютере. Даже если данные помещаются в ОЗУ, наивный цикл обучения будет тратить много времени на передачу данных из оперативной памяти в графический процессор. Встроенные считыватели CNTK решают все вышеперечисленные проблемы, предоставляя высокопроизводительные средства для перебора набора данных без необходимости помещать данные в оперативную память. Их можно использовать либо с одним диском, либо с распределённой файловой системой, такой как HDFS. Широко используется предварительная выборка, чтобы графический процессор всегда использовался без задержек. Считыватели CNTK также могут гарантировать, что модель всегда получает данные в правильно перемешанном порядке (что улучшает сходимость), даже если базовый набор данных не перемешан. Наконец, все эти средства доступны для всех текущих и будущих считывателей. Даже если вы напишете считыватель для своего экзотического формата файла, вам не придётся беспокоиться о реализации предварительной выборки самостоятельно.
В заключение статьи мы обещаем вам, что если вы выберете CNTK, то будете использовать тот же инструментарий, который используют группы продуктов Microsoft, такие как Bing, Cortana, Windows и т. д. Мы надеемся, это придаст вам уверенности в том, что вы ни в чём не ограничены, выбрав CNTK. Мы приветствуем ваш вклад в CNTK, и вместе мы делаем его инструментарием глубокого обучения, который действительно демократизирует ИИ.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )