...

четверг, 15 августа 2013 г.

Отдам библиотеку в хорошие руки

Давным давно, в 2008 году, когда я работал над своей диссертацией меня заинтересовала тема применения сверточных нейронных сетей для задач распознавания изображений. На тот момент они еще не были так популярны как сейчас и попытка найти готовые библиотеки ни к чему не привела — нашлась только реализация на Lush (языке созданном автором сверточных сетей, Яном ЛеКуном). Тогда я подумал, что можно было бы их реализовать на Матлабе используя Neural Network Toolbox. Но столкнулся с невозможностью реализации разделяемых весов в рамках этого тулбокса. И тогда было принято решение написать собственную реализацию.



Первоначально она была сделана на чистом матлабе. Чуть позже я реализовал функции прямого и обратного распространения на CUDA. Эта версия лежит на Matlabcentral и до сих пор имеет по 162 закачки в месяц.

Это, кстати, была первая в интернете версия сверточных сетей на CUDA.

image

Используя эту реализацию я написал пост Применение нейросетей в распознавании изображений.


Поняв что интерес к теме очень большой, я решил переписать библиотеку и сделать ее полностью на C++/CUDA оставив поддержку Матлаба как фронтенда. Так появилась CudaCnn. Эту разработку я уже, по сути, вел в свободное от работы время. Позже я поменял работу и мои возможности вести open source разработку стали очень ограниченными.


С момента начала работы над библиотекой тема сверточных нейронных сетей и deep learning стала очень популярной. Особый всплеск популярности произошел после того как команда Джефри Хинтона, используя свою реализацию сверточных сетей на CUDA (написанную Алексом Крыжевским) победила с большим отрывом от конкурентов в конкурсе Large Scale Visual Recognition Challenge. Сейчас Google использует эту технологию для поиска по картинкам.


Сейчас моя библиотека хостится на bigbucket, страницу с описанием посещает порядка 130 человек в месяц:

image

что конечно-же совсем немного для какого-нибудь блога, но для весьма специализированной библиотеки рассчитанной на узкий круг исследователей не так уж и мало. Кстати, основная масса посещений из Штатов и Китая. Кроме того, мне периодически пишут пользователи с просьбой что-нибудь добавить или исправить и у меня даже не всегда есть время им ответить.


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



  • Возможность работы на CPU и GPU (CUDA)

  • Кросс-платформенная (на основе CMake), в т.ч. компилируется под ARM с некоторыми ограничениями

  • Методы обучения: стохастический градиент, стохастический Левенберг-Марквардт

  • Слои: convolutional, pooling, fully connected

  • Активационные функции: тангенциальная, линейная, тангенциальная с нормализованной дисперсией

  • Произвольный размер и форма ядер свертки (в других реализациях есть ограничения)

  • Наличие фронт-энда для Matlab




Также есть вещи над которыми еще стоило бы поработать. В частности, код для CPU не оптимизирован по скорости, CUDA код тоже есть куда развивать, не помешала бы doxygen документация.

Как я уже отметил выше, у меня на данный момент не осталось ни времени ни возможностей для поддержки библиотеки, поэтому если кого-то заинтересует участие в ее развитии, я готов оказать всяческую помощь. Думаю это может быть полезным для тех, кому хотелось бы поучаствовать в open source проекте, плюс получить опыт в области Machine learning, применить технологии deep learning для своих задач, получить опыт CUDA разработки.


Кто заинтересовался, пишите мне в ЛС.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends: 'You Say What You Like, Because They Like What You Say' - http://www.medialens.org/index.php/alerts/alert-archive/alerts-2013/731-you-say-what-you-like-because-they-like-what-you-say.html


Комментариев нет:

Отправить комментарий