среда, 17 ноября 2010 г.

Нейросетевое решение задачи классификации

Наконец-то удалось сделать нормальный классификатор для пакета нейросетевого анализа. (http://github.com/allchemist/annil).

Сеть каскадной корреляции, обучаемая с помощью алгоритма quickprop. Насколько я понимаю, эта связка является наиболее эффективным на настоящий момент алгоритмом такого назначения.

Затратил на реализацию этой связки достаточно много усилий, т.к. архитектура довольно редкая, литературы по ней мало.

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

Алгоритм каскадной корреляции настраивает архитектуру сети самостоятельно, добавляя по одному узлу, который обучается извлекать следующий наиболее важный признак (процедура исчерпания, аналогичная ортогонализации Грама-Шмидта).

В результате, архитектура обладает отличной способностью к решению задач классификации, не обладая при этом многими неприятными особенностями обратного распространения.

Как quickprop, так и каскадная корреляция, разработаны Скотом Фальманом, одним из разработчиков CMU CL, также известным как изобретатель смайликов. :)
Авторские статьи по этим алгоритмам лежат тут: http://www-2.cs.cmu.edu/~sef/sefPubs.htm

Реализация тестировалась на нескольких задачах, которые считаются довольно сложными (two spirals, ocr, некоторые задачи проекта elena). Сеть успешно справилась с задачами и показала даже большую эффективность, чем авторская реализация.

В ближайшее время подготовлю примеры использования с красявыми картинками :)

5 комментариев:

  1. Крут! Научи её парсить капчи :)

    ОтветитьУдалить
  2. А обученная таким образом нейросеть лучше или хуже, чем SVM?

    ОтветитьУдалить
  3. 2dmitry-vk

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

    Вообще, можно и бенчмарки провести

    ОтветитьУдалить
  4. @dmitry-vk

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

    ОтветитьУдалить
  5. 2archimag

    Угу, обычно так, а может быть и наоборот. Все зависит от выбора алгоритма обучения. SMO использует выпуклую квадратичную оптимизацию и поэтому быстрее градиентного метода (опять же, если выбранная архитектура сети SVM способна решить задачу).

    Да, я обязательно добавлю в пакет SVM (свою или через какой-нибудь libsvm), но если вдруг кто-то захочет потестить SVM на задаче о двух спиралях, я буду очень рад :)

    ОтветитьУдалить