библиотеки машинного обучения ограничены законодательством
Топ 8 библиотек Python для машинного обучения и искусственного интеллекта
Машинное обучение (ML) и искусственный интеллект (AI) все шире распространяются в различных сферах деятельности, и многие предприятия начинают активно инвестировать в эти технологии. С ростом объемов и сложности данных, повышается необходимость их обработки и анализа при помощи ML и АI. Искусственный интеллект дает гораздо более точные оценки и прогнозы, которые заметно повышают эффективность, увеличивают производительность и снижают расходы.
AI и ML проекты сильно отличаются от обычных проектов разработки ПО. При работе над ними используется другой технологический стек, нужны навыки машинного обучения и готовность заниматься глубокими исследованиями. Чтобы заложить основу МL и AI проекта, вам нужно выбрать гибкий и при этом стабильный язык программирования с большим количеством готовых библиотек и фреймворков. Python как раз один из таких языков, и не удивительно, что на нем ведется большое количество AI и ML проектов. Ниже мы расскажем вам про топ-8 библиотек Python, которые могут быть использованы для AI и ML.
Почему Python предпочтителен для машинного обучения и AI?
Python поддерживает разработчиков на протяжении всего цикла программной разработки, что ведет к высокой продуктивности разработки и дает уверенность в ее конечном результате. Python имеет много достоинств, имеющих большое значение при разработке проектов, связанных с AI и ML.
К ним можно отнести:
Именно эти свойства еще больше повышают популярность языка. Огромное количество Python-библиотек для AI и ML существенно упрощают и ускоряют разработку. Простой синтаксис и читаемость способствуют быстрому тестированию сложных процессов и делают язык понятным для всех. Например, в контексте веб-разработки в качестве конкурента Python можно рассматривать PHP, но найти PHP-программистов с опытом работы в проектах ML и AI очень сложно.
Лучшие библиотеки Python для машинного обучения и AI
Для реализации алгоритмов ML и AI необходимо хорошо структурированное и проверенное окружение — только так можно достичь наилучших результатов. Многочисленные библиотеки Python, предназначенные для машинного обучения, позволяют существенно сократить время создания проектов. Давайте познакомимся с лучшими из них.
1. Tensor Flow
TensorFlow — библиотека сквозного машинного обучения Python для выполнения высококачественных численных вычислений. С помощью TensorFlow можно построить глубокие нейронные сети для распознавания образов и рукописного текста и рекуррентные нейронные сети для NLP(обработки естественных языков). Также есть модули для векторизации слов (embedding) и решения дифференциальных уравнений в частных производных (PDE). Этот фреймворк имеет отличную архитектурную поддержку, позволяющую с легкостью производить вычисления на самых разных платформах, в том числе на десктопах, серверах и мобильных устройствах.
Основной козырь TensorFlow это абстракции. Они позволяют разработчикам сфокусироваться на общей логике приложения, а не на мелких деталях реализации тех или иных алгоритмов. С помощью этой библиотеки разработчики Python могут легко использовать AI и ML для создания уникальных адаптивных приложений, гибко реагирующих на пользовательские данные, например на выражение лица или интонацию голоса.
2. Keras
Keras — одна из основных библиотек Python с открытым исходным кодом, написанная для построения нейронных сетей и проектов машинного обучения. Keras может работать совместно с Deeplearning4j, MXNet, Microsoft Cognitive Toolkit (CNTK), Theano или TensorFlow. В этой библиотеке реализованы практически все автономные модули нейронной сети, включая оптимизаторы, нейронные слои, функции активации слоев, схемы инициализации, функции затрат и модели регуляризации. Это позволяет строить новые модули нейросети, просто добавляя функции или классы. И поскольку модель уже определена в коде, разработчику не приходится создавать для нее отдельные конфигурационные файлы.
Keras особенно удобна для начинающих разработчиков, которые хотят проектировать и разрабатывать собственные нейронные сети. Также Keras можно использовать при работе со сверточными нейронными сетями. В нем реализованы алгоритмы нормализации, оптимизации и активации слоев. Keras не является ML-библиотекой полного цикла (то есть, исчерпывающей все возможные варианты построения нейронных сетей). Вместо этого она функционирует как очень дружелюбный, расширяемый интерфейс, увеличивающий модульность и выразительность (в том числе других библиотек).
3. Theano
С момента своего появления в 2007 году, Theano привлекла разработчиков Python и инженеров ML и AI.
По своей сути, это научная математическая библиотека, которая позволяет вам определять, оптимизировать и вычислять математические выражения, в том числе и в виде многомерных массивов. Основой большинства ML и AI приложений является многократное вычисление заковыристых математических выражений. Theano позволяет вам проводить подобные вычисления в сотни раз быстрее, вдобавок она отлично оптимизирована под GPU, имеет модуль для символьного дифференцирования, а также предлагает широкие возможности для тестирования кода.
Когда речь идет о производительности, Theano — отличная библиотека ML и AI, поскольку она может работать с очень большими нейронными сетями. Ее целью является снижение времени разработки и увеличение скорости выполнения приложений, в частности, основанных на алгоритмах глубоких нейронных сетей. Ее единственный недостаток — не слишком простой синтаксис (по сравнению с TensorFlow), особенно для новичков.
4. Scikit-learn
Scikit-learn — еще одна известная опенсорсная библиотека машинного обучения Python, с широким спектром алгоритмов кластеризации, регрессии и классификации. DBSCAN, градиентный бустинг, случайный лес, SVM и k-means — вот только несколько примеров. Она также отлично взаимодействует с другими научными библиотеками Python, такими как NumPy и SciPy.
Эта библиотека поддерживает алгоритмы обучения как с учителем, так и без учителя. Вот список основных преимуществ данной библиотеки, делающих ее одной из самых предпочтительных библиотек Python для ML:
Вы когда-нибудь задумывались, почему PyTorch стала одной из самых популярных библиотек Python по машинному обучению?
PyTorch — это полностью готовая к работе библиотека машинного обучения Python с отличными примерами, приложениями и вариантами использования, поддерживаемая сильным сообществом. PyTorch отлично адаптирована к графическому процессору (GPU), что позволяет использовать его, например в приложениях NLP (обработка естественных языков). Вообще, поддержка вычислений на GPU и CPU обеспечивает оптимизацию и масштабирование распределенных задач обучения как в области исследований, так и в области создания ПО. Глубокие нейронные сети и тензорные вычисления с ускорением на GPU — две основные фишки PyTorch. Библиотека также включает в себя компилятор машинного обучения под названием Glow, который серьезно повышает производительность фреймворков глубокого обучения.
6. NumPy
NumPy — это библиотека линейной алгебры, разработанная на Python. Почему большое количество разработчиков и экспертов предпочитают ее другим библиотекам Python для машинного обучения?
Практически все пакеты Python, использующиеся в машинном обучении, так или иначе опираются на NumPy. В библиотеку входят функции для работы со сложными математическими операциями линейной алгебры, алгоритмы преобразования Фурье и генерации случайных чисел, методы для работы с матрицами и n-мерными массивами. Модуль NumPy также применяется в научных вычислениях. В частности, он широко используется для работы со звуковыми волнами и изображениями.
В проектах по машинному обучению значительное время уходит на подготовку данных, а также на анализ основных тенденций и моделей. Именно здесь Pandas привлекает внимание специалистов по машинному обучению. Python Pandas — это библиотека с открытым исходным кодом, которая предлагает широкий спектр инструментов для обработки и анализа данных. С ее помощью вы можете читать данные из широкого спектра источников, таких как CSV, базы данных SQL, файлы JSON и Excel.
Эта библиотека позволяет производить сложные операции с данными помощью всего одной команды. Python Pandas поставляется с несколькими встроенными методами для объединения, группировки и фильтрации данных и временных рядов. Но Pandas не ограничивается только решением задач, связанных с данными; он служит лучшей отправной точкой для создания более сфокусированных и мощных инструментов обработки данных.
Наконец, последняя библиотека в нашем списке это Seaborn — бесподобная библиотека визуализации, основанная на Matplotlib. Для проектов машинного обучения важны и описание данных, и их визуализация, поскольку для выбора подходящего алгоритма часто бывает необходим зондирующий анализ набора данных. Seaborn предлагает высокоуровневый интерфейс для создания потрясающей статистической графики на основе набора данных.
С помощью этой библиотеки машинного обучения легко создавать определенные типы графиков, такие как временные ряды, тепловые карты (heat map) и графики «скрипками» (violin plot). По функционалу Seaborn превосходит Pandas и MathPlotLib — благодаря функциям статистической оценки данных в процессе наблюдений и визуализации пригодности статистических моделей для этих данных.
Ниже в таблице приведены данные по этим библиотекам из GitHub:
Эти библиотеки чрезвычайно полезны, когда вы работаете над проектами машинного обучения, поскольку они экономят ваше время и дополнительно предоставляют явные функции, на которые можно смело опираться. Среди огромной коллекции библиотек Python для машинного обучения эти библиотеки следует рассмотреть в первую очередь. С их помощью вы сможете вы можете использовать высокоуровневые аналитические функции даже при минимальных знаниях базовых алгоритмов, с которыми вы работаете.
Ограничения машинного обучения
Привет, Хабр! Представляю вашему вниманию перевод статьи “The Limitations of Machine Learning“ автора Matthew Stewart.
Большинство людей, читающих эту статью, вероятно, знакомы с машинным обучением и соответствующими алгоритмами, используемыми для классификации или прогнозирования результатов на основе данных. Тем не менее, важно понимать, что машинное обучение не является решением всех проблем. Учитывая полезность машинного обучения, может быть трудно согласиться с тем, что иногда это не лучшее решение проблемы.
В наше время гипербола о машинном обучении и искусственном интеллекте повсеместна. Возможно, это правильно, учитывая, что потенциал для этой области огромен. За последние несколько лет число консалтинговых агентств по ИИ возросло, и, согласно отчету Indeed, количество рабочих мест, связанных с ИИ, увеличилось на 100% в период с 2015 по 2018 годы.
По состоянию на декабрь 2018 года Forbes обнаружил, что 47% бизнеса имеют по крайней мере одну возможность использования ИИ в своем бизнес-процессе, a в отчете Deloitte говорится, что уровень проникновения корпоративного программного обеспечения со встроенным ИИ и облачных сервисов разработки ИИ, достигнет примерно 87 и 83 процентов соответственно. Эти цифры впечатляют — если вы планируете сменить карьеру в ближайшее время, ИИ кажется неплохой областью.
Все кажется великолепным, верно? Компании счастливы, и, по-видимому, потребители тоже счастливы, иначе компании не использовали бы ИИ.
Это здорово, и я тоже большой поклонник машинного обучения и искусственного интеллекта. Однако бывают случаи, когда использование машинного обучения просто не нужно, не имеет смысла, и иногда, когда реализация может привести к трудностям.
Ограничение 1 – Этика
Легко понять, почему машинное обучение оказало такое глубокое влияние на мир, но что менее ясно, каковы именно его возможности и, что еще важнее, каковы его ограничения. Юваль Ной Харари, как известно, придумал термин «датаизм», который относится к предполагаемому новому этапу цивилизации, в который мы вступаем, когда мы доверяем алгоритмам и данным больше, чем собственному суждению и логике.
Хотя эта идея может показаться смешной, но помните, когда вы в последний раз ездили в отпуск и следовали инструкциям GPS, а не своим собственным суждениям о карте — ставите ли вы под сомнение оценку GPS? Люди буквально въезжали в озера, потому что слепо следовали инструкциям своего GPS.
Идея доверять данным и алгоритмам больше, чем мы думаем, имеет свои плюсы и минусы. Очевидно, мы извлекаем выгоду из этих алгоритмов, иначе мы бы не использовали их в первую очередь. Эти алгоритмы позволяют нам автоматизировать процессы, делая обоснованные суждения, используя доступные данные. Иногда, однако, это означает замену чьей-либо работы алгоритмом, который сопровождается этическими последствиями. Кроме того, кого мы обвиняем, если что-то пойдет не так?
Наиболее часто обсуждаемый случай в сегодняшнее время – это самоуправляемые автомобили: как мы решаем, как транспортное средство должно реагировать в случае фатального столкновения? Будет ли у нас в будущем возможность выбрать этические рамки при покупке, которым следовал бы наш самоуправляемый автомобиль?
Кто виноват, если моя самоуправляемая машина кого-то убьет на дороге?
Хотя это все увлекательные вопросы, они не являются главной целью этой статьи. Однако очевидно, что машинное обучение не может сказать нам ничего о том, какие нормативные ценности мы должны принимать, то есть как мы должны действовать в данной ситуации.
Ограничение 2 — Детерминированные проблемы
Это ограничение, с которым мне лично приходилось иметь дело. Моя область знаний — наука об окружающей среде, которая в значительной степени опирается на компьютерное моделирование и использование датчиков / устройств IoT.
Машинное обучение невероятно эффективно для датчиков и может использоваться для калибровки и корректировки датчиков при подключении к другим датчикам, измеряющим переменные среды, такие как температура, давление и влажность. Корреляции между сигналами от этих датчиков могут быть использованы для разработки процедур самокалибровки, и это горячая тема исследований в моей области исследований химии атмосферы.
Однако все становится немного интереснее, когда дело доходит до компьютерного моделирования.
Запуск компьютерных моделей, которые имитируют глобальную погоду, выбросы с планеты и перенос этих выбросов, очень затратные в вычислительном отношении. На самом деле, это настолько трудоемко в вычислительном отношении, что моделирование на уровне исследований может занять несколько недель даже при работе на суперкомпьютере.
Хорошими примерами этого являются MM5 и WRF, которые представляют собой численные модели прогнозирования погоды, которые используются для исследований климата и для предоставления вам прогнозов погоды в утренних новостях. Интересно, что синоптики делают весь день? Запустите и изучите эти модели.
Работать с моделями погоды — это хорошо, но теперь, когда у нас есть машинное обучение, можем ли мы использовать его вместо этого, чтобы получать наши прогнозы погоды? Можем ли мы использовать данные со спутников, метеостанций и использовать элементарный алгоритм прогнозирования, чтобы определить, пойдет ли дождь завтра?
Ответ, на удивление, да. Если у нас есть сведения о давлении воздуха вокруг определенного региона, уровнях влажности в воздухе, скорости ветра и информации о соседних точках и их собственных переменных, то становится возможным обучать, например, нейронную сеть. Но какой ценой?
Использование нейронной сети с тысячами входов позволяет определить, будет ли завтра дождь в Бостоне. Тем не менее, использование нейронной сети пропускает всю физику погодной системы.
Машинное обучение является стохастическим, а не детерминированным.
Нейронная сеть не понимает второй закон Ньютона, или что плотность не может быть отрицательной — нет никаких физических ограничений.
Однако это не может быть ограничением надолго. Уже есть ряд исследователей, которые рассматривают добавление физических ограничений к нейронным сетям и другим алгоритмам, чтобы их можно было использовать для таких целей, как эта.
Ограничение 3 – Данные
Это самое очевидное ограничение. Если вы плохо «кормите» модель, то это даст только плохие результаты. Это может проявляться двумя причинами: нехватка данных и нехватка достоверных данных. Если у вас таких проблем нет, то вы смело можете изучать обработку больших массивов данных на Телеграм-канале «Big Data Books», где публикуются различные книги и ресурсы по Big Data.
Недостаток данных
Многие алгоритмы машинного обучения требуют больших объемов данных, прежде чем они начнут давать полезные результаты. Хорошим примером этого является нейронная сеть. Нейронные сети – это data-eating машины, которые требуют большого количества обучающих данных. Чем больше архитектура, тем больше данных требуется для получения жизнеспособных результатов. Повторное использование данных — плохая идея, всегда предпочтительнее иметь больше данных.
Если вы можете получить данные, то используйте их.
Недостаток хороших данных
Несмотря на внешний вид, это не то же самое, что написано выше. Представим, что вы думаете, что можете обмануть, сгенерировав десять тысяч фальшивых точек данных для размещения в нейронной сети. Что происходит, когда вы вставляете это?
Он будет обучаться сам, а затем, когда вы придете, чтобы проверить его на новом наборе данных, он не будет работать хорошо. У вас были данные, но качество желает лучшего.
Точно так же, как недостаток хороших признаков может привести к плохой работе вашего алгоритма, так и недостаток хороших правдивых данных может также ограничить возможности вашей модели. Ни одна компания не собирается внедрять модель машинного обучения, которая работает хуже, чем ошибка человеческого уровня.
Точно так же применение модели, обученной на наборе данных в одной ситуации, может не обязательно применяться также хорошо и ко второй ситуации. Лучший пример этого, который я нашел до сих пор, — в прогнозировании рака молочной железы.
В базах данных маммографии много изображений, но у них есть одна серьезная проблемы, которая вызвала значительные проблемы в последние годы — почти все рентгеновские снимки сделаны у белых женщин. Это может показаться не таким уж большим делом, но на самом деле было показано, что темнокожие женщины на 42 процента чаще умирают от рака молочной железы из-за широкого спектра факторов, которые могут включать различия в выявлении и доступе к медицинской помощи. Таким образом, обучение алгоритму в первую очередь для белых женщин в этом случае отрицательно влияет на темнокожих женщин.
В этом конкретном случае требуется большее количество рентгеновских снимков темнокожих пациентов в базе данных обучения, больше признаков, относящихся к причине повышения вероятности на 42 процента, и чтобы алгоритм был более справедливым за счет стратификации набора данных вдоль соответствующих осей.
Ограничение 4 — Неправильное применение
Относительно второго ограничения, обсуждавшегося ранее, предполагается, что это «кризис машинного обучения в академических исследованиях», когда люди слепо используют машинное обучение, чтобы попытаться проанализировать системы, которые являются либо детерминированными, либо стохастическими по природе.
По причинам, обсуждаемым во втором ограничении, применение машинного обучения в детерминированных системах будет успешным, но алгоритм, который не изучает отношения между двумя переменными, и не будет знать, когда он нарушает физические законы. Мы просто дали некоторые входы и выходы в систему и сказали ей изучить отношения — подобно тому, как кто-то переводит слово в слово из словаря, алгоритм будет казаться только поверхностным пониманием основной физики.
Для стохастических (случайных) систем все немного менее очевидно. Кризис машинного обучения для случайных систем проявляется двумя способами:
Сравнение библиотек глубокого обучения на примере задачи классификации рукописных цифр
Кручинин Дмитрий, Долотов Евгений, Кустикова Валентина, Дружков Павел, Корняков Кирилл
Введение
В настоящее время машинное обучение является активно развивающейся областью научных исследований. Это связано как с возможностью быстрее, выше, сильнее, проще и дешевле собирать и обрабатывать данные, так и с развитием методов выявления из этих данных законов, по которым протекают физические, биологические, экономические и другие процессы. В некоторых задачах, когда такой закон определить достаточно сложно, используют глубокое обучение.
В статье представлен краткий обзор инструментов проектирования и обучения нейросетевых моделей. Основное внимание уделено четырем библиотекам: Caffe, Pylearn2, Torch и Theano. Рассматриваются базовые возможности указанных библиотек, приводятся примеры их использования. Сравнивается качество и скорость работы библиотек при конструировании одинаковых топологий нейросетей для решения задачи классификации рукописных цифр (в качестве обучающей и тестовой выборки используется датасет MNIST). Также делается попытка дать оценку удобства применения рассматриваемых библиотек на практике.
Набор данных MNIST
Далее в качестве исследуемого набора данных будет использоваться база изображений рукописных цифр MNIST (рис. 1). Изображения в данной базе имеют разрешение 28×28 и хранятся в формате оттенков серого. Цифры отцентрированы на изображении. Вся база разбита на две части: тренировочную, состоящую из 50000 изображений, и тестовую — 10000 изображений.
Программные средства для решения задач глубокого обучения
Существует множество программных средств для решения задач глубокого обучения. В [1] можно найти общее сравнение функциональных возможностей наиболее известных, здесь приведем общую информацию о некоторых из них (таблица 1). Первые шесть программных библиотек реализуют наиболее широкий спектр методов глубокого обучения. Разработчики предоставляют возможности для создания полностью связанных нейросетей (fully connected neural network, FC NN [2]), сверточных нейронных сетей (convolutional neural network, CNN) [3], автокодировщиков (autoencoder, AE) и ограниченных машин Больцмана (restricted Boltzmann machine, RBM) [4]. Необходимо обратить внимание на оставшиеся библиотеки. Несмотря на то, что они обладают меньшей функциональностью, в некоторых случаях их простота помогает достичь большей производительности.
Библиотека Caffe
Разработка Caffe ведется с сентября 2013 г. Начало разработки положил Yangqing Jia во время его обучения в калифорнийском университете в Беркли. С указанного момента Caffe активно поддерживается Центром Зрения и Обучения Беркли (The Berkeley Vision and Learning Center, BVLC) и сообществом разработчиков на GitHub. Библиотека распространяется под лицензией BSD 2-Clause.
Caffe реализована с использованием языка программирования C++, имеются обертки на Python и MATLAB. Официально поддерживаемые операционные системы — Linux и OS X, также имеется неофициальный порт на Windows. Caffe использует библиотеку BLAS (ATLAS, Intel MKL, OpenBLAS) для векторных и матричных вычислений. Наряду с этим, в число внешних зависимостей входят glog, gflags, OpenCV, protoBuf, boost, leveldb, nappy, hdf5, lmdb. Для ускорения вычислений Caffe может быть запущена на GPU с использованием базовых возможностей технологии CUDA или библиотеки примитивов глубокого обучения cuDNN.
Рис. 2. Структура нейронной сети
Конфигурация сети готова. Далее необходимо определить параметры процедуры обучения в файле формата prototxt (назовем его solver.prototxt). К числу параметров обучения относятся путь к файлу с конфигурацией сети (net), периодичность тестирования во время обучения (test_interval), параметры стохастического градиентного спуска (base_lr, weight_decay и другие), максимальное количество итераций (max_iter), архитектура, на которой будут проводиться вычисления (solver_mode), путь для сохранения обученной сети (snapshot_prefix).
Обучение выполняется с использованием основного приложения библиотеки. При этом передается определенный набор ключей, в частности, название файла, содержащего описание параметров процедуры обучения.
Таким образом, путем несложных действий можно получить первые результаты экспериментов с глубокими нейросетевыми моделями. Более сложные и подробные примеры можно увидеть на сайте разработчиков.
Библиотека Pylearn2
Pylearn2 — библиотека, разрабатываемая в лаборатории LISA в университете Монреаля с февраля 2011 года. Имеет около 100 разработчиков на GitHub. Библиотека распространяется под лицензией BSD 3-Clause.
Pylearn2 реализована на языке Python, в настоящее время поддерживается операционная система Linux, также возможен запуск на любой операционной системе с использованием виртуальной машины, т.к. разработчики предоставляют сконфигурированную обертку виртуальной среды на базе Vagrant. Pylearn2 является надстройкой над библиотекой Theano. Дополнительно требуются PyYAML, PIL. Для ускорения вычислений Pylearn2 и Theano используют Cuda-convnet, которая реализована на C++/CUDA, что дает значительный прирост в скорости.
Таким образом, подготовлена конфигурация сети и определена необходимая инфраструктура для обучения и классификации, которые выполняются посредством вызова соответствующего Python-скрипта. Для обучения необходимо выполнить следующую командную строку:
Более сложные и подробные примеры можно увидеть на официальном сайте или в репозитории.
Библиотека Torch
Torch — библиотека для научных вычислений с широкой поддержкой алгоритмов машинного обучения. Разрабатывается Idiap Research Institute, New York University и NEC Laboratories America, начиная с 2000г., распространяется под лицензией BSD.
Библиотека реализована на языке Lua с использованием C и CUDA. Быстрый скриптовый язык Lua в совокупности с технологиями SSE, OpenMP, CUDA позволяют Torch показывать неплохую скорость по сравнению с другими библиотеками. На данный момент поддерживаются операционные системы Linux, FreeBSD, Mac OS X. Основные модули также работают и на Windows. В зависимостях Torch находятся пакеты imagemagick, gnuplot, nodejs, npm и другие.
Библиотека состоит из набора модулей, каждый из которых отвечает за различные стадии работы с нейросетями. Так, например, модуль nn обеспечивает конфигурирование нейросети (определению слоев, и их параметров), модуль optim содержит реализации различных методов оптимизации, применяемых для обучения, а gnuplot предоставляет возможность визуализации данных (построение графиков, показ изображений и т.д.). Установка дополнительных модулей позволяет расширить функционал библиотеки.
Теперь соберем все воедино. Для того чтобы обучить нейросеть в библиотеке Torch, необходимо написать собственный цикл обучения. В нем объявить специальную функцию (замыкание), которая будет вычислять ответ сети, определять величину ошибки и пересчитывать градиенты, и передать это замыкание в функцию градиентного спуска для обновления весов сети.
где optimState — параметры градиентного спуска (learningRate, momentum, weightDecay и пр.). Полностью цикл обучения можно посмотреть здесь.
Несложно видеть, что процедура объявления, как и процедура обучения, занимает менее 10 строк кода, что говорит о простоте использования библиотеки. При этом библиотека позволяет работать с нейросетями на достаточно низком уровне.
Сохранение и загрузка натренированной сети осуществляется с помощью специальных функций:
После загрузки сеть может быть использована для классификации или дополнительной тренировки. Если необходимо узнать, к какому классу принадлежит элемент sample, то достаточно выполнить проход по сети и вычислить выход:
Более сложные примеры можно найти в обучающих материалах к библиотеке.
Библиотека Theano
Theano — это расширение языка Python, позволяющее эффективно вычислять математические выражения, содержащие многомерные массивы. Библиотека получила свое название в честь имени жены древнегреческого философа и математика Пифагора — Феано (или Теано). Theano разработана в лаборатории LISA для поддержки быстрой разработки алгоритмов машинного обучения.
Библиотека реализована на языке Python, поддерживается на операционных системах Windows, Linux и Mac OS. В состав Theano входит компилятор, который переводит математические выражения, написанные на языке Python в эффективный код на C или CUDA.
Theano предоставляет базовый набор инструментов для конфигурации нейросетей и их обучения. Возможна реализация многослойных полностью связанных сетей (Multi-Layer Perceptron), сверточных нейросетей (CNN), рекуррентных нейронных сетей (Recurrent Neural Networks, RNN), автокодировщиков и ограниченных машин Больцмана. Также предусмотрены различные функции активации, в частности, сигмоидальная, softmax-функция, кросс-энтропия. В ходе обучения используется пакетный градиентный спуск (Batch SGD).
Рассмотрим конфигурацию нейросети в Theano. Для удобства реализуем класс LogisticRegression (рис. 3), в котором будут содержаться переменные — обучаемые параметры W, b и функции для работы с ними — подсчет ответа сети (y = softmax(Wx + b)) и функция ошибки. Затем для тренировки нейросети создаем функцию train_model. Для нее необходимо описать методы, определяющие функцию ошибки, правило вычисления градиентов, способ изменения весов нейросети, размер и местоположение mini-batch выборки (сами изображения и ответы для них). После определения всех параметров функция компилируется и передается в цикл обучения.
Для быстрого сохранения и загрузки параметров нейросети можно использовать функции из пакета cPickle:
Несложно видеть, что процесс создания модели и определения ее параметров требует написания объемного и шумного кода. Библиотека является низкоуровневой. Нельзя не отметить ее гибкость, а также наличие возможности реализации и использования собственных компонент. На официальном сайте библиотеки имеется большое количество обучающих материалов на разные темы.
Сравнение библиотек на примере задачи классификации рукописных цифр
Тестовая инфраструктура
Топологии сетей и параметры обучения
Рис. 4. Структура трехслойной полносвязной сети
Рис. 5. Структура сверточной нейронной сети
Все веса инициализировались случайным образом согласно равномерному закону распределения в диапазоне (−6/(n_in + n_out), 6/(n_in + n_out)), где n_in, n_out – количество нейронов на входе и выходе слоя соответственно. Параметры стохастического градиентного спуска (SGD) выбраны, равными следующим значениям: learning rate — 0.01, momentum — 0.9, weight decay — 5e-4, batch size — 128, максимальное число итераций — 150.
Результаты экспериментов
Время обучения нейронных сетей, описанных ранее (рис. 4, 5) с помощью четырех рассмотренных библиотек, представлено ниже (рис. 6). Легко заметить, что Pylearn2 показывает худшую производительность (как на CPU, так и на GPU) по сравнению с другими библиотеками. Что же касается остальных, время обучения сильно зависит от структуры сети. Лучший результат среди реализаций сетей, запущенных на CPU, показала библиотека Torch (причем на CNN она обогнала саму себя же, запущенную на GPU). Среди GPU-реализаций наилучший результат (на обеих сетях) показала библиотека Caffe. В целом от использования Caffe остались только положительные впечатления.
Рис. 6. Время обучения сетей MLP и CNN, описанных в предыдущем пункте
Что же касается времени классификации одного изображения на CPU с помощью обученных моделей (рис. 7), то несложно видеть, что библиотека Torch оказалась вне конкуренции на обеих тестовых нейросетях. Немного от нее отстала Caffe на CNN, которая при этом показала худшее время классификации на MLP.
Рис. 7. Время классификации одного изображения с помощью обученных сетей MLP и CNN
Если обратиться к точности классификации, то на сети MLP оно выше 97.4%, а CNN —
99% для всех библиотек (таблица 2). Полученные значения точности несколько ниже приведенных на сайте MNIST на тех же структурах нейросетей. Небольшие отличия обусловлены различиями в настройках начальных весов сетей и параметрах методов оптимизации, применяемых в процессе обучения. Собственно, цели достижения максимальных значений точности и не было, скорее необходимо было построить идентичные структуры сетей и задать максимально схожие параметры обучения.
Таблица 2. Среднее значение и дисперсия показателей точности классификации по 5 экспериментам
Caffe | Pylearn2 | Theano | Torch | |||||
Точность, % | Дисперсия | Точность, % | Дисперсия | Точность, % | Дисперсия | Точность, % | Дисперсия | |
MLP | 98.26 | 0.0039 | 98.1 | 0 | 97.42 | 0.0023 | 98.19 | 0 |
CNN | 99.1 | 0.0038 | 99.3 | 0 | 99.16 | 0.0132 | 99.4 | 0 |
Сравнение выбранных библиотек
Таблица 3. Результаты сравнения библиотек (места от 1 до 3 по каждому критерию)
Скорость обучения | Скорость классификации | Удобство | Гибкость | Функционал | Документация | Сумма | |
Caffe | 1 | 2 | 1 | 3 | 3 | 2 | 12 |
Pylearn2 | 3 | 3 | 2 | 3 | 1 | 3 | 15 |
Torch | 2 | 1 | 2 | 2 | 2 | 1 | 10 |
Theano | 2 | 2 | 3 | 1 | 2 | 2 | 12 |
Заключение
Подводя итог, можно сказать, что наиболее зрелой является библиотека Torch. При этом библиотеки Caffe и Theano не уступают ей по многим критериям (таблица 3), поэтому нельзя исключать возможность их последующего использования. В дальнейшем для исследования применимости методов глубокого обучения к задачам детектирования лиц, пешеходов и автомобилей планируется применять библиотеки Caffe и Torch.
Работа выполнена в лаборатории «Информационные технологии» факультета ВМК ННГУ им. Н.И. Лобачевского при поддержке компании Itseez.