Работает сама нейросеть довольно быстро. Медленно лишь ее «обучение», когда необходимо тысячи, миллионы раз прогнать ее по множеству обучающих наборов, шаблонов.
«Большинство людей под «обычными» или «классическими» нейросетями понимает полносвязные нейронные сеть прямого распространения с обратным распространением ошибки»
Большинство людей не поймут о чем это предложение =)
А не подскажете, где можно почитать про распознавание изображений с помощью радиально-базисных сетей?
А то везде, где ищу пишут, примерно как у вас «также успешно используются радиальные базисные функции». Заменяя слово «успешно» на «возможно», «можно» и т.п.
1) ISBN 5-03-002115-9; Саймон Хайкин «Нейронные сети: полный курс»
2) ISBN 5-279-02567-4, 83-7207-187-X; Станислав Осовский «Нейронные сети для обработки информации»
На русском языке по использованию RBF в распознавании изображений я ничего не видел. Да и вообще мало чего есть современного в этой области на русском. В качестве примера могу предложить статью Y. LeCun, L. Bottou, Y. Bengio and P. Haffner: Gradient-Based Learning Applied to Document Recognition, Proceedings of the IEEE, 86(11):2278-2324, November 1998.
Радиальные базисные сети редко используются самостоятельно в задачах распознавания изображений. Их обычно ставят на выходе. Смысл их можно приблизительно пояснить следующим сравнением: если функции активации такие как линейная, логистическая, тангенциальная и другие делят гиперпространство гиперплоскостью (читать как делят плоскость на две области прямой), то радиальные базисные функции активации делят гиперпространство на «внутри сферы» и «вне сферы», что в задачах классификации часто бывает полезно.
каптча еще актуальна, ввиду сложности создания подобных решений и отсутствия плаг-н-плай модулей. спамерам еще прийдется попотеть для реализации подобного
сложно сказать. но глубоко надеюсь, что данная проблема не будет решаться каким-нибудь таким образом. Это должны быть алгоритмы классификации, которые на основе обученной сети по входным признакам будут определять на выходе является ли пользователь роботом, или нет
Указанный Вами «какой-нибудь такой» способ решается по первому кадру или по некоторому из кадров где получена максимальная достоверность распознанных образов.
Как приятно видеть на хабре такие статьи. Сам минувшими весной-летом очень увлёкся convolutional networks. Клюнул именно на заявленную «мозгоподобность» сетей, что в общем-то местами похоже на правду. А если верить Jew Hawkins «On intelligence», где довольно убедительно говорится, что области кортекса мозга не имеют ярко выраженной специализации и одинаково обрабатывают всю входящую информацию (будь то зрительные, звуковые, сенсорные или даже логические образы) — то свёрточная сеть представлялась мне универсальным распознователем или хотя бы классификатором (хотя я замахнулся сразу на задачи кластеризации). Однако эксперимент, подтверждённый затем логическими выкладками, показал, что механизм выделения локальных признаков, кроме изображений, ограниченно полезен лишь в обработке звуков, и совершенно бесполезен в наиболее интересной мне задаче кластеризации текстов. Это вызвало у меня довольно сильное разочарование в свёрточных сетях (хотя они по большому счёту не виноваты =) просто мозгоподобность тут не при чём) и заставило вернуться к извращениям над картами Кохонена.
И всё же большое вам спасибо за просвещение, если я правильно помню, то до вас на русском языке видел лишь одну махонькую заметку о свёрточных сетях =) Пишите ещё, пожалуйста.
Для вас важно именно кластеризовать? Потому что если вам в дальнейшем все равно нужно его распознавать, то можно использовать space displacement convolutional network. По сути это то же, о чем я написал, только окошко размером 32х32 гоняется по всему изображению и у нас для каждого его участка получается вектор, который сообщает, какова вероятность, что на этом месте есть буква, и какая эта буква. Эти вероятности уже можно использовать для дальнейшего анализа.
Да, я видимо не совсем ясно выразился =) Текст не требует распознования, это обычный электронный документ — его надо только «отсортировать» по тематике (document clustering, задача data mining в общем-то, но у нас немного особый подход). Работающий пример — WEBSOM. Но мы делаем штуку, которая работает в реальном времени (а не пакетно), осуществляет нечёткую кластеризацию и не боится выбросов.
Я тоже недавно столкнулся со свёрточными сетями и хотел изучить их поближе. Теперь есть от чего оттолкнуться. :)
Кстати, по поводу выбора архитектуры сети. Известно, что SVM с ядром определённой конфигурации (RBF в том числе) будет эквивалетен двуслойной нейросети. При этом количество нейронов на скрытых слоях определяется автоматически (в оптимальном ключе).
Да, на счет SVM вы правы, но это все же shallow-архитектура (поверхностная). Линейная комбинация нелинейных ядер, как в SVM, не даст возможности обучения глубоким иерархиям.
Имеются ввиду сложные многомерные функции. С одной стороны SVM, являющийся по сути механизмом взвешенного сравнения с шаблоном, а с другой стороны «глубокие архитектуры», одним из частных случаев которых являются нейронные сети. Почитать об этом можно, например, здесь Hinton, G. E., Osindero, S. and Teh, Y. (2006) A fast learning algorithm for deep belief nets. Neural Computation, 18, pp 1527-1554.
В т.н. глубоких архитектурах низкоуровневые признаки объединяются в высокоуровневые абстрактные представления. Для SVM при определенном усложнении задачи наступает проклятье размерности — их становится просто не выгодно использовать.
Хорошая статься, но было бы неплохо написать про такие бяки нейросетей, как «несходимость» и «насыщение» и методы их решения с примерами. Я бы было вообще доволен.
Да, есть такие проблемы и есть трюки чтобы их избегать. Очень важно здесь обеспечить линейное функционирование сети на первых шагах обучения. Это обычно достигается за счет правильной инициализации весов и предобработки входов.
Спасибо за статью. Вспомнил лабы в универе (больше практиковаться в нейросетях не приходилось). Приятно видеть что в альма-матер еще остались грамотные специалисты.
Спасибо.
Очень интересно было читать, правда понимал через раз, но это проблема уже моего образования.
Было бы интересно почитать основы НС с примерами.
А у нас как раз сейчас подходит к концу срок сдачи лабораторной по перцептронам и распознаванию изображений цифр, кому-нибудь будет интересно увидеть реализацию на java? Однослойная сеть конечно куда проще описанного, но для начинающих более понятна, думаю.
Сам впервые столкнулся с нейронными сетями, поэтому подобные статьи очень полезны, спасибо автору.
intelligenceAgent: А вы не рассматривали технологию HTM (http://en.wikipedia.org/wiki/Hierarchical_temporal_memory), которую с натяжкой можно назвать «не стандартной» нейронной сетью, для задач распознавания изображений. Интересно ваше мнение.
Спасибо за наводку. Прочитал по диагонали диссертацию тов. Dileep. (У нас бы такую совет не пропустил =)) Очень интересная штука этот HTM, в диссертации выдвигаются правильные идеи, которые мне лично уже давно не дают покоя — например, учет временных свойств изображений объектов для лучшего распознавания. Интересна комбинация цепей маркова, иерархичности, сетей доверия. Сама работа написана грамотно.
Однако, тут пока еще рано о чем-то судить. В диссертации очень мало внимания уделяется экспериментальной проверке идей. По большому счету там 150 стр. теории и 5 страниц результатов экспериментов, хотя по нормальному должно быть хотя бы 80%-20%. Более того автор приводит некую свою довольно примитивную базу бинарных изображений, показывает, что качество распознавания на тестовом множестве составило 57% (что не очень хорошо). И сравнивает результат с nearest-neighbour классификатором, т.е. одним из простейших.
Тут можно сказать, что софт реализующий распознавание более сложных объектов реализован и лежит на сайте, но как раз о нем никаких статей и сравнений качества распознавания применяемых там алгоритмов я не нашел.
Возможно я чего-то не знаю. Если у вас есть ссылки на другие статьи по использованию HTM в задачах распознавания, буду рад их получить.
Вообще меня вдохновили теория интелекта, изложенная в книге Джефа Хокинга «Об интелекте» — en.wikipedia.org/wiki/On_Intelligence. Я не специалист в этой области, но такая элегантная теория не может быть ложной по сути :) Да, действительно, трудно найти что-либо в сети… Мне показалась эта статья интересной www98.griffith.edu.au/dspace/handle/10072/23558 — сравнивается HTM и SVM для тойже задачи распознавания рукописных символов.
Идеи интересны. Однако меня удивило утверждение, будто ученые, работающие в области AI игнорируют исследования в области нейронаук. По моему, в последнее время, эти две области очень тесно переплетаются.
Кроме того, не будем забывать, что Хокинг бизнесмен. Это очень заметно, когда начинаешь искать литературу: очень много инрервью, рекламы, разговоров. Но очень мало научных статей и ссылок в оных на его работы.
На самом деле интересных идей довольно много, но, к сожалению, мало научно-популярных книг, объясняющих эти идеи, таких как On Intelligence.
В 3-ем пункте стоило бы упомянуть, что теоретически, первые слои простой сети тоже могут в процессе обучения выродиться в такую же свёрточную прослойку за счёт обнуления большинства коэффициентов. т.е. что такая свёрточная архитектура — фактически подмножество обычной ПНС.
Можно конечно определенным образом многократно продублировать разделяемые веса так, чтобы получился полносвязный слой (развертка). Но далее нужен субдискретизирующий слой, а к тому же при первом же проходе обратного распространения ошибки эффект разделяемых весов исчезнет.
Это из за проблем с макхостом. Обещают восстановить в ближайшие дни.
А вообще конечно не буду больше imagehost использовать, у них и до этого проблемы были.
Вопрос по реализации. Как у вас считается ошибка для ядра — например, при обратном распространенни с C-layer на Input?
У меня в голове не укладывается) Для полносвязных уровней понятно — один нейрон, одна связь с любым предыдущим нейроном. Для сверточных слоев — неясно. Если ядро — 25 связей и они «расшарены» между всеми нейронами, то как ошибка нейрона влияет на веса? Средняя ошибка для всей feaure_map вычисляется?
Считается усреднением. Т.е. если подходить к вопросу классически как в полносвязной сети, то для каждого разделяемого веса у вас будет получаться множество ошибок. Вычисляем среднее и получаем ошибку для данного разделяемого веса в ядре. Смысл введенного ограничения на веса — способности к обобщению, усреднение градиентов именно к этому и ведет. Веса становятся инвариантны к локальным особенностям изображения и лучше реагируют на независимые фичи.
Применение нейросетей в распознавании изображений