Нейронные сети в задачах распознавания
Что такое ИНС
Иску́сственные нейро́нные се́ти (ИНС) — математические модели, а также их программные или аппаратные реализации, построенные по принципу организации и функционирования биологических нейронных сетей — сетей нервных клеток живого организма. Это понятие возникло при изучении процессов, протекающих в мозге, и при попытке смоделировать эти процессы. Первой такой попыткой были нейронные сети Маккалока и Питтса[1]. После разработки алгоритмов обучения, получаемые модели стали использовать в практических целях: в задачах прогнозирования, для распознавания образов, в задачах управления и др.
ИНС представляют собой систему соединённых и взаимодействующих
между собой простых процессоров (искусстве
С точки зрения машинного
обучения, нейронная сеть представляет
собой частный случай методов распознавания
образов, дискриминантного
анализа, методов
кластеризации и т. п. С математической точки зрения, обучение нейронных
сетей — это многопараметрическая
задачанелинейной оптимизации. С точки зрения кибернетики, нейронная сеть используется
в задачах адаптивного
управления и как алгоритмы для робототехник
Нейронные сети не программируются в привычном смысле этого слова, они обучаются. Возможность обучения — одно из главных преимуществ нейронных сетей перед традиционными алгоритмами. Технически обучение заключается в нахождении коэффициентов связей между нейронами. В процессе обучения нейронная сеть способна выявлять сложные зависимости между входными данными и выходными, а также выполнять обобщение. Это значит, что в случае успешного обучения сеть сможет вернуть верный результат на основании данных, которые отсутствовали в обучающей выборке, а также неполных и/или «зашумленных», частично искаженных данных.
Нейронные сети - как один из
инструментов решения трудноформализуемых
задачМы покажем как эти сети применять
для распознавания изображений, применительно
к задаче взлома картинки. Однако, типов
нейросетей существует довольно много.
И так ли хороша классическая полносвязная
нейронная сеть (ПНС) для задачи распознавания
(классификации) изображений?
1. Задача
Итак, мы собрались решать
задачу распознавания изображений.
Это может быть распознавание
лиц, объектов, символов и т.д. Я предлагаю
для начала рассмотреть задачу распознавания
рукописных цифр. Задача эта хороша по
ряду причин:
- Для распознавания рукописного символа довольно трудно составить формализованный (не интеллектуальный) алгоритм и это становится понятно, стоит только взглянуть на одну и туже цифру написанную разными людьми
- Задача довольно актуальна и имеет отношение к OCR (optical character recognition)
- Существует свободно распространяемая база рукописных символов, доступная для скачивания и экспериментов
- Существует довольно много статей на эту тему и можно очень легко и удобно сравнить различные подходы
В качестве входных данных
предлагается использовать базу данных MNIST. Эта база содержит 60 000 обучающих
пар (изображение — метка) и 10 000 тестовых
(изображения без меток). Изображения нормализованы
по размеру и отцентрованы. Размер каждой
цифры не более 20х20, но вписаны они в квадрат
размером 28х28. Пример первых 12 цифр из
обучающего набора базы MNIST приведен на
рисунке:
Таким образом
задача формулируется следующим
образом: создать и обучить
нейросеть распознаванию рукописных символов,
принимая их изображения на входе и активируя
один из 10 выходов. Под активацией будем понимать
значение 1 на выходе. Значения остальных
выходов при этом должны (в идеале) быть
равны -1. Почему при этом не используется
шкала [0,1] я объясню позже.
2. «Обычные» нейросети.
Большинство людей
под «обычными» или «классическими»
нейросетями понимает полносвязные
нейронные сети прямого распространения
с обратным распространением ошибки:
Как следует из названия в такой
сети каждый нейрон связан с каждым,
сигнал идет только в направлении
от входного слоя к выходному, нет
никаких рекурсий. Будем называть
такую сеть сокращенно ПНС.
Сперва необходимо решить как подавать
данные на вход. Самое простое и почти
безальтернативное решение для ПНС —
это выразить двумерную матрицу изображения
в виде одномерного вектора. Т.е. для изображения
рукописной цифры размером 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) слоев на выходе.
Такая архитектура заключает в
себе 3 основных парадигмы:
- Локальное восприятие.
- Разделяемые веса.
- Субдискретизация.
Локальное восприятие подразумевает, что на вход
одного нейрона подается не все изображение
(или выходы предыдущего слоя), а лишь некоторая
его область. Такой подход позволил сохранять
топологию изображения от слоя к слою.
Концепция разделяемых весов предполагает, что для большого
количества связей используется очень
небольшой набор весов. Т.е. если у нас
имеется на входе изображение размерами
32х32 пикселя, то каждый из нейронов следующего
слоя примет на вход только небольшой
участок этого изображения размером, к
примеру, 5х5, причем каждый из фрагментов
будет обработан одним и тем же набором.
Важно понимать, что самих наборов весов
может быть много, но каждый из них будет
применен ко всемуизображению. Такие наборы часто
называют ядрами (kernels). Нетрудно посчитать,
что даже для 10 ядер размером 5х5 для входного
изображения размерами 32х32 количество
связей окажется равным примерно 256000 (сравниваем
с 10 млн.), а количество настраиваемых параметров всего 250!
А как же, спросите вы, это скажется на
качестве распознавания? Как ни странно,
в лучшую сторону. Дело в том, что такое
искусственно введенное ограничение на
веса улучшает обобщающие свойства сети
(generalization), что в итоге позитивно сказывается
на способности сети находить инварианты
в изображении и реагировать главным образом
на них, не обращая внимания на прочий
шум. Можно посмотреть на этот подход немного
с другой стороны. Те, кто занимался классикой
распознавания изображений и знает как
это работает на практике (например в военной
технике) знают, что большинство таких
систем строятся на основе двумерных фильтров.
Фильтр представляет собой матрицу коэффициентов,
обычно заданную вручную. Эта матрица
применяется к изображению с помощью математической
операции, называемой сверткой. Суть этой операции в том, что
каждый фрагмент изображения умножается
на матрицу (ядро) свертки поэлементно
и результат суммируется и записывается
в аналогичную позицию выходного изображения.
Основное свойство таких фильтров заключается
в том, что значение их выхода тем больше
чем больше фрагмент изображения похож
на сам фильтр.
Таким образом изображение
свернутое с неким ядром даст нам другое
изображение, каждый пиксел которого будет
означать степень похожести фрагмента
изображения на фильтр. Иными словами
это будет карта признаков.
Процесс распространения сигнала в C-слое
я попытался изобразить на рисунке:
Каждый фрагмент изображения поэлементно
умножается на небольшую матрицу весов
(ядро), результат суммируется. Эта сумма
является пикселом выходного изображения,
которое называется картой признаков.
Здесь я опустил тот факт, что взвешенная
сумма входов еще пропускается через функцию
активации (как в любой другой нейросети).
На самом деле это может происходить и
в S-слое, принципиальной разницы нет. Следует
сказать, что в идеале не разные фрагменты
проходят последовательно через ядро,
а параллельно все изображение проходит
через идентичные ядра. Кроме того, количество
ядер (наборов весов) определяется разработчиком
и зависит от того какое количество признаков
необходимо выделить. Еще одна особенность
сверточного слоя в том, что он немного
уменьшает изображение за счет краевых
эффектов.
Суть субдискретизации и S-слоев заключается в уменьшении
пространственной размерности изображения.
Т.е. входное изображение грубо (усреднением)
уменьшается в заданное количество раз.
Чаще всего в 2 раза, хотя может быть и не
равномерное изменение, например, 2 по
вертикали и 3 по горизонтали. Субдискретизация
нужна для обеспечения инвариантности
к масштабу.
Чередование слоев позволяет составлять
карты признаков из карт признаков, что
на практике означает способность распознавания
сложных иерархий признаков.
Обычно после прохождения нескольких
слоев карта признаков вырождается в вектор
или даже скаляр, но таких карт признаков
становится сотни. В таком виде они подаются
на один-два слоя полносвязной сети. Выходной
слой такой сети может иметь различные
функции активации. В простейшем случае
это может быть тангенциальная функция,
также успешно используются радиальные
базисные функции.
4. Обучение
Для того чтобы можно было начать
обучение нашей сети нужно определиться
с тем, как измерять качество распознавания.
В нашем случае для этого будем
использовать самую распространенную
в теории нейронных сетей функцию
среднеквадратической ошибки (СКО, MSE)
[3]:
В этой формуле Ep — это ошибка распознавания
для p-ой обучающей пары, Dp — желаемый выход
сети, O(Ip,W) — выход сети, зависящий от p-го
входа и весовых коэффициентов W, куда
входят ядра свертки, смещения, весовые
коэффициенты S- и F- слоев. Задача обучения
так настроить веса W, чтобы они для любой
обучающей пары (Ip,Dp) давали минимальную
ошибку Ep. Чтобы посчитать ошибку для всей
обучающей выборки просто берется среднее
арифметическое по ошибкам для всех обучающих
пар. Такую усредненную ошибку обозначим
как E.
Для минимизации функции ошибки Ep самыми
эффективными являются градиентные методы.
Рассмотрим суть градиентных методов
на примере простейшего одномерного случая
(т.е. когда у нас всего один вес). Если мы
разложим в ряд Тейлора функцию ошибки
Ep, то получим следующее выражение:
Здесь E — все та же функция ошибки, Wc —
некоторое начальное значение веса. Из
школьной математики мы помним, что для
нахождения экстремума функции необходимо
взять ее производную и приравнять нулю.
Так и поступим, возьмем производную функции
ошибки по весам, отбросив члены выше 2го
порядка:
из этого выражения следует, что вес, при
котором значение функции ошибки будет
минимальным можно вычислить из следующего
выражения:
Т.е. оптимальный вес вычисляется как текущий
минус производная функции ошибки по весу,
деленная на вторую производную функции
ошибки. Для многомерного случая (т.е. для
матрицы весов) все точно также, только
первая производная превращается в градиент
(вектор частных производных), а вторая
производная превращается в Гессиан (матрицу
вторых частных производных). И здесь возможно
два варианта. Если мы опустим вторую производную,
то получим алгоритм наискорейшего градиентного
спуска. Если все же захотим учитывать
вторую производную, то обалдеем от того
сколько вычислительных ресурсов нам
потребуется, чтобы посчитать полный Гессиан,
а потом еще и обратить его. Поэтому обычно
Гессиан заменяют чем-то более простым.
Например, один из самых известных и успешных
методов — метод Левенберга-Марквардта
(ЛМ) заменяет Гессиан, его аппроксимацией
с помощью квадрадного Якобиана.Подробности здесь
рассказывать не буду.
Но что нам важно знать об этих двух методах,
так это то, что алгоритм ЛМ требует обработки
всей обучающей выборки, тогда как алгоритм
градиентного спуска может работать с
каждой отдельно взятой обучающей выборкой.
В последнем случае алгоритм называют
стохастическим градиентом. Учитывая,
что наша база содержит 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 для демонстрации результатов
работы. Ниже приведены примеры
Имеется таблица сравнения методов распознавания на базе MNIST. Первое место за сверточными нейросетями с результатом 0.39% ошибок распознавания . Большинство из этих ошибочно распознанных изображений не каждый человек правильно распознает. Кроме того в работе были использованы эластические искажения входных изображений, а также предварительное обучение без учителя.
Нейросетевой "подсказчик" в тактической игре
Схема пошаговой оптимизации наилучшим образом ложится на схему игры, где последовательные действия одного или нескольких игроков приводят к успеху, обусловленному правилами.Единичное действие, чаще всего называемое ходом, должно либо статистически, либо комбинационно приводить к увеличению "качества" или к уменьшению "штрафа" на пути к победе (или к поражению). И здесь большое значение имеет не только длительный анализ всех возможных продолжений, грозящий цейтнотом, но и огромный опыт и фактические знания, переродившиеся в интуицию и позволяющие действовать механически в условиях блиц-турнира. Следовательно, должны быть реализованы механизмы запоминания и извлечения опыта и знаний в пошаговых действиях. Основным средством такой реализации является нейросеть - как природная, так и искусственная.
Рассмотрим игру в шахматы. Аналогом пункта в транспортной сети здесь является позиция на шахматной доске, состоящей из 64 клеток. Каждая клетка может быть пустой или иметь значение символа занимаемой фигуры.
При этом позиции являются симметричными относительно цвета фигур. Игроку, прибегающему к услугам "подсказчика", главное - указать: "фигуры мои - фигуры противника". Играть можно "самому с собой", как бы поворачивая доску после очередного хода. (Если "подсказчик" играет сам с собой, логично предположить, что такая игра всегда будет сводиться к ничьей?)
Тогда рецепторный слой однослойной логической нейронной сети должен состоять (рис. 14.6) из 64 групп нейронов. Каждая группа закреплена за одной клеткой и, в свою очередь, состоит из 13 нейронов-рецепторов. Каждый рецептор закреплен за одним из возможных значений клетки.
Ясно, что в подавляющем числе случаев значение клетки достаточно задавать с помощью единичного значения возбуждения единственного рецептора из тринадцати, соответствующих этой клетке. Так можно задавать позицию для определения следующего хода. Однако можно предусмотреть и неполную, предполагаемую с некоторой достоверностью информацию о значении клетки. Это справедливо, например, для случая игры "вслепую", тем более в сеансе одновременной игры, когда детали ситуации на отдельной доске могут быть забыты.
Целесообразно использовать приведенную выше целевую функцию с единичными синапсическими весами. Значения порогов несущественны; они могут быть положены равными нулю.
Комбинации возбуждения рецепторов должны приводить, в соответствии с непосредственными связями, к максимальному значению возбуждения того нейрона выходного слоя, с которым связан текст - рекомендация следующего хода. Текст может включать исторические ссылки, комментарии, мультимедийные эффекты и др.
Как говорилось, возможно попеременное обращение игроков к нейросети-"подсказчику". Тогда все нечетные обращения соответствуют белым, черные - черным. Однако интереснее игра живого шахматиста с компьютером.
Конечно, анализ
колоссального опыта
Да и объем
информации колоссален! Останутся шахматные позиции без
рекомендаций. Здесь необходимо исследовать,
насколько указание нейрона, наиболее
возбудившегося, может быть принято в
качестве совета, - то есть насколько это
хотя бы статистически соответствует
правильному решению или, по крайней мере,
не приводит к снижению качества. Следует
ли "учить" нейросеть решению по данной
комбинации или достаточно использовать
ее способности ассоциативного мышления?На
этом пути может производиться совершенствование "
Распознавание образов и классификация
В качестве образов могут выступать различные по своей природе объекты: символы текста, изображения, образцы звуков и т. д. При обучении сети предлагаются различные образцы образов с указанием того, к какому классу они относятся. Образец, как правило, представляется как вектор значений признаков. При этом совокупность всех признаков должнаоднозначно определять класс, к которому относится образец. В случае, если признаков недостаточно, сеть может соотнести один и тот же образец с несколькими классами, что неверно[11]. По окончании обучения сети ей можно предъявлять неизвестные ранее образы и получать ответ о принадлежности к определённому классу.
Топология такой сети характеризуется тем, что количество нейронов в выходном слое, как правило, равно количеству определяемых классов. При этом устанавливается соответствие между выходом нейронной сети и классом, который он представляет. Когда сети предъявляется некий образ, на одном из её выходов должен появиться признак того, что образ принадлежит этому классу. В то же время на других выходах должен быть признак того, что образ данному классу не принадлежит[12]. Если на двух или более выходах есть признак принадлежности к классу, считается, что сеть «не уверена» в своём ответе.

- Нейронные сети в радиолокации
- Нейронные сети и их применение для задач управления
- Нейронные сети. Однослойный персептрон. Линейная разделимость
- Нейронные сети. Программирование
- Нейронные сети. Распознавание образов
- Нейропатии
- Нейропатия малоберцового нерва
- Нейронні мережі та їх використаня
- Нейронные сети
- Нейронные сети
- Нейронные сети
- Нейронные сети
- Нейронные сети
- Нейронные сети