NeuroPro | нейронные сети |
|
Начало Новости Услуги Нейронные сети Программы Статьи Заметки Ссылки Вопросы и ответы Об авторе / контакты |
Неисчерпаемы, как атом (о нейронных сетях и нейросетевых программах)Решив в 2008г поиграться со сверточными нейронными сетями (о них я упоминал в заметке про сильно многослойные нейронные сети), я написал отдельную программу для их реализации. Тесты велись в первую очередь на широко используемой для сравнения точностей алгоритмов распознавания базе изображений рукописных цифр (70000 начертаний цифр 0-9 от разных "писателей"). В процессе доработки программы и в ходе экспериментов, которые позволили получить результаты, пригодные для научных публикаций, в который уже раз (для меня) подтвердились следующие утверждения. 1. Мощный нейросетевой инструмент "с нуля" можно запрограммировать в тысяче строк программы. В данном случае, реализованы сверточная нейросеть с четырьмя слоями нейронов (вариант, предложенный в [1], т.е. без промежуточных слоев ресэмплинга, как в более классической версии [2,3]) и многослойный персептрон с одним скрытым слоем. При этом возможен выбор из нейронов с нелинейной функцией и без нее для выходного слоя, выбор одной из двух целевых функций для обучения нейросетей, использование (или не использование) одной из эмпирик для инициализации весов синапсов при создании сети, задание шага обучения и возможность использования одного из приемов изменения шага от эпохи к эпохе, использование (или неиспользование) одной из эмпирик по послойному управлению величиной шага обучения. Обучение на основе алгоритма обратного распространения ошибки можно вести как в однопоточном, так и в параллельном (многопоточном) режиме. Кроме этого, реализованы генератор эластичных искажений (с настраиваемыми параметрами) обучающих образов, мониторинг ошибок обучения и обобщения от эпохи к эпохе в ходе обучения нейронной сети, сохранение нейросетей в файлах и чтение из них, еще несколько мелочей. И всё это укладывается в 1000 строк кода. 2. Такой малый, на первый взгляд, объем программы и значительное число возможных регулировок (выборов того или иного сочетания режимов создания/обучения сети) позволяют один раз быстро создать инструмент, а затем долгое время получать с него дивиденды как в рамках исследований данных алгоритмов применительно к одной задаче, так и в рамках практически мгновенной доработки под другую задачу (работу с другой базой изображений). 3. Создание такого инструмента под силу, конечно, не студенту - а довольно компетентному специалисту по нейросетям (требуется выбор актуальных для дальнейшего алгоритмов и понимание вопросов, которые надо перед программой и алгоритмами ставить, например, для получения результатов для научной работы). Также и программистская квалификация должна быть если не высокой, то, наверно, лежащей в "ортогональной" к традиционному мнению плоскости. Моя программа даже в однопоточном варианте работает на порядок быстрее двухпоточной реализации сверточной сети - потому, что я не использовал объектно-ориентированный подход и библиотеку шаблонов, зато использовал несколько хитрушек - например, развертывание циклов. Нет, та статья, программа и автор не зря получили приз месяца на сайте - просто каждый выбирает либо скорость, либо использование тех или иных технологий. А если выбираем и получаем скорость, то с созданным инструментом можно решать гораздо более крутые задачи - например, задачу распознавания трехмерных объектов на снимках, которая по размеру на два порядка тяжелее задачи MNIST: один порядок скорости я выиграл и без распараллеливания, и при использовании четырехъядерных процессоров может и не понадобиться компьютерного кластера, как у решавших задачу NORB авторов статьи [3]. Т.е. программистские ноу-хау позволяют начать решать "дома" задачи, до которых другие могут добраться не скоро, или для решения которых сейчас потребны "недетские" затраты на суперкомпьютерную технику. 4. О том, что для достижения наилучшей точности решения задачи приходится экспериментально находить оптимальные сочетания настроек алгоритмов и размеров нейросети, да и структур нейросети (всё это хорошо демонстрируют приведенные в [1-3] показатели точности обобщения). Кто-то может сказать "фи" на то, что авторы-разработчики-пользователи (я сам и авторы статей [1-3]) блуждают в трех соснах и способны находить наилучшее решение только методом "тыка" - т.е. даже допускающие реализацию в 1000 строк методы и алгоритмы обладают такими особенностями поведения, которые не позволяют с близкой к единице вероятностью находить околомаксимальное по точности решение в ходе единственного эксперимента. На это можно ответить тем, что другие методы в данных задачах демонстрируют гораздо меньшую точность (для задачи наиболее полная таблица результатов статистических методов приведена на её страничке). Поэтому, как и со скоростью работы программы, решение (в данном случае - выбор того или иного метода, а конкретно, нейросетевого) принимает сам пользователь: шашечки ему нужны - или всё-таки ехать. 5. О названии заметки. То, что в короткую программу укладывается столько возможностей выбора алгоритмов и их настроек, что перебирать их можно пусть и не до второго пришествия, но всё же долго - как раз о наборе возможностей. Которые открываются в тем большем количестве, чем выше квалификация создателя (это касается скорости работы программы, выбора методов и структур нейросетей, выбора влияющих на точность решения и обобщения алгоритмов) и чем интенсивнее и целенаправленнее создатель хочет затем эксплуатировать программу (например, передавая "нажимание кнопок"=эксперименты в руки усидчивых студенток, а самому сосредотачиваясь на привлечении пригодных для созданного инструмента задач со стороны, ну и конвертируя в итоге результаты и решения в статьи и деньги). И, конечно, сами-то нейронные сети только сверточными нейросетями и применимыми только к сверточным сетям алгоритмами не исчерпываются - неисчерпаемый атом получается неединственным.
PS. Владельцам "тяжелых" (набор изображений "весит" гигабайт и больше) задач распознавания изображений и объектов на изображениях готов предоставить демо-версию программы для подтверждения заявленного в заметке превосходства в скорости работы на порядок. Но - только после согласия отдать эти задачи в мои руки, если скорость подтвердится (наряду с достижением околопредельных точностей решения по ориентирам из статей [1-3]). |