Исследование метода обратного распространения ошибки для обучения нейронной сети

Разработка алгоритма и программирование вычислительного процесса двухслойной нейросети на языке С#. Исследование параметров обучения нейросети методом обратного распространения ошибки. Анализ количества шагов, скорости обучения и коэффициента сигмоида.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 21.02.2016
Размер файла 935,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Исследование метода обратного распространения ошибки для обучения нейронной сети

Введение

В данной курсовой работе необходимо разработать алгоритм и программу на языке С# вычислительного процесса (двухслойная нейросеть).

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

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

1. Разработка алгоритма

Для дальнейшей работы необходимо построить следующие алгоритмы: алгоритм работы программы в целом, алгоритм обучения нейросети.

Математический алгоритм

Нормальное распределение.

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

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

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

Пусть

(1)

Тогда

по распределению при ,(2)

где N(0,1) -- нормальное распределение с нулевым математическим ожиданием и стандартным отклонением, равным единице. Обозначив символом выборочное среднее первых n величин, то есть

(3),

мы можем переписать результат центральной предельной теоремы в следующем виде:

по распределению при . (4)

Используя вышеприведенные формулы, формируем 4 класса чисел с нормальным распределением: 1 класс - м=0; 2 класс - м=5; 3 класс - м=2,5; 4 класс - м=10.

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

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

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

Состояние нейрона определяется по формуле

где :

n - число входов нейрона

xi - значение i-го входа нейрона

wi - вес i-го синапса

Затем определяется значение аксона нейрона по формуле

Y = f(S)

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

Основное достоинство этой функции в том, что она дифференцируема на всей оси абсцисс и имеет очень простую производную:

При уменьшении параметра a сигмоид, становится более пологим, вырождаясь в горизонтальную линию на уровне 0,5 при a=0. При увеличении a, сигмоид приближается к функции единичного скачка.

Список других наиболее употребляемых функций активации приведен в таблице 1.

Таблица 1- Основные функций активации.

Название

Математическая запись

1

Линейная

2

Пороговая бинарная

3

Пороговая биполярная

4

Линейная ограниченная

5

Гиперболический тангенс

6

Логарифмическая

7

Радиально-базисная

8

Сигмоидная (y [-1,1])

3. Обучение нейронной сети

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

Существуют два концептуальных подхода к обучению нейронных сетей: обучение с учителем и обучение без учителя. В данной курсовой работе используется метод обучения с учителем.

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

Алгоритм обратного распространения ошибки:

Инициализировать синаптические веса маленькими случайными значениями.

Выбрать очередную обучающую пару из обучающего множества; подать входной вектор на вход сети.

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

Вычислить разность между выходом сети и требуемым выходом (целевым вектором обучающей пары).

Подкорректировать веса сети для минимизации ошибки (как см. ниже).

Повторять шаги с 2 по 5 для каждого вектора обучающего множества до тех пор, пока ошибка на всем множестве не достигнет приемлемого уровня.

Рассмотрим подробней 5 шаг - корректировка весов сети. Здесь следует выделить два нижеописанных случая.

Случай 1. Корректировка синаптических весов выходного слоя

Определимся, что индексом p будем обозначать нейрон, из которого выходит синаптический вес, а q - нейрон в который входит.

Введем величину д, которая равна разности между требуемым и реальным выходами, умноженной на производную функции активации:

(9)

Тогда, веса выходного слоя после коррекции будут равны:

(10)

где:

i - номер текущей итерации обучения;

- величина синаптического веса, соединяющего нейрон p с нейроном q;

- коэффициент "скорости обучения", позволяет управлять средней величиной изменения весов;

- выход нейрона .

Случай 2. Корректировка синаптических весов скрытого слоя.

(11)

где:

- сумма от 1 по N, N - количество нейронов выходного слоя.

Тогда, веса скрытого слоя после коррекции будут равны:

(12)

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

(13)

где реальное выходное состояние нейрона выходного слоя N нейронной сети при подаче на ее входы - го образа; - желаемое (идеальное) выходное состояние этого нейрона. Суммирование происходит по всем нейронам выходного слоя и по всем обрабатываемым сетью образам.

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

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

План эксперимента:

Коэффициент сигмоиды изменяется от 0 до 10 с шагом 0,1;

Количество шагов обучения - 100;

Так как поверхность является функцией от двух переменных, коэффициент скорости обучения должен быть константой. Поэтому его возьмем равным 3 конкретным значениям: 0,5; 1; 1,5. Тогда функция ошибки будет зависеть от двух параметров, и мы сможем построить ее график.

Анализируя графики, мы сможем выбрать оптимальные значения этих параметров.

4. Разработка схем алгоритмов

Для дальнейшей работы необходимо построить следующие алгоритмы: алгоритм работы программы в целом, и алгоритм обучения нейросети. Обобщенная схема алгоритма программы, распознающей 2 класса чисел с помощью искусственной нейросети, представлена на рисунке 2.

Разработка программы

Разработанная программа предназначена для выполнения курсового проекта, а также демонстрирует изученные в процессе обучения навыки владения языком C#.

Для запуска этой программы необходимо иметь на компьютере установленную версию Windows XP/Vista/7. Данная программа разрабатывалась в среде MSVisualC# 2010(Microsoft .NET Framework 4.0).

Для работы использовались следующие пространства имен:

System;

System.Collections.Generic;

System.ComponentModel;

System.Data;

System.Drawing;

System.Text;

System.Windows.Forms;

System.Threading;

System.IO;

Для создания программы были использованы:

class Neyro - класс работающий с нейросетью.

class Form1 : Form - класс диалогового окна, наследуемый от стандартного класса Form.

public int[] Vihod(int kol, int kl) - метод, формирующий целевой вектор.

public void Korekt() - метод, коректирующий синапсы.

public void Rez() - метод вычисления результата нейросети.

public void CreateNS() - метод, создающий нейросеть.

public void Obuchenie(string file, StreamWriter sw1) - метод, обучающий нейросеть определенному классу чисел.

private void grafic() - метод, рисующий график.

Текст программы представлен в приложении А.

Вычислительный эксперимент

5. Определение оптимальных параметров нейросети в среде Matlab

После выполнения программы появляются три графика. Результаты представлены на рисунках 4,5,6.

График ошибки при значении коэффициента скорости обучения 0,5.

График ошибки при значении коэффициента скорости обучения 1.

График ошибки при значении коэффициента скорости обучения 1,5

Анализируя полученные результаты, можно сделать вывод, что для эффективной работы нейросети, коэффициент скорости обучения должен принимать значения от 0,5 до 1. Коэффициент а в функции активации (7) нужно выбирать в пределах от 2 до 4. Количество шагов обучения лучше оставить равным 100. Конкретные значения нужно будет подобрать экспериментально, в зависимости от процента правильного распознавания при тех или иных значениях коэффициентов.

Программа разработанная на языке С#.

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

Количество шагов обучения - 100;

Коэффициент скорости обучения - 0,7;

Коэффициент сигмоида - 1,3;

Эффективность работы нейросети с этими параметрами так же была проверена при работе с другими классами чисел. Поэтому для данной нейросети лучше использовать именно эти значения.

При запуске вызываем Windows окно. Ознакомившись, вводим данные с клавиатуры, требуемые программой. Вычислительный эксперимент представлен на рисунках 8, 9.

Результат работы программы, представленный в Windows окне

Результат работы программы, представленный в Windows окне

При неправильном использовании возникают ошибки, представленные на рисунках 10, 11.

Ошибки при вводе данных

Ошибки при вводе данных

6. Руководство программиста

Разработанная программа демонстрирует изученные в процессе обучения навыки владения языком C#.

Назначение и условия применения программы

Программа предназначена для распознавания двух классов чисел.

Для запуска этой программы необходимо иметь на компьютере установленную версию Windows XP/Vista/7. Данная программа разрабатывалась в среде MSVisualC# 2010(Microsoft .NET Framework 4.0).

Характеристика программы

Для написания программы нам понадобились следующие команды:

Получение числовых значений из текстовых полей:

neyr1 = Convert.ToInt32(textBox1.Text);

Вывод окошка:

MessageBox.Show("Введите количество нейронов первого слоя");

Чтение содержимого файла:

text = File.ReadAllLines("1-1.txt");

Сброс текстбокса:

textBox1.Clear();

В данной программе был создан класс - class Neyro, с помощью которого создается нейросеть, и затем ведется работа с ней.

Класс содержит следующие переменные:

public double[] prom, vvod;

public double[,] w1, w2;

public double[] rez;

public int count1=0, count2=0;

public int neyr1, neyr2;

public int[] ogid;

public bool[] ogid1, ogid2;

public double k, skor;

public double[] err_m = new double[100]; (cм. Приложение А)

Значениям переменных neyr1, neyr2 присваивается значение количества нейронов в первом и втором слоях нейросети соответственно.

Массив vvod заполняется из файла с входными данными. Далее вычисляются значения массивов prom и rez. Массив prom - это результаты выходов нейронов первого слоя. А массив rez - результаты выходов нейросети.

Алгоритм вычислений в классе соответствует формулам (5), (6), (7);

Так же в классе используются методы:

public int[] Vihod(int kol, int kl) - метод, формирующий целевой вектор.

public void Korekt() - метод, коректирующий синапсы.

public void Rez() - метод вычисления результата нейросети.

public void CreateNS() - метод, создающий нейросеть.

public void Obuchenie(string file, StreamWriter sw1) - метод, обучающий нейросеть определенному классу чисел.

Текст программы класса представлен в Приложении А.

Правильность работы класса и программы в целом подтверждена вычислительным экспериментом. (см. рисунок 4,5).

Обращение к программе

Для запуска программы необходимо открыть в папке "курсовой ИТПЗ 2010" файл "курсовой титп2.sln" с помощью MS Visual Studio С# 2010 и нажать кнопку "Начать отладку". В результате должно появиться окно программы.

Входные и выходные данные

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

Количество шагов обучения - 100;

Коэффициент скорости обучения - 0,7;

Коэффициент сигмоида - 1,3;

Эффективность работы нейросети с этими параметрами так же была проверена при работе с другими классами чисел. Поэтому для данной нейросети лучше использовать именно эти значения.

В пункты: "Количество нейронов", нужно вводить целые значения. Значения коэффицентов k (коэффицент сигмоидной функции) и skor (скорость обучения) могут быть дробными.

В пункте "Обучающая выборка" нужно выбрать файлы для обучения нейросети соответствующим классам.

В пунктах "Файл" выбираются файлы для экзаменационной и тестовой выборки.

7. Руководство пользователя

Программа предназначена для распознавания двух классов чисел.

Для запуска программы необходимо открыть в папке "курсовой ИТПЗ 2010" файл "курсовой титп2.sln" с помощью MS Visual Studio С# 2010 и нажать кнопку "Начать отладку". В результате должно появиться окно программы.

После появления рабочего окна (рисунок 9) можно поступать к работе.

Окно для ввода данных

В пункты: "Количество нейронов", нужно вводить целые значения. Значения коэффицентов k (коэффицент сигмоиды) и skor (скорость обучения) могут быть дробными.

Для данной нейросети оптимальными являются следующие значения:

Количество нейронов 1 слоя - 15;

Количество нейронов 2 слоя - 4;

Коэффициент сигмоиды - 1,3;

Скорость обучения - 0,7.

После ввода этих значений нужно нажать кнопку "Создать сеть".

Далее в пункте "Обучающая выборка" нужно выбрать файлы для обучения нейросети и нажать на кнопку "Обучить".

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

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

Тестовая выборка служит для того, чтобы самому убедиться в правильности работы программы. Здесь выбирается файл, содержащий одну выборку определенного класса, и после нажатия кнопки "Результат" появляется сообщение, к какому классу относится данная выборка.

вычислительный программирование нейросеть сигмоид

Заключение

Разработанная программа соответствует заданным на этапе проектирования требованиям. Во время работы над программой были изучены функций языка С#, принципы программирования нейросетей. Был исследован метод обратного распространения ошибки для обучения нейросети, были подобраны оптимальные параметры для данного метода.

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

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

1. Павловская Т.А. C#. Программирование на языке высокого уровня. СПб. : Питер, 2012.

2. Фролов А. В., Фролов Г. В. Язык С#. Самоучитель. М: ДИАЛОГ-МИФИ, 2010.- 560с.

ГОСТ 2.105-95 Единая система конструкторской документации. Общие требования к текстовым документам.

ГОСТ 19.504-79 (СТ СЭВ 2095-80). Руководство программиста. Требования к содержанию и оформлению.

5. ГОСТ 19.701-90 (ИСО 5807-85). ЕСПД. Схемы алгоритмов, программ, данных и систем.

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.