СРАВНЕНИЕ БИБЛИОТЕК ГЛУБОКОГО ОБУЧЕНИЯ - Студенческий научный форум

IX Международная студенческая научная конференция Студенческий научный форум - 2017

СРАВНЕНИЕ БИБЛИОТЕК ГЛУБОКОГО ОБУЧЕНИЯ

 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF
Сравнение библиотек глубокого обучения

Кочуров Даниил Николаевич, студент, Федеральное государственное автономное образовательное учреждение высшего профессионального образования «Уральский федеральный университет имени первого Президента России Б.Н.Ельцина, ул. Мира, 19, г. Екатеринбург, 620002

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

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

Ключевые слова: машинное обучение, нейросети, глубокое обучение, Метод группового учета аргументов, База данных MNIST, Caffe, Pylearn2, Torch, Theano

Введение

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

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

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

Метод группового учета аргументов, МГУА (Group Method of Data Handling, GMDH) — метод порождения и выбора регрессионных моделей оптимальной сложности.

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

Данная статья посвящена сравнительному анализу некоторых программных инструментов глубокого обучения, которых в последнее время появилось великое множество [1]. К числу таких инструментов относятся программные библиотеки, расширения языков программирования, а также самостоятельные языки, позволяющие использовать готовые алгоритмы создания и обучения нейросетевых моделей. Существующие инструменты глубокого обучения имеют различный функционал и требуют от пользователя разного уровня знаний и навыков. Правильный выбор инструмента — важная задача, позволяющая добиться необходимого результата за наименьшее время и с меньшей затратой сил.

В статье представляю краткий обзор четырех библиотек инструментов проектирования и обучения в нейросетевых моделей это Caffe, Pylearn2, Torch и Theano. Сравнительные функциональные возможности и общая информация о некоторых из них в таблице. (таблица 1).

Разработчики предоставляют возможности для создания полностью связанных нейросетей (fully connected neural network, FC NN [2]), сверточных нейронных сетей (convolutional neural network, CNN [3]) автокодировщиков (autoencoder, AE) и ограниченных машин Больцмана (restricted Boltzmann machine, RBM)[4].

Таблица 1. Возможности программных средств глубокого обучения

Название

Язык

ОС

FC NN

CNN

AE

RBM

1

Theano

Python

Windows, Linux, Mac

+

+

+

+

2

Pylearn2

Python

Linux, Vagrant

+

+

+

+

3

Torch

Lua, C

Linux, Mac OS X, iOS, Android

+

+

+

+

4

Caffe

C++, Python

Linux, OS X

+

+

-

-

В качестве исследуемого набора данных будет использоваться база изображений рукописных цифр MNIST (рис. 1). Изображения в данной базе имеют разрешение 28x28 и хранятся в формате оттенков серого. Цифры отцентрированы на изображении.

Рис. 1. Примеры изображений цифр в базе MNIST

База данных MNIST (смешанный Национальный институт стандартов и технологий базы данных) большая база данных рукописных цифр, которая обычно используется для подготовки различных обработки изображений систем. База данных также широко используется для обучения и тестирования в области машинного обучения. Он был создан "повторного перемешивания" образцов из исходных наборов данных НИСТ. Создатели считали, что, поскольку подготовка набора данных NIST была взята из американского Бюро переписи работников, в то время как тестирование набора данных была взята из американской средней школы студентов, это было не очень хорошо подходит для машинного обучения экспериментов.

Рассмотрим общие сведенья о каждой из библиотек.

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.

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

В процессе обучения моделей применяются различные методы оптимизации. Разработчики Caffe предоставляют реализацию ряда методов:

  • Стохастический градиентный спуск (Stochastic Gradient Descent, SGD) [6].

  • Алгоритм с адаптивной скоростью обучения (adaptive gradient learning rate algorithm, AdaGrad) [7].

  • Ускоренный градиентный спуск Нестерова (Nesterov’s Accelerated Gradient Descent, NAG) [8].

В библиотеке Caffe топология нейросетей, исходные данные и способ обучения задаются с помощью конфигурационных файлов в формате prototxt. Файл содержит описание входных данных (тренировочных и тестовых) и слоев нейронной сети. Рассмотрим этапы построения таких файлов на примере сети “логистическая регрессия” (рис. 1). Далее будем считать, что файл называется linear_regression.prototxt, и он размещается в директории examples/mnist.

Рис. 2. Структура нейронной сети

Pylearn2

Pylearn2 — библиотека, разрабатываемая в лаборатории LISA в университете Монреаля с февраля 2011 года. Имеет около 100 разработчиков на GitHub. Библиотека распространяется под лицензией BSD 3-Clause.

Pylearn2 реализована на языке Python, в настоящее время поддерживается операционная система Linux, также возможен запуск на любой операционной системе с использованием виртуальной машины, т.к. разработчики предоставляют сконфигурированную обертку виртуальной среды на базе Vagrant. Pylearn2 является надстройкой над библиотекой Theano. Дополнительно требуются PyYAML, PIL. Для ускорения вычислений Pylearn2 и Theano используют Cuda-convnet, которая реализована на C++/CUDA, что дает значительный прирост в скорости.

В Pylearn2 поддерживается возможность создания полностью связанных и сверточных нейросетей, различных видов автокодировщиков (Contractive Auto-Encoders, Denoising Auto-Encoders) и ограниченных машин Больцмана (Gaussian RBM, the spike-and-slab RBM).

Предусмотрены несколько функций ошибки:

  • кросс-энтропия (cross-entropy),

  • логарифмическое правдоподобие

  • (log-likelihood).

Имеются следующие методы обучения

  • Пакетный градиентный спуск (Batch Gradient Descent, BGD).

  • Стохастический градиентный спуск (Stochastic Gradient Descent, SGD).

  • Нелинейный метод сопряженных градиентов (Nonlinear conjugate gradient descent, NCG).

В библиотеке Pylearn2 нейросети задаются с помощью их описания в конфигурационном файле в формате YAML. YAML-файлы являются удобным и быстрым способом сериализации объектов, так как она разработана с использованием методов объектно-ориентированного программирования.

Тоrсh

Torch— библиотека для научных вычислений с широкой поддержкой алгоритмов машинного обучения. Разрабатывается Idiap Research Institute, New York University и NEC Laboratories America, начиная с 2000г., распространяется под лицензией BSD.

Основных функции torch:

  • мощный N-мерный массив

  • множество процедур для индексации, нарезка, транспонирование, ...

  • удивительный интерфейс C, через LuaJIT

  • линейные процедуры алгебры

  • нейронная сеть, и энергетические модели на основе

  • числовые процедуры оптимизации

  • Поддержка быстрого и эффективного GPU

  • Встраиваемый, с портами для IOS, Android и FPGA бэкэндов

Библиотека реализована на языке Lua с использованием C и CUDA. Быстрый скриптовый язык Lua в совокупности с технологиями SSE, OpenMP, CUDA позволяют Torch показывать неплохую скорость по сравнению с другими библиотеками. На данный момент поддерживаются операционные системы Linux, FreeBSD, Mac OS X. Основные модули также работают и на Windows. В зависимостях Torch находятся пакеты imagemagick, gnuplot, nodejs, npm и другие.

Библиотека состоит из набора модулей, каждый из которых отвечает за различные стадии работы с нейросетями. Так, например, модуль nn обеспечивает конфигурирование нейросети (определению слоев, и их параметров), модуль optim содержит реализации различных методов оптимизации, применяемых для обучения, а gnuplot предоставляет возможность визуализации данных (построение графиков, показ изображений и т.д.). Установка дополнительных модулей позволяет расширить функционал библиотеки.

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

  • Полносвязный слой (Linear).

  • Функции активации: гиперболический тангенс (Tanh), выбор минимального (Min) или максимального (Max), softmax-функция (SoftMax) и другие.

  • Сверточные слои: свертка (Convolution), прореживание (SubSampling), пространственное объединение (MaxPooling, AveragePooling, LPPooling), разностная нормализация (SubtractiveNormalization).

Функции ошибки: средне-квадратичная ошибка (MSE), кросс-энтропия (CrossEntropy) и т.д.

При обучении могут использоваться следующие методы оптимизации:

  • Стохастический градиентный спуск (SGD),

  • Усредненный стохастический градиентный спуск (Averaged SGD) [9].

  • Алгоритм Бройдена – Флетчера – Гольдфарба – Шанно (L-BFGS) [10].

  • Метод сопряженных градиентов (Conjugate Gradient, CG).

Theano

Theano — это расширение языка Python, позволяющее эффективно вычислять математические выражения, содержащие многомерные массивы. Библиотека получила свое название в честь имени жены древнегреческого философа и математика Пифагора — Феано (или Теано). Theano разработана в лаборатории LISA для поддержки быстрой разработки алгоритмов машинного обучения.

Библиотека реализована на языке Python, поддерживается на операционных системах Windows, Linux и Mac OS. В состав Theano входит компилятор, который переводит математические выражения, написанные на языке Python в эффективный код на C или CUDA.

Theano предоставляет базовый набор инструментов для конфигурации нейросетей и их обучения. Наибольшее признание Theano получила в задачах машинного обучения при решении задач оптимизации. Библиотека позволяет использовать возможности GPU без изменения кода программы, что делает ее незаменимой при выполнении ресурсоемких задач. Возможна реализация многослойных полностью связанных сетей (Multi-Layer Perceptron), сверточных нейросетей (CNN), рекуррентных нейронных сетей (Recurrent Neural Networks, RNN), автокодировщиков и ограниченных машин Больцмана. Также предусмотрены различные функции активации, в частности, сигмоидальная, softmax-функция, кросс-энтропия. В ходе обучения используется пакетный градиентный спуск (Batch SGD).

Сравнение библиотек на примере задачи классификации рукописных цифр Тестовая инфраструктура В ходе экспериментов по оценке производительности библиотек использована следующая тестовая инфраструктура:
  1. Ubuntu 12.04, Intel Core i5-3210M @ 2.5GHz (CPU эксперименты).
  2. Ubuntu 14.04, Intel Core i5-2430M @ 2.4GHz + NVIDIA GeForce GT 540M (GPU эксперименты).

  3. GCC 4.8, NVCC 6.5.

Топологии сетей и параметры обучения

Вычислительные эксперименты проводились на полносвязной и сверточной нейронных сетях следующей структуры:

  1. Трехслойная полносвязная нейронная сеть (MLP,):

  • 1st layer – FC (in: 784, out: 392, activation: tanh).

  • 2d layer – FC (in: 392, out: 196, activation: tanh).

  • 3d layer – FC (in: 196, out: 10, activation: softmax).

Рис 3. Структура трехслойной полносвязной сети

Сверточная нейронная сеть (CNN, ):

  • 1st layer – convolution (in filters: 1, out filters: 28, size: 5x5, stride: 1x1).

  • 2d layer – max-pooling (size: 3x3, stride: 3x3).

  • 3d layer – convolution (in filters: 28, out filters: 56, size: 5x5, stride 1x1).

  • 4th layer – max-pooling (size: 2x2, stride: 2x2).

  • 5th layer – FC (in: 224, out: 200, activation: tanh).

  • 6th layer – FC (in: 200, out: 10, activation: softmax).

Рис 4. Структура сверточной нейронной сети

Все веса инициализировались случайным образом согласно равномерному закону распределения в диапазоне (−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.

Тестирование проходила на базе данных MNIST

Время обучения нейронных сетей, описанных ранее (рис.3,4) помощью четырех рассмотренных библиотек, представлено ниже (рис. 5). Легко заметить, что Pylearn2 показывает худшую производительность (как на CPU, так и на GPU) по сравнению с другими библиотеками. Что же касается остальных, время обучения сильно зависит от структуры сети. Лучший результат среди реализаций сетей, запущенных на CPU, показала библиотека Torch (причем на CNN она обогнала саму себя же, запущенную на GPU). Среди GPU-реализаций наилучший результат (на обеих сетях) показала библиотека Caffe. В целом от использования Caffe остались только положительные впечатления.

CPU реализации

GPU реализации

Рис 5. Время обучения сетей MLP и CNN,

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

Рис. 6. Время классификации одного изображения с помощью обученных сетей MLP и CNN

Если обратиться к точности классификации, то на сети MLP оно выше 97.4%, а CNN — ~99% для всех библиотек. Полученные значения точности несколько ниже приведенных на сайте 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

Сравнение выбранных библиотек

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

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

  • Скорость классификации отражает время классификации одного изображения.

  • Удобство использования — критерий, который позволяет оценить время, затраченное на изучение библиотеки.

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

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

  • Наличие и удобство использования документации и обучающих материалов

Рассмотрим оценки, полученные по каждому критерию, расставим места каждой библиотеке от первого до третьего (таблица 3). Согласно результатам вычислительных экспериментов с точки зрения скорости работы наиболее предпочтительной является библиотека Caffe При этом она же оказалась наиболее удобной в использовании. С позиции гибкости библиотека Theano показала наилучшие результаты. По функциональным возможностям наиболее полной является Pylearn2, но ее использование осложнено необходимостью понимания внутреннего устройства (формирование YAML-файлов требует этого). Наиболее подробный и понятный материал для изучения предоставляют разработчики Torch. Показав средние показатели по каждому критерию в отдельности, именно она и выиграла в рейтинге рассмотренных библиотек.

Таблица 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 не уступают ей, поэтому нельзя исключать возможность их последующего использования. В дальнейшем для создания курса лекций исследования применимости методов глубокого обучения к задачам детектирования лиц, пешеходов и автомобилей планируется применять библиотеки Torch.

Список литературы

  1. Kustikova, V.D., Druzhkov, P.N.: A Survey of Deep Learning Methods and Software for Image Classification and Object Detection. In: Proc. of the 9th Open German-Russian Workshop on Pattern Recognition and Image Understanding. (2014)

  2. Hinton, G.E.: Learning Multiple Layers of Representation. In: Trends in Cognitive Sciences. Vol. 11. pp. 428-434. (2007)

  3. LeCun, Y., Kavukcuoglu, K., Farabet, C.: Convolutional networks and applications in vision. In: Proc. of the IEEE Int. Symposium on Circuits and Systems (ISCAS). pp. 253-256. (2010)

  4. Hayat, M., Bennamoun, M., An, S.: Learning Non-Linear Reconstruction Models for Image Set Classification. In: Proc. of the IEEE Conf. on Computer Vision and Pattern Recognition. (2014)

  5. Restricted Boltzmann Machines (RBMs), www.deeplearning.net/tutorial/rbm.html.

  6. Bottou, L.: Stochastic Gradient Descent Tricks. Neural Networks: Tricks of the Trade, research.microsoft.com/pubs/192769/tricks-2012.pdf.

  7. Duchi, J., Hazan, E., Singer, Y.: Adaptive Subgradient Methods for Online Learning and Stochastic Optimization. In: The Journal of Machine Learning Research. (2011)

  8. Sutskever, I., Martens, J., Dahl, G., Hinton, G.: On the Importance of Initialization and Momentum in Deep Learning. In: Proc. of the 30th Int. Conf. on Machine Learning. (2013)

  9. Усредненный стохастический градиентный спуск (ASGD), research.microsoft.com/pubs/192769/tricks-2012.pdf.

  10. Алгоритм Бройдена-Флетчера-Гольдфарба-Шанно, en.wikipedia.org/wiki/Limited-memory_BFGS.

Просмотров работы: 902