Курсовая работа студента группы 10312

Смирнова Евгения

 

"Распознавание растровых образов (цифр) персептроном"

 

Поправка: Может, и не все так в жизни как тут написано, но идея верна (ровно на столько - чтобы программа работала). Хотя, как сказал тот же препод - распознавание 65% - не густо.

Задание курсовой работы

 

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

 

Теория: классы, образы, признаки, нейронные сети и пресептрон.

 

Историю развития данной науки можно найти во многих источниках, как и множество подходов к решению проблемы распознавания. По этому мы затронем только те моменты, которые были использованы в данной работе. На мой взгляд, наиболее доступно и лаконично нейронные сети описаны в книге Ф. Уоссермена "Нейрокомпьютерная техника: Теория и практика".

 

Теоретическая постановка задачи.

 

Любой объект изучения можно охарактеризовать некоторыми признаками. Набор таких признаков называется признаковым множеством. Сам объект называют образом. Если признак представим как число, то набор n признаков - можно рассматривать как точку в n-мерном пространстве (или вектор из начала координат в эту точку).

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

Таким образом, задачу можно сформулировать так: нужно определить - к какому классу относится тестируемый образ.

 

Персептрон - инструмент для классификации образов.

 

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

 

Биологический нейрон.

 

Итак, начнем с начала. Нейрон - это элементарный инструмент человеческого мозга, который представляет из себя следующее:

 

 

Около 1011 нейронов участвуют примерно в 1015 передающих связях, имеющих длину метр и более. Нейрон принимает и обрабатывает электрохимические сигналы. Вот суть его работы: дендриды идут от тела нервной клетки к другим нейронам, где они принимают сигналы в точках соединения, называемых синапсами. Принятые синапсом входные сигналы подводятся к телу нейрона. Здесь они суммируются, причем одни входы стремятся возбудить нейрон, другие – воспрепятствовать его возбуждению. Когда суммарное возбуждение в теле нейрона превышает некоторый порог, нейрон возбуждается, посылая по аксону сигнал другим нейронам. Такая связанная структура нейронов и называется нейронной сетью. У этой схемы много усложнений и исключений, тем не менее, большинство искусственных нейронных сетей моделируют лишь эти простые свойства.

 

Искусственный нейрон

 

 

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

Здесь множество входных сигналов, обозначенных х12, ...,хn, поступает на искусственный нейрон. Эти входные сигналы, в совокупности обозначаемые вектором Х, соответствуют сигналам приходящим в синапсы биологического нейрона. Каждый сигналу умножается на соответствующий вес w1,w2,...,wn, и поступает на суммирующий блок. Каждый вес соответствует "силе" одной биологической синаптической связи. (Множество весов в совокупности обозначаются вектором W). Суммирующий блок, соответствующий телу биологического элемента, складывает взвешенные входы алгебраически, создавая выход, который мы будем называть NET. F - постоянная пороговая величина, или же функция, более точно моделирующая нелинейную (в нашем, более простом случае, линейную) передаточную характеристику биологического нейрона и представляющая нейронной сети большие возможности.

 

Однослойные искусственные нейронные сети.

 

 

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

Удобно считать веса элементами матрицы W. Матрица имеет n строк и m столбцов, где n - число входов, а m - число нейронов. Таким образом, вычисление выходного вектора OUT, компонентами которого являются выходы NET нейронов сводится к матричному умножению OUT=XW.

 

Персептрон

 

Итак, персептрон - это однослойная нейронная сеть. Принцип его работы таков:

  1. Задается и обнуляется матрица весов.
  2. Обучающий образ, представленный входным вектором X (нулей и единиц) умножается на матрицу весов. В результате получается вектор NET, размерность которого равна количеству нейронов.
  3. Строим на основе полученного произведения выходной вектор (такой же размерности) по формуле: yi = F (NETi), где F - пороговая функция. В нашем случае это линейная функция
    .
  4. Сравниваем покомпонентно получившийся вектор Y с правильным ответом. Под ответом подразумевается вектор такой же размерности, что и выходной. Его надо заранее подготовить, и, разумеется, для каждого класса это должен быть свой уникальный вектор (в нашем случае файл Otvet.pers).
  5. При этом сравнении мы выполняем следующие действия (для каждой компоненты векторов):
    Если j-тая компонента результата больше
    j-той компоненты ответа, мы вычитаем входной (!) вектор из j-того столбца матрицы весов, то есть столбца j-того нейрона (что бы при последующем умножении входного вектора на матрицу скалярное произведение оказалось меньше).
    Если
    j-тая компонента результата меньше j-той компоненты ответа, мы прибавляем входной (!) вектор к j-тому столбцу матрицы весов.
    Таким образом, входной вектор корректирует матрицу весов под свои значения.
  6. Так же персептрон обучается на втором обучающем образе, третьем, ..., k-том.
  7. Если хотя бы один обучающий образ изменил матрицу весов, повторяем все еще раз с шага 2. Существует теорема, что если классы обучающих образов разделимы, то рано или поздно матрица перестанет меняться (обучится).

Одна итерация обучения персептрона на одном образе представлена на рисунке:

Замечу, что обучение персептрона на 2 шрифтах (20 обучающих образов) удалось после 4 таких итераций. Обучение же на 5 шрифтах (50 обучающих образов) удалось только на 853-й (!) итерации (см. файл log.scr, его расшифровка ниже).

 

Результаты курсовой работы

Результатом работы явилась программа, написанная на Java, в которой реализован класс, представляющий работу персептрона из 3 нейронов с 24 входами. Программа предназначена для получения файла с матрицей весов, на основе данных, полученных из jpg-файлов с обучающими образами. Использую эту матрицу, программа может оценить jpg-файл с цифрой другого шрифта и определить - какая это цифра, либо выдать ответ - что образ системе не известен.

В итоге персептрон смог обучиться на 5 шрифтах (50 обучающих образов) и из незнакомого шрифта (37 тестовых образов) определить правильно 65%.

Распознано только 65% потому, что персептрон, и это его характерная особенность, способен распознавать образы, близко похожие на те, которым он обучен. И тестовые образы были подобраны так специально - чтобы продемонстрировать - как "непохожесть" тестового образа влияет на результаты работы персептрона. То есть можно подыскать такой шрифт, который будет распознаваться 100%-но.

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

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

 

Итак, для решения поставленной задачи были реализованы следующие классы.

 

Заключение

 

В данной работе, получение признаков входных векторов было реализовано именно из графических файлов. Однако реализация самого персептрона ни коим образом ни связана с растрами. Также при форировании признаков, нигде не учитывается - цифра это, или нет. То есть не переписывая кода программы, можно обучить персептрон, распознавать буквы, и вообще любые фигуры. Что касается персептрона в принципе, при обучении или распознавании на вход классу Perseptron можно подавать любые признаки (например звуки!) Для этого нужно только переписать классы формирования признаков.

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

 

Список литературы.

 

Ф. Уоссермен "Нейрокомпьютерная техника: Теория и практика".

4 очень (!) хорошие ссылки:

http://www.programme.ru/index.phtml?arch/102001/102001_54.htm
http://www.orc.ru/~stasson/menu.html
http://www.basegroup.ru/neural/materials.htm
http://neurolec.chat.ru


Hosted by uCoz