Курсовая работа студента группы 10312
Смирнова Евгения
"Распознавание растровых образов (цифр) персептроном"
Поправка: Может, и не все так в жизни как тут написано, но идея верна (ровно на столько - чтобы программа работала). Хотя, как сказал тот же препод - распознавание 65% - не густо.
Задание курсовой работы
Задачей данной работы являлась реализация персептрона, обучение персептрона
на множестве обучающих образов (растровых графических файлов, содержащих цифры от 0 до 9) и тестирование персептрона образами, не входившими в обучающее множество.
Теория: классы, образы, признаки, нейронные сети и пресептрон.
Историю развития данной науки можно найти во многих источниках, как и множество подходов к решению проблемы распознавания. По этому мы затронем только те моменты, которые были использованы в данной работе. На мой взгляд, наиболее доступно и лаконично нейронные сети описаны в книге Ф. Уоссермена "Нейрокомпьютерная техника: Теория и практика".
Теоретическая постановка задачи.
Любой объект изучения можно охарактеризовать некоторыми признаками. Набор таких признаков называется признаковым множеством. Сам объект называют образом. Если признак представим как число, то набор
n признаков - можно рассматривать как точку в n-мерном пространстве (или вектор из начала координат в эту точку).Множество образов со сходными признаковыми множествами называется классом, а в геометрической интерпретации класс - это некоторая область, заключающая в себе точки (т.е. признаковые множества образа).
Таким образом, задачу можно сформулировать так: нужно определить - к какому классу относится тестируемый образ.
Персептрон - инструмент для классификации образов.
Персептрон - это некоторый инструмент, который способен "запоминать" ("обучиться") - какой образ относится к какому классу. После такого "обучения", в идеале, он должен уметь правильно "узнавать" и другие образы, не входившие в обучающее множество, но достаточно похожие на них, или сообщать, что образ не похож ни на один из множества обучающих образов. Степень "достаточной похожести" определяется удачностью выбора признакового множества. А способность персептрона "обучиться" зависит от разделимости признакового множества, то есть от уникальности наборов признаков с точностью до класса (иными словами - не пересекаются ли области, ограничивающие свои классы).
Биологический нейрон.
Итак, начнем с начала. Нейрон - это элементарный инструмент человеческого мозга, который представляет из себя следующее:
Около 10
11 нейронов участвуют примерно в 1015 передающих связях, имеющих длину метр и более. Нейрон принимает и обрабатывает электрохимические сигналы. Вот суть его работы: дендриды идут от тела нервной клетки к другим нейронам, где они принимают сигналы в точках соединения, называемых синапсами. Принятые синапсом входные сигналы подводятся к телу нейрона. Здесь они суммируются, причем одни входы стремятся возбудить нейрон, другие – воспрепятствовать его возбуждению. Когда суммарное возбуждение в теле нейрона превышает некоторый порог, нейрон возбуждается, посылая по аксону сигнал другим нейронам. Такая связанная структура нейронов и называется нейронной сетью. У этой схемы много усложнений и исключений, тем не менее, большинство искусственных нейронных сетей моделируют лишь эти простые свойства.
Искусственный нейрон
Искусственный нейрон в первом приближении имитирует свойства биологического нейрона. На вход искусственного нейрона поступает некоторое множество сигналов, каждый из которых является выходом другого нейрона. Каждый вход умножается на соответствующий вес, аналогичный синаптической силе, и все произведения суммируются, определяя уровень активации нейрона. Хотя сетевые парадигмы весьма разнообразны
, в основе почти всех их лежит эта конфигурация.Здесь множество входных сигналов, обозначенных х
1,х2, ...,хn, поступает на искусственный нейрон. Эти входные сигналы, в совокупности обозначаемые вектором Х, соответствуют сигналам приходящим в синапсы биологического нейрона. Каждый сигналу умножается на соответствующий вес w1,w2,...,wn, и поступает на суммирующий блок. Каждый вес соответствует "силе" одной биологической синаптической связи. (Множество весов в совокупности обозначаются вектором W). Суммирующий блок, соответствующий телу биологического элемента, складывает взвешенные входы алгебраически, создавая выход, который мы будем называть NET. F - постоянная пороговая величина, или же функция, более точно моделирующая нелинейную (в нашем, более простом случае, линейную) передаточную характеристику биологического нейрона и представляющая нейронной сети большие возможности.
Однослойные искусственные нейронные сети.
Хотя один нейрон и способен выполнять простейшие процедуры распознавания, сила нейронных вычислений проистекает от соединений нейронов в сетях. Простейшая сеть состоит из группы нейронов образующих слой, как показано в правой части рисунка. Отметим, что вершины - круги слева служат лишь для распределения входных сигналов. Они не выполняют каких-либо вычислений, и поэтому не будут считаться слоем. Каждый элемент из множества входов Х отдельным весом соединен с каждым искусственным нейроном. А каждый нейрон выдает взвешенную сумму входов в сеть. В искусственных и биологических сетях многие соединения могут отсутствовать, все соединения показаны в целях общности. Могут иметь место также соединения между выходами и входами элементов в слое (сети Хопфилда
).Удобно считать веса элементами матрицы
W. Матрица имеет n строк и m столбцов, где n - число входов, а m - число нейронов. Таким образом, вычисление выходного вектора OUT, компонентами которого являются выходы NET нейронов сводится к матричному умножению OUT=XW.
Персептрон
Итак, персептрон - это однослойная нейронная сеть. Принцип его работы таков:
Одна итерация обучения персептрона на одном образе представлена на рисунке:
Замечу, что обучение персептрона на 2 шрифтах (20 обучающих образов) удалось
после 4 таких итераций. Обучение же на 5 шрифтах (50 обучающих образов) удалось только на 853-й (!) итерации (см. файл log.scr, его расшифровка ниже).
Результаты курсовой работы
Результатом работы явилась программа, написанная на Java, в которой
реализован класс, представляющий работу персептрона из 3 нейронов с 24 входами. Программа предназначена для получения файла с матрицей весов, на основе данных, полученных из jpg-файлов с обучающими образами. Использую эту матрицу, программа может оценить jpg-файл с цифрой другого шрифта и определить - какая это цифра, либо выдать ответ - что образ системе не известен.В итоге персептрон смог обучиться на 5 шрифтах (
50 обучающих образов) и из незнакомого шрифта (37 тестовых образов) определить правильно 65%.Распознано только 65% потому, что персептрон, и это его характерная особенность,
способен распознавать образы, близко похожие на те, которым он обучен. И тестовые образы были подобраны так специально - чтобы продемонстрировать - как "непохожесть" тестового образа влияет на результаты работы персептрона. То есть можно подыскать такой шрифт, который будет распознаваться 100%-но.Степень похожести же определяется тем - что мы подаем персептрону на вход. А это, в свою
очередь, определяется тем - что мы решили брать за такие входные сигналы. Выбор здесь велик - можно оценивать у образа количество углов, направление линий, степень закрашенности в различных областях образа, количество пересечений образом контрольных прямых и т.д. Чем удачнее мы выберем - что брать за признаки образа - тем точнее и объективнее обучится персептрон, и тем эффективнее будет распознавать незнакомые образы.Таким образом, не правильные оценки персептроном некоторых тестовых образов
с нашей точки зрения - правильны с его точки зрения, так как он оценивает только признаки, которые мы подаем ему на вход. И для лучшей распознаваемости нужно найти более удачные признаки, чем те - которые использовались в данной работе, либо не расчитывать на то, что персептрон сможет распознавать шрифты, сильно отличающиеся от обучающих шрифтов.
Итак
, для решения поставленной задачи были реализованы следующие классы.0111 0001 0010 1100 0111 0 0 0 0Для каждого файла в директории REZ создается свой файл с этими кодами.
Заключение
В данной работе, получение признаков входных векторов было реализовано
именно из графических файлов. Однако реализация самого персептрона ни коим образом ни связана с растрами. Также при форировании признаков, нигде не учитывается - цифра это, или нет. То есть не переписывая кода программы, можно обучить персептрон, распознавать буквы, и вообще любые фигуры. Что касается персептрона в принципе, при обучении или распознавании на вход классу Perseptron можно подавать любые признаки (например звуки!) Для этого нужно только переписать классы формирования признаков.Но данная реализация поставленной задачи, повторюсь, способна
распознавать образы "достаточно" похожие на те, на которых обучали персептрон. Для более серьезной и глубокой проработки этой задачи, необходимо и более глубокое и детальное изучение того огромного опыта, накопленного человеком в области искусственного интеллекта.
Список литературы.
Ф. Уоссермен "Нейрокомпьютерная техника: Теория и практика".
4 очень (!) хорошие ссылки:
http://www.programme.ru/index.phtml?arch/102001/102001_54.htm