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

Курсовой проект - Менеджмент

Другие курсовые по предмету Менеджмент

простейшую однослойную нейронную сеть (персептрон) с возможностью её обучения.

 

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

 

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

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

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

 

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

 

Одной из первых искусственных сетей, способных к перцепции (восприятию) и формированию реакции на воспринятый стимул, явилсяРозенблатта (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-