0,0
рейтинг
5 ноября 2009 в 18:27

Применение нейросетей в распознавании изображений

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

1. Задача


Итак, мы собрались решать задачу распознавания изображений. Это может быть распознавание лиц, объектов, символов и т.д. Я предлагаю для начала рассмотреть задачу распознавания рукописных цифр. Задача эта хороша по ряду причин:
  • Для распознавания рукописного символа довольно трудно составить формализованный (не интеллектуальный) алгоритм и это становится понятно, стоит только взглянуть на одну и туже цифру написанную разными людьми
  • Задача довольно актуальна и имеет отношение к OCR (optical character recognition)
  • Существует свободно распространяемая база рукописных символов, доступная для скачивания и экспериментов
  • Существует довольно много статей на эту тему и можно очень легко и удобно сравнить различные подходы

В качестве входных данных предлагается использовать базу данных MNIST. Эта база содержит 60 000 обучающих пар (изображение — метка) и 10 000 тестовых (изображения без меток). Изображения нормализованы по размеру и отцентрованы. Размер каждой цифры не более 20х20, но вписаны они в квадрат размером 28х28. Пример первых 12 цифр из обучающего набора базы MNIST приведен на рисунке:
image
Таким образом задача формулируется следующим образом: создать и обучить нейросеть распознаванию рукописных символов, принимая их изображения на входе и активируя один из 10 выходов. Под активацией будем понимать значение 1 на выходе. Значения остальных выходов при этом должны (в идеале) быть равны -1. Почему при этом не используется шкала [0,1] я объясню позже.

2. «Обычные» нейросети.


Большинство людей под «обычными» или «классическими» нейросетями понимает полносвязные нейронные сети прямого распространения с обратным распространением ошибки:
image
Как следует из названия в такой сети каждый нейрон связан с каждым, сигнал идет только в направлении от входного слоя к выходному, нет никаких рекурсий. Будем называть такую сеть сокращенно ПНС.
Сперва необходимо решить как подавать данные на вход. Самое простое и почти безальтернативное решение для ПНС — это выразить двумерную матрицу изображения в виде одномерного вектора. Т.е. для изображения рукописной цифры размером 28х28 у нас будет 784 входа, что уже не мало. Дальше происходит то, за что нейросетевиков и их методы многие консервативные ученые не любят — выбор архитектуры. А не любят, поскольку выбор архитектуры это чистое шаманство. До сих пор не существует методов, позволяющих однозначно определить структуру и состав нейросети исходя из описания задачи. В защиту скажу, что для трудноформализуемых задач вряд ли когда-либо такой метод будет создан. Кроме того существует множество различных методик редукции сети (например OBD [1]), а также разные эвристики и эмпирические правила. Одно из таких правил гласит, что количество нейронов в скрытом слое должно быть хотя бы на порядок больше количества входов. Если принять во внимание что само по себе преобразование из изображения в индикатор класса довольно сложное и существенно нелинейное, одним слоем тут не обойтись. Исходя из всего вышесказанного грубо прикидываем, что количество нейронов в скрытых слоях у нас будет порядка 15000 (10 000 во 2-м слое и 5000 в третьем). При этом для конфигурации с двумя скрытыми слоями количество настраиваемых и обучаемых связей будет 10 млн. между входами и первым скрытым слоем + 50 млн. между первым и вторым + 50 тыс. между вторым и выходным, если считать что у нас 10 выходов, каждый из которых обозначает цифру от 0 до 9. Итого грубо 60 000 000 связей. Я не зря упомянул, что они настраиваемые — это значит, что при обучении для каждой из них нужно будет вычислять градиент ошибки.
Ну это ладно, что уж тут поделаешь, красота искусственный интеллект требует жертв. Но вот если задуматься, на ум приходит, что когда мы преобразуем изображение в линейную цепочку байт, мы что-то безвозвратно теряем. Причем с каждым слоем эта потеря только усугубляется. Так и есть — мы теряем топологию изображения, т.е. взаимосвязь между отдельными его частями. Кроме того задача распозравания подразумевает умение нейросети быть устойчивой к небольшим сдвигам, поворотам и изменению масштаба изображения, т.е. она должна извлекать из данных некие инварианты, не зависящие от почерка того или иного человека. Так какой же должна быть нейросеть, чтобы быть не очень вычислительно сложной и, в тоже время, более инвариантной к различным искажениям изображений?

3. Сверточные нейронные сети


Решение этой проблемы было найдено американским ученым французского происхождения Яном ЛеКуном, вдохновленным работами нобелевских лауреатов в области медицины Torsten Nils Wiesel и David H. Hubel. Эти ученые исследовали зрительную кору головного мозга кошки и обнаружили, что существуют так называемые простые клетки, которые особо сильно реагируют на прямые линии под разными углами и сложные клетки, которые реагирую на движение линий в одном направлении. Ян ЛеКун предложил использовать так называемые сверточные нейронные сети [2].
Идея сверточных нейронных сетей заключается в чередовании сверточных слоев (C-layers), субдискретизирующих слоев (S-layers) и наличии полносвязных (F-layers) слоев на выходе.
image
Такая архитектура заключает в себе 3 основных парадигмы:
  1. Локальное восприятие.
  2. Разделяемые веса.
  3. Субдискретизация.

Локальное восприятие подразумевает, что на вход одного нейрона подается не все изображение (или выходы предыдущего слоя), а лишь некоторая его область. Такой подход позволил сохранять топологию изображения от слоя к слою.
Концепция разделяемых весов предполагает, что для большого количества связей используется очень небольшой набор весов. Т.е. если у нас имеется на входе изображение размерами 32х32 пикселя, то каждый из нейронов следующего слоя примет на вход только небольшой участок этого изображения размером, к примеру, 5х5, причем каждый из фрагментов будет обработан одним и тем же набором. Важно понимать, что самих наборов весов может быть много, но каждый из них будет применен ко всему изображению. Такие наборы часто называют ядрами (kernels). Нетрудно посчитать, что даже для 10 ядер размером 5х5 для входного изображения размерами 32х32 количество связей окажется равным примерно 256000 (сравниваем с 10 млн.), а количество настраиваемых параметров всего 250!
А как же, спросите вы, это скажется на качестве распознавания? Как ни странно, в лучшую сторону. Дело в том, что такое искусственно введенное ограничение на веса улучшает обобщающие свойства сети (generalization), что в итоге позитивно сказывается на способности сети находить инварианты в изображении и реагировать главным образом на них, не обращая внимания на прочий шум. Можно посмотреть на этот подход немного с другой стороны. Те, кто занимался классикой распознавания изображений и знает как это работает на практике (например в военной технике) знают, что большинство таких систем строятся на основе двумерных фильтров. Фильтр представляет собой матрицу коэффициентов, обычно заданную вручную. Эта матрица применяется к изображению с помощью математической операции, называемой сверткой. Суть этой операции в том, что каждый фрагмент изображения умножается на матрицу (ядро) свертки поэлементно и результат суммируется и записывается в аналогичную позицию выходного изображения. Основное свойство таких фильтров заключается в том, что значение их выхода тем больше чем больше фрагмент изображения похож на сам фильтр. Таким образом изображение свернутое с неким ядром даст нам другое изображение, каждый пиксел которого будет означать степень похожести фрагмента изображения на фильтр. Иными словами это будет карта признаков.
Процесс распространения сигнала в C-слое я попытался изобразить на рисунке:
image
Каждый фрагмент изображения поэлементно умножается на небольшую матрицу весов (ядро), результат суммируется. Эта сумма является пикселом выходного изображения, которое называется картой признаков. Здесь я опустил тот факт, что взвешенная сумма входов еще пропускается через функцию активации (как в любой другой нейросети). На самом деле это может происходить и в S-слое, принципиальной разницы нет. Следует сказать, что в идеале не разные фрагменты проходят последовательно через ядро, а параллельно все изображение проходит через идентичные ядра. Кроме того, количество ядер (наборов весов) определяется разработчиком и зависит от того какое количество признаков необходимо выделить. Еще одна особенность сверточного слоя в том, что он немного уменьшает изображение за счет краевых эффектов.
Суть субдискретизации и S-слоев заключается в уменьшении пространственной размерности изображения. Т.е. входное изображение грубо (усреднением) уменьшается в заданное количество раз. Чаще всего в 2 раза, хотя может быть и не равномерное изменение, например, 2 по вертикали и 3 по горизонтали. Субдискретизация нужна для обеспечения инвариантности к масштабу.
Чередование слоев позволяет составлять карты признаков из карт признаков, что на практике означает способность распознавания сложных иерархий признаков.
Обычно после прохождения нескольких слоев карта признаков вырождается в вектор или даже скаляр, но таких карт признаков становится сотни. В таком виде они подаются на один-два слоя полносвязной сети. Выходной слой такой сети может иметь различные функции активации. В простейшем случае это может быть тангенциальная функция, также успешно используются радиальные базисные функции.

4. Обучение


Для того чтобы можно было начать обучение нашей сети нужно определиться с тем, как измерять качество распознавания. В нашем случае для этого будем использовать самую распространенную в теории нейронных сетей функцию среднеквадратической ошибки (СКО, MSE) [3]:
image
В этой формуле Ep — это ошибка распознавания для p-ой обучающей пары, Dp — желаемый выход сети, O(Ip,W) — выход сети, зависящий от p-го входа и весовых коэффициентов W, куда входят ядра свертки, смещения, весовые коэффициенты S- и F- слоев. Задача обучения так настроить веса W, чтобы они для любой обучающей пары (Ip,Dp) давали минимальную ошибку Ep. Чтобы посчитать ошибку для всей обучающей выборки просто берется среднее арифметическое по ошибкам для всех обучающих пар. Такую усредненную ошибку обозначим как E.
Для минимизации функции ошибки Ep самыми эффективными являются градиентные методы. Рассмотрим суть градиентных методов на примере простейшего одномерного случая (т.е. когда у нас всего один вес). Если мы разложим в ряд Тейлора функцию ошибки Ep, то получим следующее выражение:
image
Здесь E — все та же функция ошибки, Wc — некоторое начальное значение веса. Из школьной математики мы помним, что для нахождения экстремума функции необходимо взять ее производную и приравнять нулю. Так и поступим, возьмем производную функции ошибки по весам, отбросив члены выше 2го порядка:
image
из этого выражения следует, что вес, при котором значение функции ошибки будет минимальным можно вычислить из следующего выражения:
image
Т.е. оптимальный вес вычисляется как текущий минус производная функции ошибки по весу, деленная на вторую производную функции ошибки. Для многомерного случая (т.е. для матрицы весов) все точно также, только первая производная превращается в градиент (вектор частных производных), а вторая производная превращается в Гессиан (матрицу вторых частных производных). И здесь возможно два варианта. Если мы опустим вторую производную, то получим алгоритм наискорейшего градиентного спуска. Если все же захотим учитывать вторую производную, то обалдеем от того сколько вычислительных ресурсов нам потребуется, чтобы посчитать полный Гессиан, а потом еще и обратить его. Поэтому обычно Гессиан заменяют чем-то более простым. Например, один из самых известных и успешных методов — метод Левенберга-Марквардта (ЛМ) заменяет Гессиан, его аппроксимацией с помощью квадрадного Якобиана. Подробности здесь рассказывать не буду.
Но что нам важно знать об этих двух методах, так это то, что алгоритм ЛМ требует обработки всей обучающей выборки, тогда как алгоритм градиентного спуска может работать с каждой отдельно взятой обучающей выборкой. В последнем случае алгоритм называют стохастическим градиентом. Учитывая, что наша база содержит 60 000 обучающих образцов нам больше подходит стохастический градиент. Еще одним преимуществом стохастического градиента является его меньшая подверженность попаданию в локальный минимум по сравнению с ЛМ.
Существует также стохастическая модификация алгоритма ЛМ, о которой я, возможно, упомяну позже.
Представленные формулы позволяют легко вычислить производную ошибки по весам, находящимся в выходном слое. Вычислить ошибку в скрытых слоях позволяет широко известный в ИИ метод обратного распространения ошибки.

5. Реализация


Лично я использую для реализации различных алгоритмов, от которых не требуется функционирование в реальном времени Matlab. Это очень удобный пакет, M-язык которого позволяет сосредоточиться на самом алгоритме не заботясь о выделении памяти, операциях в/в и т.д. Кроме того, множество различных тулбоксов позволяет создавать поистине междисциплинарные приложения в кротчайшие сроки. Можно, например, с помощью Image Acquisition Toolbox подключить вебкамеру, с помощью Image Processing Toolbox обрабатывать изображение с нее, с помощью Neural Network Toolbox формировать траекторию движения робота, а с помощью Virtual Reality Toolbox и Control Systems Toolbox моделировать движение робота. Кстати о Neural Network Toolbox — это довольно гибкий набор инструментов, позволяющий создавать множество нейронных сетей различных типов и архитектур, но, к сожалению, не сверточные НС. Все дело в разделяемых весах. В NN toolbox возможность задавать разделяемые веса отсутствует.
Чтобы устранить этот недостаток мною был написан класс, позволяющий реализовать СНС произвольной архитектуры и применять их к различным задачам. Скачать класс можно здесь. Сам класс был написан так, чтобы тому, кто им пользуется была максимальная видна структура сети. Все очень обильно прокомментировано, на названии переменных не экономил. Скорость симуляции сети неплоха и составляет доли секунды. Скорость обучения пока не велика (>10 ч), но следите за обновлениями, в ближайшее время планируется ускорение на порядки.
Кого интересует реализация СНС на С++, могут найти ее здесь и здесь.

6. Результаты


В программе на matlabcentral прилагается файл уже натренированной нейросети, а также GUI для демонстрации результатов работы. Ниже приведены примеры распознавания:
image
image
По ссылке имеется таблица сравнения методов распознавания на базе MNIST. Первое место за сверточными нейросетями с результатом 0.39% ошибок распознавания [4]. Большинство из этих ошибочно распознанных изображений не каждый человек правильно распознает. Кроме того в работе [4] были использованы эластические искажения входных изображений, а также предварительное обучение без учителя. Но об этих методах как нибудь в другой статье.

Ссылки.


  1. Yann LeCun, J. S. Denker, S. Solla, R. E. Howard and L. D. Jackel: Optimal Brain Damage, in Touretzky, David (Eds), Advances in Neural Information Processing Systems 2 (NIPS*89), Morgan Kaufman, Denver, CO, 1990
  2. Y. LeCun and Y. Bengio: Convolutional Networks for Images, Speech, and Time-Series, in Arbib, M. A. (Eds), The Handbook of Brain Theory and Neural Networks, MIT Press, 1995
  3. Y. LeCun, L. Bottou, G. Orr and K. Muller: Efficient BackProp, in Orr, G. and Muller K. (Eds), Neural Networks: Tricks of the trade, Springer, 1998
  4. Ranzato Marc'Aurelio, Christopher Poultney, Sumit Chopra and Yann LeCun: Efficient Learning of Sparse Representations with an Energy-Based Model, in J. Platt et al. (Eds), Advances in Neural Information Processing Systems (NIPS 2006), MIT Press, 2006


P.S. Всем спасибо за комментарии и за отзывы. Это моя первая статья на хабре, так что буду рад видеть предложения, замечания, дополнения.
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое

Комментарии (73)

  • 0
    Огромное спасибо за статью, для себя подчерпнул довольно много нового.
  • +2
    Познавательно.
    За список литературы — отдельное спасибо.
  • 0
    Пытался я освоить нейросети, но как-то не пошло. Видимо из-за, как мне показалось, их медлительности…
    • +1
      Работает сама нейросеть довольно быстро. Медленно лишь ее «обучение», когда необходимо тысячи, миллионы раз прогнать ее по множеству обучающих наборов, шаблонов.
  • 0
    Длинная статья, но интересная :) Много чего нового узнал. Спасибо :)
  • +15
    «Большинство людей под «обычными» или «классическими» нейросетями понимает полносвязные нейронные сеть прямого распространения с обратным распространением ошибки»

    Большинство людей не поймут о чем это предложение =)
    • 0
      Согласен, не совсем прозрачно написал. Да еще и опечатка.
  • 0
    А не подскажете, где можно почитать про распознавание изображений с помощью радиально-базисных сетей?
    А то везде, где ищу пишут, примерно как у вас «также успешно используются радиальные базисные функции». Заменяя слово «успешно» на «возможно», «можно» и т.п.
    • +1
      1) ISBN 5-03-002115-9; Саймон Хайкин «Нейронные сети: полный курс»
      2) ISBN 5-279-02567-4, 83-7207-187-X; Станислав Осовский «Нейронные сети для обработки информации»
      • 0
        читал. Про радиально-базисные сети написано, математики много, особенно в Хайкине, а вот про распознавание изображений — нет.
        • 0
          Вам конкретный пример что-ли нужен?
          • 0
            мне надо как в этой статье.
            • +1
              Попробуйте сами, «почитать чужую статью» никакого понимания не даст. Радбаз действительно хорош для распознавания, так как обеспечивает нулевую погрешность на обучающих векторах.
        • 0
          В любом случае, Хайкин это самая доступная на прилавках и самая познавательная книга по ИНС, которую я когда-либо находил.
    • 0
      На русском языке по использованию 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.
      Радиальные базисные сети редко используются самостоятельно в задачах распознавания изображений. Их обычно ставят на выходе. Смысл их можно приблизительно пояснить следующим сравнением: если функции активации такие как линейная, логистическая, тангенциальная и другие делят гиперпространство гиперплоскостью (читать как делят плоскость на две области прямой), то радиальные базисные функции активации делят гиперпространство на «внутри сферы» и «вне сферы», что в задачах классификации часто бывает полезно.
      • 0
        спасибо
  • 0
    ох понадобится мне это через два месяца для сессии.
    • 0
      Вряд ли это понадобится для сессии :) Вот для кандидатской или дипломного проекта ещё может понадобиться :)
      • 0
        Пожалуй не соглашусь, у нас (Спбгпу) это расчетное задание — распознавания образов — для получения зачета.
        • 0
          ну мне кажется, то, что здесь описано, сложновато. Для зачёта хватит и обычного персептрона.
  • 0
    Статья супер! Спасибо. Наконец-то что-то новое для себя почерпнул.
  • 0
    Фундаментально. С каждой такой статьей эта тема мне становится все более интересна. Придется как-нибудь углубиться.
  • 0
    а теперь понимаем что нейросети понимают каптчу лучше человека и отказываемся от каптчи
    • 0
      каптча еще актуальна, ввиду сложности создания подобных решений и отсутствия плаг-н-плай модулей. спамерам еще прийдется попотеть для реализации подобного
      • 0
        а когда реализуют?
        • 0
          сложно сказать. но глубоко надеюсь, что данная проблема не будет решаться каким-нибудь таким образом. Это должны быть алгоритмы классификации, которые на основе обученной сети по входным признакам будут определять на выходе является ли пользователь роботом, или нет
          • 0
            Указанный Вами «какой-нибудь такой» способ решается по первому кадру или по некоторому из кадров где получена максимальная достоверность распознанных образов.

            Сложное это дело — капчи.
          • 0
            Такой способ гораздо проще хакнуть.
  • 0
    Впечатляет. Очень хорошая статья, спасибо :)
    ps. добавьте абзацы перед заголовками (названиями разделов), так, пожалуй, будет лучше )
  • 0
    Вообще говоря, для распознавания изображений радбаз куда лучше тангенциальной. Тансигмоид хорош, когда вход нормализован на [-1, 1]. И когда приближается сигналы с не очень большой энтропией.
    • 0
      *приближаются
  • –2
    Очень познавательно… Ещё, мне кошек стало жалко…
  • +1
    Как приятно видеть на хабре такие статьи. Сам минувшими весной-летом очень увлёкся convolutional networks. Клюнул именно на заявленную «мозгоподобность» сетей, что в общем-то местами похоже на правду. А если верить Jew Hawkins «On intelligence», где довольно убедительно говорится, что области кортекса мозга не имеют ярко выраженной специализации и одинаково обрабатывают всю входящую информацию (будь то зрительные, звуковые, сенсорные или даже логические образы) — то свёрточная сеть представлялась мне универсальным распознователем или хотя бы классификатором (хотя я замахнулся сразу на задачи кластеризации). Однако эксперимент, подтверждённый затем логическими выкладками, показал, что механизм выделения локальных признаков, кроме изображений, ограниченно полезен лишь в обработке звуков, и совершенно бесполезен в наиболее интересной мне задаче кластеризации текстов. Это вызвало у меня довольно сильное разочарование в свёрточных сетях (хотя они по большому счёту не виноваты =) просто мозгоподобность тут не при чём) и заставило вернуться к извращениям над картами Кохонена.
    И всё же большое вам спасибо за просвещение, если я правильно помню, то до вас на русском языке видел лишь одну махонькую заметку о свёрточных сетях =) Пишите ещё, пожалуйста.
    • 0
      может для кластеризации текстов надо использовать НС с обучением без учителя? (Хотя Вы и сами об этом знаете :D )

      Ну вот вижу, что да, просто хотелось найти какой-нибудь новый метод, взамен карт Кохонена.
    • 0
      кстати, стукните в личку, есть у меня знакомый, занимался кластеризацией текста. Может, Вам будет о чём поговорить
    • –1
      Для вас важно именно кластеризовать? Потому что если вам в дальнейшем все равно нужно его распознавать, то можно использовать space displacement convolutional network. По сути это то же, о чем я написал, только окошко размером 32х32 гоняется по всему изображению и у нас для каждого его участка получается вектор, который сообщает, какова вероятность, что на этом месте есть буква, и какая эта буква. Эти вероятности уже можно использовать для дальнейшего анализа.
      • 0
        Да, я видимо не совсем ясно выразился =) Текст не требует распознования, это обычный электронный документ — его надо только «отсортировать» по тематике (document clustering, задача data mining в общем-то, но у нас немного особый подход). Работающий пример — WEBSOM. Но мы делаем штуку, которая работает в реальном времени (а не пакетно), осуществляет нечёткую кластеризацию и не боится выбросов.
        • 0
          Тогда действительно здесь СНС вряд ли будут полезны. Успехов вам.
  • 0
    Я тоже недавно столкнулся со свёрточными сетями и хотел изучить их поближе. Теперь есть от чего оттолкнуться. :)

    Кстати, по поводу выбора архитектуры сети. Известно, что SVM с ядром определённой конфигурации (RBF в том числе) будет эквивалетен двуслойной нейросети. При этом количество нейронов на скрытых слоях определяется автоматически (в оптимальном ключе).
    • 0
      Да, на счет SVM вы правы, но это все же shallow-архитектура (поверхностная). Линейная комбинация нелинейных ядер, как в SVM, не даст возможности обучения глубоким иерархиям.
      • 0
        Что понимается под глубокими иерархиями?
        • 0
          Имеются ввиду сложные многомерные функции. С одной стороны 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 при определенном усложнении задачи наступает проклятье размерности — их становится просто не выгодно использовать.
  • 0
    Хорошая статься, но было бы неплохо написать про такие бяки нейросетей, как «несходимость» и «насыщение» и методы их решения с примерами. Я бы было вообще доволен.
    • 0
      Да, есть такие проблемы и есть трюки чтобы их избегать. Очень важно здесь обеспечить линейное функционирование сети на первых шагах обучения. Это обычно достигается за счет правильной инициализации весов и предобработки входов.
  • 0
    скажите, а с библиотекой FANN (http://leenissen.dk/fann/) вам не приходилось иметь дело?
    • 0
      Только на уровне знакомства. Насколько я знаю, FANN не поддерживают сверточные сети.
  • 0
    3ая лаба из универа по предмету «Цифровая обработка сигналов».
    • 0
      Лаба именно по сверточным НС? Если да, то какой инструментарий используете?
      • 0
        Да, там серия лабараторных по различным нейронным сетям, только задачи чуть по проще. Про инструменты не понял, писал на C#, библиотек не использовал.
  • 0
    эх запахло универом и лабами :)
  • 0
    Спасибо за статью. Вспомнил лабы в универе (больше практиковаться в нейросетях не приходилось). Приятно видеть что в альма-матер еще остались грамотные специалисты.
  • +1
    Спасибо.
    Очень интересно было читать, правда понимал через раз, но это проблема уже моего образования.
    Было бы интересно почитать основы НС с примерами.

  • 0
    А у нас как раз сейчас подходит к концу срок сдачи лабораторной по перцептронам и распознаванию изображений цифр, кому-нибудь будет интересно увидеть реализацию на java? Однослойная сеть конечно куда проще описанного, но для начинающих более понятна, думаю.

    Сам впервые столкнулся с нейронными сетями, поэтому подобные статьи очень полезны, спасибо автору.
  • 0
    Спасибо, автор
    • 0
      чисто технически меня интересует вопрос — почему за «спасибо автор» сегодня минусуют?
      • 0
        Спасибо плюсующим
  • +1
    intelligenceAgent: А вы не рассматривали технологию HTM (http://en.wikipedia.org/wiki/Hierarchical_temporal_memory), которую с натяжкой можно назвать «не стандартной» нейронной сетью, для задач распознавания изображений. Интересно ваше мнение.
    • 0
      Спасибо за наводку. Прочитал по диагонали диссертацию тов. Dileep. (У нас бы такую совет не пропустил =)) Очень интересная штука этот HTM, в диссертации выдвигаются правильные идеи, которые мне лично уже давно не дают покоя — например, учет временных свойств изображений объектов для лучшего распознавания. Интересна комбинация цепей маркова, иерархичности, сетей доверия. Сама работа написана грамотно.
      Однако, тут пока еще рано о чем-то судить. В диссертации очень мало внимания уделяется экспериментальной проверке идей. По большому счету там 150 стр. теории и 5 страниц результатов экспериментов, хотя по нормальному должно быть хотя бы 80%-20%. Более того автор приводит некую свою довольно примитивную базу бинарных изображений, показывает, что качество распознавания на тестовом множестве составило 57% (что не очень хорошо). И сравнивает результат с nearest-neighbour классификатором, т.е. одним из простейших.
      Тут можно сказать, что софт реализующий распознавание более сложных объектов реализован и лежит на сайте, но как раз о нем никаких статей и сравнений качества распознавания применяемых там алгоритмов я не нашел.
      Возможно я чего-то не знаю. Если у вас есть ссылки на другие статьи по использованию HTM в задачах распознавания, буду рад их получить.
      • 0
        Вообще меня вдохновили теория интелекта, изложенная в книге Джефа Хокинга «Об интелекте» — en.wikipedia.org/wiki/On_Intelligence. Я не специалист в этой области, но такая элегантная теория не может быть ложной по сути :) Да, действительно, трудно найти что-либо в сети… Мне показалась эта статья интересной www98.griffith.edu.au/dspace/handle/10072/23558 — сравнивается HTM и SVM для тойже задачи распознавания рукописных символов.
        • 0
          Идеи интересны. Однако меня удивило утверждение, будто ученые, работающие в области AI игнорируют исследования в области нейронаук. По моему, в последнее время, эти две области очень тесно переплетаются.
          Кроме того, не будем забывать, что Хокинг бизнесмен. Это очень заметно, когда начинаешь искать литературу: очень много инрервью, рекламы, разговоров. Но очень мало научных статей и ссылок в оных на его работы.
          На самом деле интересных идей довольно много, но, к сожалению, мало научно-популярных книг, объясняющих эти идеи, таких как On Intelligence.
          • 0
            Ну бизнесмен — это скорее способ быть связанным с практикой, реально создать что-нибудь :)
  • 0
    В 3-ем пункте стоило бы упомянуть, что теоретически, первые слои простой сети тоже могут в процессе обучения выродиться в такую же свёрточную прослойку за счёт обнуления большинства коэффициентов. т.е. что такая свёрточная архитектура — фактически подмножество обычной ПНС.
    • 0
      Можно конечно определенным образом многократно продублировать разделяемые веса так, чтобы получился полносвязный слой (развертка). Но далее нужен субдискретизирующий слой, а к тому же при первом же проходе обратного распространения ошибки эффект разделяемых весов исчезнет.
  • 0
    кста, картинки только у меня больше не показываются, ругаясь на лимиит показов и неиспользование превьюшки?
    • 0
      Проблема есть. Решаю.
      • 0
        Мне после моей жалобы и некоторой аргументации, из imagepost.ru ответили фразой «Снял для Вас это ограничение.» И нынче я картинки тут все вижу.

        P.S.: Очень внятный человек от них общается. Спасибо ему.
  • 0
    Картинки не грузятся
    • 0
      Это из за проблем с макхостом. Обещают восстановить в ближайшие дни.
      А вообще конечно не буду больше imagehost использовать, у них и до этого проблемы были.
      • 0
        Присоединяюсь к просьбе исправить картинки с imagepost.ru/.
        Спасибо!
        • 0
          Часть картинок нашел, перезалил на более надежный сервис, часть переделал (спасибо Google Charts API). Теперь должно выдержать третью мировую =)
          • 0
            Большое спасибо! (на + пороха пока не набрал)
  • 0
    Вопрос по реализации. Как у вас считается ошибка для ядра — например, при обратном распространенни с C-layer на Input?

    У меня в голове не укладывается) Для полносвязных уровней понятно — один нейрон, одна связь с любым предыдущим нейроном. Для сверточных слоев — неясно. Если ядро — 25 связей и они «расшарены» между всеми нейронами, то как ошибка нейрона влияет на веса? Средняя ошибка для всей feaure_map вычисляется?
    • 0
      Считается усреднением. Т.е. если подходить к вопросу классически как в полносвязной сети, то для каждого разделяемого веса у вас будет получаться множество ошибок. Вычисляем среднее и получаем ошибку для данного разделяемого веса в ядре. Смысл введенного ограничения на веса — способности к обобщению, усреднение градиентов именно к этому и ведет. Веса становятся инвариантны к локальным особенностям изображения и лучше реагируют на независимые фичи.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.