Реализация однослойной нейронной сети (персептрона)

 

Министерство образования и науки Российской Федерации

Государственное общеобразовательное учреждение высшего профессионального образования

ВОРОНЕЖСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Факультет прикладной математики, информатики и механики

Кафедра математических методов исследования операций





Реализация однослойной нейронной сети (персептрона)



Курсовая работа

по специальности 010400 Прикладная математика и информатика специализация "Математическое и информационное обеспечение экономической деятельности"





Зав кафедрой Баскаков А.Г.

д. ф. м. н., проф.

Студент, 3 курс Андреев П.А.

Руководитель Каширина И.Л.

к.т.н., доц.




Воронеж 2012

Введение


Нейронная сеть в (теории искусственного интеллекта) - упрощённая модель биологической нейронной сети.

Нейронные сети возникли из исследований в области искусственного интеллекта, а именно, из попыток воспроизвести способность биологических нервных систем обучаться и исправлять ошибки, моделируя низкоуровневую структуру мозга. Основной областью исследований по искусственному интеллекту в 60-е - 80-е годы были экспертные системы. Такие системы основывались на высокоуровневом моделировании процесса мышления (в частности, на представлении, что процесс нашего мышления построен на манипуляциях с символами). Скоро стало ясно, что подобные системы, хотя и могут принести пользу в некоторых областях, не ухватывают некоторые ключевые аспекты человеческого интеллекта. Согласно одной из точек зрения, причина этого состоит в том, что они не в состоянии воспроизвести структуру мозга. Чтобы создать искусственный интеллект, необходимо построить систему с похожей архитектурой.

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

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

История нейронных сетей


Первый интерес к нейросетям был обусловлен пионерской работой МакКаллока и Питса, изданной в 1943 году, где предлагалась схема компьютера, основанного на аналогии с работой человеческого мозга. Они создали упрощенную модель нервной клетки - нейрон. Мозг человека состоит из белого и серого веществ: белое - это тела нейронов, а серое - это соединительная ткань между нейронами, или аксоны и дендриты.

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


Рис. 1


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

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

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


Постановка задачи


Краткий обзор искусственных нейронных сетей.

Изучение алгоритма однослойной нейронной сети (персептрона) с её обучением.

Написание программы с возможностью определения фигуры изображенной пользователем (треугольник или круг), используя данный алгоритм


Анализ задачи


Одной из первых искусственных сетей, способных к перцепции (восприятию) и формированию реакции на воспринятый стимул, явилсяРозенблатта (F. Rosenblatt, 1957). Персептроном, как правило, называют однослойную нейронную сеть, при этом каждый персептронный нейрон в качестве активационной функции использует функцию единичного скачка (пороговую)


Выбор средств разработки


В качестве среды разработки программы я выбрал Borland C++ Builder 6, объединяющий в себе комплекс объектных библиотек, компилятор, отладчик, редактор кода и многие другие компоненты, необходимые для удобного написания визуальных приложений.


Алгоритм обучения персептрона


Подробная схема персептрона изображена на рис. 2.


Рис. 2. Однонейронный персептрон с n входами


Текущее состояние нейрона определяется как взвешенная сумма его входов:


Выход нейрона есть функция его состояния:



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

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

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

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

Алгоритм включает несколько шагов.

Шаг 0. Проинициализировать весовые коэффициенты , , небольшими случайными значениями (например, из диапазона [-0.3, 0.3]).

Шаг 1. Подать на вход персептрона один из обучающих векторов

и вычислить ее выход y .

Шаг 2. Если выход правильный ( y = ), перейти на шаг 4. Иначе вычислить ошибку - разницу между верным и полученным значениями выхода: ? = ? y .

Шаг 3. Весовые коэффициенты модифицируются по следующей формуле: .Здесь t и t + 1 - номера соответственно текущей и следующей итераций; ? - коэффициент скорости обучения, (0 <? ?1) ; - i-я компонента входного вектора .

Шаг 4. Шаги 1-3 повторяются для всех обучающих векторов. Один цикл последовательного предъявления всей выборки называется эпохой.

Обучение завершается по истечении нескольких эпох, когда сеть перестанет ошибаться.

Замечание 1. Коэффициент скорости обучения ? является параметром данного алгоритма. Как правило, его выбирают из диапазона [0.5, 0.7] (я взял 0.5).В некоторых случаях (при большом объеме обучающей выборки ) целесообразно постепенно уменьшать значение ?, начиная, например, с 1.

Замечание 2. Используемая на шаге 3 формула модифицирует только весовые коэффициенты, отвечающие ненулевым значениям входов , поскольку только они влияли на величину , а, следовательно, и на значение у. Очевидно, что если > y (получен неправильный нулевой выход вместо правильного единичного), то, поскольку ? > 0, весовые коэффициенты (а вместе с ними и величина s) будут увеличены и тем самым уменьшат ошибку. В противном случае весовые коэффициенты будут уменьшены, и s тоже уменьшится, приближая тем самым y к значению .


Интерфейс пользователя


Главное окно программы (рис. 3) содержит панель для рисования и 4 кнопки («Определить фигуру», «Очистить», «Обучить», «Выход») .

Рис. 3. Главное окно программы


При первом запуске программы персептрон еще не обучен и будет выдавать случайный результат. Например, изобразим на панели рисования треугольник рис. 4.


Рис. 4.


При нажатии на кнопку «Определить фигуру» выдается сообщение



Нажимаем кнопку «Обучить», при нажатии которой пересчитываются веса . Затем снова нажимаем кнопку «Определить фигуру», выдается сообщение



Таким образом при длительном обучении программа перестанет ошибаться и будет выдавать только правильные сообщения.




Реализация


Функции программы:

void __fastcall TForm1::FormCreate(TObject *Sender) - функция создает форму и заполняет матрицу весов случайными числами из промежутка [-0,3;03].

void __fastcall TForm1::BitBtn1Click(TObject *Sender) - при нажатии кнопки «Определить фигуру» эта функция обнуляет входную матрицу , затем заполняется 0 и 1 в зависимости закрашен ли пиксель i-строки j-столбца. Далее считается и выдается сообщение в зависимости от знака S:


y=


void __fastcall TForm1::BitBtn2Click(TObject *Sender)- при нажатии кнопки «Обучить» эта функция пересчитывает матрицу весов по формуле


,


где , а выбирается в зависимости от y. Если y=0 то .

Если y=1 то .

Исходный код программы находится в Приложении 1. [1-2]

Заключение


В результате работы были рассмотрены некоторые основы теории искусственных нейронных сетей. Был изучен и реализован алгоритм обучения персептрона. Разработано приложение с функционалом, описанным в разделе «Постановка задачи». Имеется возможность определения фигуры нарисованной пользователем.

Для развития программы необходимо добавить такие функции как:

·Масштабирование изображения

·Увеличение количества фигур для распознавания путем увеличения нейронов в сети

·Распознавание букв, цифр симфолов

Список использованной литературы и источников


1.Архангельский А.Я., Тагин М.А. Программирование в С++Builder 6 и 2006 Бином-Пресс, 2006.-1182 с.: ил

.И.Л. Каширина НЕЙРОСЕТЕВЫЕ ТЕХНОЛОГИИ Учебно-методическое пособие для вузов, 2008-72с.:ил

.Саймон Хайкин Нейронные сети: полный курс Второе издание, 2006-1105с.:ил

4.<#"center">Приложение 1- Исходные коды программы


Модуль Unit1.cpp

//---------------------------------------------------------------------------

#include <iostream.h>

#include <time.h>

#include <stdlib.h>

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"*Form1;flag=false;check=false;S;y;g;X[10][10];W[10][10];

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------__fastcall TForm1::FormCreate(TObject *Sender)

{-> Canvas -> Brush -> Color = clWhite;-> DoubleBuffered = true;(int i=0;i<10;i++){(int j=0;j<10;j++){[i][j]=(rand()%7 - 3)/10.0;

//(((-1)*rand()%7/10)+(rand()%7/10));

}

}

}

//---------------------------------------------------------------------------__fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,X, int Y)

{-> Canvas -> Pen -> Color = clBlack;-> Canvas -> Pen->Width=5;(flag) Image1 -> Canvas -> LineTo(X, Y);

}

//---------------------------------------------------------------------------__fastcall TForm1::Image1MouseDown(TObject *Sender,Button, TShiftState Shift, int X, int Y)

{= true;-> Canvas -> MoveTo(X, Y);

}

//---------------------------------------------------------------------------__fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,Shift, int X, int Y)

{= false;

}

//---------------------------------------------------------------------------__fastcall TForm1::BitBtn4Click(TObject *Sender)

{->Canvas->FillRect(Rect(0,0,Image1->Width,Image1->Height));

}

//---------------------------------------------------------------------------__fastcall TForm1::BitBtn1Click(TObject *Sender)

{(int a=0;a<10;a++)(int b=0;b<10;b++)[a][b]=0;

for (int a=0; a<10;a++) // проход 10х10 по квадратикам 30х30

{ int n=30;k=0;(int b=0; b<10;b++)

{(int i=k; i<n; i++){ l=a*30;

int m=l+30; // проход по квадрату 30х30

for (int j=l; j<m; j++)

{( Form1->Image1->Canvas->Pixels[i][j]== clBlack )

{[a][b] = 1;

}

};

}=n;=k+30;

}

}=0;(int a=0; a<10;a++){(int b=0; b<10;b++)

{=S+X[a][b]*W[a][b];

}

}(S>0)

{>MessageBox("Это треугольник!","Сообщение",MB_ICONINFORMATION);=1;

}{>MessageBox("Это круг!","Сообщение",MB_ICONINFORMATION);=0;

}

}

//---------------------------------------------------------------------------__fastcall TForm1::BitBtn2Click(TObject *Sender)

{(y==1) g=-1;(y==0) g=1;(int a=0; a<10;a++){(int b=0; b<10;b++)

{[a][b]=W[a][b]+1/2*g*X[a][b];

}

}(int i=0;i<10;i++){(int j=0;j<10;j++){->Cells[j][i]=X[i][j];

}

}

}

//---------------------------------------------------------------------------


Министерство образования и науки Российской Федерации Государственное общеобразовательное учреждение высшего профессионального образования ВОРОНЕЖСКИЙ ГОС

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ