Фундаментальные ограничения машинного обучения
Недавно моя тётя разослала своим коллегам емейлы с темой «задачка по математике! Какой правильный ответ?» В письме была обманчиво простая головоломка:
1 + 4 = 5
2 + 5 = 12
3 + 6 = 21
8 + 11 =?
Для неё решение был очевидным. Но её коллеги решили, что правильным было их решение – не совпавшее с её решением. Проблема была с одним из их ответов, или с самой головоломкой?
Моя тётя и её коллеги наткнулись на фундаментальную проблему машинного обучения, дисциплины, изучающей обучающиеся компьютеры. Практически всё обучение, которое мы ждём от компьютеров – и которым занимаемся сами – состоит в сокращении информации до основных закономерностей, на основании которых можно делать выводы о чём-то неизвестном. И её загадка была такой же.
Для человека задача состоит в поиске какой бы то ни было закономерности. Конечно, наша интуиция ограничивает спектр наших догадок. Но у компьютеров нет интуиции. С точки зрения компьютера сложность в распознавании закономерностей – в их избытке: если существует бесконечное количество одинаково правомерных закономерностей, из-за чего какие-то оказываются правильными, а какие-то – нет?
И эта проблема совсем недавно перешла в практическую плоскость. До 1990-х системы ИИ вообще редко занимались машинным обучением. Допустим, шахматный компьютер Deep Thought, предшественник Deep Blue, не научился шахматам методом проб и ошибок. Вместо этого шахматные гроссмейстеры и волшебники программирования тщательно создавали правила, по которым можно было разбираться в том, хорошая или плохая получается шахматная позиция. Такая скрупулёзная ручная подстройка была типичной для «экспертных систем» того времени.
Чтобы взяться за загадку моей тёти при помощи подхода экспертных систем, необходимо, чтобы человек, прищурившись, взглянул на первые три ряда примеров и заметил в них следующую закономерность:
Затем человек дал бы компьютеру команду следовать закономерности x * (y + 1) = z. Применив это правило к последнему результату, мы получим решение – 96.
Несмотря на ранние успехи экспертных систем, ручной труд, требовавшийся для их разработки, подстройки и обновления, стал неподъёмным. Вместо этого исследователи обратили внимание на разработку машин, способных распознавать закономерности самостоятельно. Программа могла, к примеру, изучить тысячу фотографий или рыночных транзакций и вывести из них статистические сигналы, соответствующие лицу на фото или всплеску цен на рынке. Такой подход быстро стал доминирующим, и с тех пор лежит в основе всего, от автоматической сортировки почты и фильтрования спама до обнаружения мошенничества с кредитными картами.
Но, несмотря на все успехи, эти системы МО требуют наличия программиста где-то в процессе. Возьмём в качестве примера загадку моей тёти. Мы предположили, что в каждой строке есть три значимых компонента (три числа в строке). Но в ней существует потенциальный четвёртый элемент – результат с предыдущей строки. Если это свойство строки допустимо, тогда проявляется другая правдоподобная закономерность:
По этой логике итоговый ответ должен быть равен 40.
Какая же закономерность верна? Естественно, обе – и ни одна из них. Всё зависит от того, какие закономерности допустимы. Можно, например, построить закономерность, взяв первое число, умножив на второй, добавив одну пятую от суммы предыдущего ответа и тройки, и округлить всё это до ближайшего целого (очень странно, но работает). А если мы разрешим использовать свойства, связанные с внешним видом цифр, возможно, найдётся последовательность, связанная с засечками и линиями. Поиск закономерностей зависит от предположений наблюдателя.
То же верно и для МО. Даже когда машины обучают сами себя, предпочтительные закономерности выбираются людьми: должно ли ПО для распознавания лиц содержать явные правила если/то, или оно должно расценивать каждую особенность как дополнительное доказательство в пользу или против каждого возможного человека, которому принадлежит лицо? Какие особенности изображения должно обрабатывать ПО? Нужно ли ей работать с отдельными пикселями? А может, с гранями между светлыми и тёмными участками? Выбор подобных вариантов ограничивает то, какие закономерности система сочтёт вероятными или даже возможными. Поиск этой идеальной комбинации и стал новой работой специалистов по МО.
Но процесс автоматизации на этом не остановился. Точно так же, как когда-то программисты замучались писать правила работы, теперь они с неохотой отнеслись к разработке новых возможностей. «Разве не было бы здорово, если бы компьютер сам смог разобраться, какие особенности ему нужны?» Так что они разработали нейросети с глубинным обучением – технологию МО, способную самостоятельно делать выводы о свойствах высокого уровня на основе более простой информации. Скормите нейросети набор пикселей, и она научится учитывать края, кривые, текстуры – и всё это без прямых инструкций.
И что же, программисты лишились работы из-за Одного Алгоритма, Чтоб Править Всеми?
Пока нет. Нейросети пока ещё не могут идеально подойти к любым задачам. Даже в лучших случаях их приходится подстраивать. Нейросеть состоит из слоёв «нейронов», каждый из которых выполняет подсчёты на основе входных данных и выдаёт результат следующему слою. Но сколько понадобится нейронов и сколько слоёв? Должен ли каждый нейрон принимать входные данные с каждого нейрона предыдущего уровня, или некоторые нейроны должны быть более избирательными? Какое преобразование должен проводить каждый нейрон над входными данными для выдачи результата? И так далее.
Эти вопросы ограничивают попытки применения нейросетей к новым задачам; нейросеть, прекрасно распознающая лица, совершенно неспособна на автоматический перевод. И снова выбранные человеком элементы конструкции явно подталкивают сеть к определённым закономерностям, уводя её от других. Знающий человек понимает, что не все закономерности созданы равными. Программисты пока не останутся без работы.
Конечно, следующим логичным шагом будут нейросети, самостоятельно догадывающиеся о том, сколько нужно включать нейронов, какие связи использовать, и т.д. Исследовательские проекты на эту тему ведутся уже много лет.
Как далеко это может зайти? Научатся ли машины работать самостоятельно настолько хорошо, что внешняя подстройка превратится в старомодную реликвию? В теории, можно представить себе идеального универсального ученика – такого, который сам может решать всё для себя, и всегда выбирает наилучшую схему для выбранной задачи.
Но в 1996-м специалист по информатике Дэвид Уолперт доказал невозможность существования такого ученика. В его знаменитых «теоремах об отсутствии бесплатных обедов» он показал, что для любой закономерности, которой ученик хорошо обучается, существует закономерность, которой он будет обучаться ужасно. Это возвращает нас к загадке моей тёти – к бесконечному количеству закономерностей, которое может возникать из конечных данных. Выбор обучающего алгоритма означает выбор закономерностей, с которыми машина будет справляться плохо. Возможно, все задачи, к примеру, распознавания образов, в итоге попадут в один всеобъемлющий алгоритм. Но ни один обучающийся алгоритм не может одинаково хорошо обучаться всему.
Это делает машинное обучение неожиданно похожим на человеческий мозг. Хотя мы любим считать себя умными, но наш мозг тоже не учится идеально. Каждая часть мозга тщательно настроена эволюцией на распознавание определённых закономерностей – будь это то, что мы видим, язык, который мы слышим, или поведение физических объектов. Но с поиском закономерностей на фондовом рынке мы справляемся уже не так хорошо; тут машины нас обыгрывают.
История машинного обучения насчитывает много закономерностей. Но наиболее вероятной будет следующая: мы будем обучать машины обучаться ещё много лет.
Не надо учить Machine Learning
Учитесь создавать софт, используя модели машинного обучения
Дисклеймер: статья основана исключительно на моих наблюдениях за командами разработчиков в области машинного обучения и не является результатом научного обзора отрасли. Для справки, я помогаю разрабатывать Cortex — платформу с открытым исходным кодом для запуска моделей в производство.
Если вы разработчик, то, мимолетный интерес к машинному обучению у вас как минимум есть. Концепция алгоритма, которые учатся, чтобы потом делать прогнозы, это ведь просто… круто.
Однако, если вы решили начать изучать ML следуя всем канонам, то велика вероятность, что после двух недель линейной алгебры и многомерного анализа, вы бросите это занятие.
Причина кроется в том, что большинство вводных материалов по ML ориентированы не на разработчиков, а на исследователей — что и является проблемой для разработчиков, которые просто хотят создавать продукты с машинным обучением.
Вы хотите создавать продукты или проводить исследования?
До конца 2000-х годов машинное обучение было практически только исследовательской проблемой. Просто было не так много компаний, которые бы реально использовали машинное обучение в производстве.
Таким образом, многие ознакомительные материалы, доступные по машинному обучению, основаны на исследовательском подходе. Все начинается с объяснения нейронных сетей с математической точки зрения, и теории, лежащей в основе машинного обучения. Приводятся такие вещи, как например метод обратного распространения ошибки и состязательные сети.
Даже не связанные с университетом материалы в какой-то степени следуют этой схеме. Например, это взято непосредственно из библиотеки TensorFlow’s “Quickstart for Beginners”:
Если вам кажется, что я действую избирательно, предлагаю прочитать следующее.
Если вы уже знакомы с математикой, лежащей в основе машинного обучения, или вы вам нравится ее изучать, такой подход вам подойдет. Однако если вы в первую очередь заинтересованы в том, чтобы создавать вещи с машинным обучением, то скорее всего это не совсем то, что вы ищете.
Использовать программирование как дополнение к математике, тоже самое, что учиться писать код, выучив сначала ассамблер. Ни один разработчик так учиться не станет.
Примечание: Если каким-то образом вы научились кодить на ассамблере, я допускаю все злые комментарии в свою сторону, и впечатлен тем, что вы нашли браузер, на вашем невнятном Linux дистрибутиве.
Когда вы научились кодить, вы, скорее всего, сделали это, написав “hello world” на языке высокого уровня. Затем, по мере усложнения проектов, вы начали изучать низкоуровневое программирование.
Эта модель обучения успешна среди людей, которые создают программное обеспечение, потому что она четко расставляет приоритеты при работе над проектом. Если вы больше заинтересованы в создании рекомендательной системы, нежели в публикации статьи, то именно так вы должны подходить к изучению машинного обучения.
Как изучить ML, создавая софт
Если вы относитесь к тому типу людей, которые лучше всего учатся, проходя курсы, то лучшим ресурсом, пропагандирующим этот нисходящий, учись-в-процессе подход к работе с ML, будет курс на портале fast.ai Practical Deep Learning For Coders.
Цель статьи вовсе не в том, чтобы прорекламировать fast.ai, но стоит отметить, что основатели платформы (Джереми Говард и Рэйчел Томас) собрали несколько курсов для разработчиков с глубоким обучением, которые буквально заставляют создавать вещи, углубляясь в основную теорию, поскольку она непосредственно связана с проектом. Чтобы лучше понять их стиль обучения, посмотрите видео с Рэйчел Томас.
С другой стороны, если вы относитесь к тому типу людей, которые лучше всего учатся, погружаясь и создавая вещи самостоятельно, то начать освоение машинного обучения можно точно также, как и в любой другой сфере программирования. Просто выберете проект, который вам интересен — я собрал гигантский список проектов по обработке естественного языка для новичков — выбирайте.
Чтобы лучше понять, что такое создание софта с ML (если вы идете этим путем):
После того как модель развернута в виде API, вы можете запросить ее, как и любую другую веб-службу, и построить вокруг нее свое приложение.
Вы можете посмотреть реальное применение этого процесса в проекте, созданном сольным инженером, занимающимся машинным обучением.
Благодаря такому методу изучения вы можете познакомиться с различными популярными архитектурами моделей, узнать о других подходах к машинному обучению, и для каких приложений они предназначены. Не менее важно и то, что вы узнаете об инфраструктуре машинного обучения, которая необходима для построения реальных продуктов на основе моделей.
Как только вы сможете создавать продукты, основанные на ML, приступайте изучать теорию
Будучи инженером, вы, вероятно, уже внедрили какую-нибудь форму аутентификации ранее, что означает, что вы (я надеюсь) хэшировали пароли.
Аналогично, при создании первого веб-приложения вы несколько недель изучали базы данных? Вы сами написали с нуля? Или вы использовали случайный ОРМ вашего любимого фреймворка?
Эта же логика применима и к машинному обучению. Если вы человек, который любит создавать программное обеспечение, начните с создания софта с машинным обучением, и позвольте себе с помощью инструментов, предварительно подготовленных моделей и фреймворках машинного обучения абстрагироваться от лежащей в основе теории ML. Затем, если вам интересно или если ваш проект требует большей сложности, копните глубже, чтобы увидеть, как все это работает.

Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя онлайн-курсы SkillFactory:
Сравнение библиотек глубокого обучения на примере задачи классификации рукописных цифр
Кручинин Дмитрий, Долотов Евгений, Кустикова Валентина, Дружков Павел, Корняков Кирилл
Введение
В настоящее время машинное обучение является активно развивающейся областью научных исследований. Это связано как с возможностью быстрее, выше, сильнее, проще и дешевле собирать и обрабатывать данные, так и с развитием методов выявления из этих данных законов, по которым протекают физические, биологические, экономические и другие процессы. В некоторых задачах, когда такой закон определить достаточно сложно, используют глубокое обучение.
В статье представлен краткий обзор инструментов проектирования и обучения нейросетевых моделей. Основное внимание уделено четырем библиотекам: 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.


