Автор: Пользователь скрыл имя, 04 Апреля 2013 в 17:11, дипломная работа
Цель - изучение основных принципов работы искусственной вычислительной модели биологического нейрона и их демонстрация на примере решения задачи XOR.
Задачи
Изучение общих вопросов организации искусственных нейронных сетей;
Анализ способности к обучению искусственных нейронных сетей;
Изучение проблемы ограниченности возможностей однослойных персептронов;
Создание программного приложения, демонстрирующего решение проблемы XOR – исключающего ИЛИ.
Введение 3
1 Интеллектуальные системы на основе искусственных нейронных сетей 6
1.1 Аппаратное моделирование структур, подобных структуре мозга 6
1.2 Архитектура нейронной сети 13
1.3 Обучение искусственных нейронных сетей. 25
2 Многослойные сети прямого распространения 33
2.1 Ограниченность возможностей однослойных персептронов. 33
2.2 Принцип обучения многослойной нейронной сети с помощью алгоритма обратного распространения 37
2.3 Пример решения задачи XOR - исключающего ИЛИ 50
Заключение 59
Список используемой литературы 61
Приложение А 62
Это уравнение линейно по и , т. е. все значения по и , удовлетворяющие этому уравнению, будут лежать на некоторой прямой в плоскости. Любые входные значения для и на этой линии будут давать пороговое значение . Прямая разделяет плоскость на две полуплоскости (см рис 2.7). Входные значения в одной полуплоскости обеспечат значения больше порога, следовательно, . Входные значения во второй полуплоскости обеспечат значения меньше порогового значения, делая . Изменения значения , и порога будут менять наклон и положение прямой. Для того, чтобы сеть реализовала функцию – исключающего ИЛИ, заданную таблицой выше, нужно расположить прямую так, чтобы точки были с одной стороны прямой, а точки – с другой. Попытавшись нарисовать такую прямую на рисунке ниже, убеждаемся, что это невозможно. Это означает, что какие бы значения ни приписывались весам и порогу, сеть неспособна воспроизвести соотношение между входом и выходом, требуемое для представления функции – исключающего ИЛИ.
Рисунок 2.9
Пример решения задачи XOR - исключающего ИЛИ
Часто, для того чтобы продемонстрировать ограниченные возможности однослойных персептронов при решении задач прибегают к рассмотрению так называемой проблемы XOR – исключающего ИЛИ.
Суть задачи заключаются в следующем.
Дана логическая функция XOR – исключающее
ИЛИ. Это функция от двух аргументов,
каждый из которых может быть нулем
или единицей. Она принимает значение
1, когда один из аргументов равен
единице, но не оба, иначе 0. Проблему можно
проиллюстрировать с помощью
однослойной однонейронной
Рисунок 2.10 Однонейронная сеть
Обозначим один вход через X1, а другой через X2 (См рис 2.8), тогда все их возможные комбинации будут состоять из четырех точек на плоскости. Таблица ниже показывает требуемую связь между входами и выходом, где входные комбинации, которые должны давать нулевой выход, помечены A0 и A1, единичный выход – B0 и B1.
Точки |
Значение X1 |
Значение X2 |
Требуемый выход |
A0 |
0 |
0 |
0 |
B0 |
0 |
1 |
1 |
B1 |
1 |
0 |
1 |
A1 |
1 |
1 |
0 |
Один нейрон с двумя входами может сформировать решающую поверхность в виде произвольной прямой. Для того, чтобы сеть реализовала функцию XOR, заданную таблицей выше, нужно расположить прямую так, чтобы точки были с одной стороны прямой, а точки – с другой. Попытавшись нарисовать такую прямую на рисунке 2.9, убеждаемся, что это невозможно. Это означает, что какие бы значения ни приписывались весам и порогу, однослойная нейронная сеть неспособна воспроизвести соотношение между входом и выходом, требуемое для представления функции XOR.
Рисунок 2.11
Однако функция XOR легко формируется уже двухслойной сетью, причем многими способами. Рассмотрим один из таких способов. Модернизуем сеть на рисунке 2.10, добавив еще один скрытый слой нейронов:
Рисунок 2.12 Двухслойный персептрон с пороговой функцией активации
Отметим, что данная сеть дана как есть, т.е. можно считать, что она уже обучена. Цифры над стрелками показывают значения синаптических весов. В качестве функции активации применим функцию единичного скачка с порогом 0.5, имеющую следующий график:
Рисунок 2.13
Тогда результат работы такой нейронной сети можно представить в виде следующей таблицы:
Точки |
Значение X1 |
Значение Х2 |
Требуемый выход |
OUT1 |
OUT2 |
OUT3 |
A0 |
0 |
0 |
0 |
0 |
0 |
0 |
B0 |
0 |
1 |
1 |
1 |
0 |
1 |
B1 |
1 |
0 |
1 |
0 |
1 |
1 |
A1 |
1 |
1 |
0 |
0 |
0 |
0 |
Каждый из двух нейрон первого слоя формирует решающую поверхность (см рис 2.12) в виде произвольной прямой (делит плоскость на две полуплоскости), а нейрон выходного слоя объединяет эти два решения, образуя решающую поверхность в виде полосы, образованной параллельными прямыми нейронов первого слоя :
Рисунок 2.14
Нейронная сеть, для решения задачи XOR, примитивна и не использует всех возможностей многослойных сетей. Очевидно, что многослойные нейронные сети обладают большей представляющей мощностью, чем однослойные, только в случае присутствия нелинейности. А в данной сети применена пороговая линейная функция активации. Такую сеть нельзя будет обучить, например, применив алгоритм обратного распространения ошибки.
Ниже приведен внешний вид программы:
Рисунок 2.15 Внешний вид программы
В результате работы над дипломным проектом были изучены общие вопросы организации искусственных нейронных сетей. Проанализированы способности к обучению искусственных нейронных сетей. Возможность обучения — одно из главных преимуществ нейронных сетей перед традиционными алгоритмами. Выявлены преимущества нейросетевого подхода:
В дипломной работе рассмотрена проблема ограниченности возможностей однослойных персептронов. Однонейронный персептрон не позволяет моделировать логическую функцию “Исключающее ИЛИ” и решать другие линейно неразделимые задачи. Приведены доказательства того, что с помощью многослойных персептронов может быть смоделирована любая логическая функция, если только известна ее логическая формула. Создано программное приложение, демонстрирующее решение проблемы XOR – исключающего ИЛИ.
Нейроинформационные технологии открыли иной подход к методике построения компьютерных математических моделей. Появилась возможность, не задумываясь над законами физики, химии, биологии, медицины, общественного развития и т.д., а исходя из одного только эмпирического опыта (обучающих примеров), строить математические модели, которые сами выявляют законы природы и закономерности предметных областей и позволяют их эффективно использовать для решения широкого круга практических задач. Появился новый инструмент извлечения знаний из данных, позволяющий заново открывать фундаментальные законы природы, выявлять ранее неизвестные и никогда не исследованные зависимости и закономерности и использовать их для решения конкретных практических задач.
Листинг программы
unit Unit_Index;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, FannNetwork, StdCtrls, Spin, Math, FANN, jpeg, ExtCtrls;
type
TForm_index = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label_MSE: TLabel;
SpinEdit_epochs: TSpinEdit;
Button_learn: TButton;
NN: TFannNetwork;
Label4: TLabel;
Edit_training_speed: TEdit;
SpinEdit_learning_rate: TSpinEdit;
GroupBox2: TGroupBox;
Memo_result: TMemo;
Button1: TButton;
SaveDialog_result: TSaveDialog;
GroupBox3: TGroupBox;
Label6: TLabel;
GroupBox4: TGroupBox;
Image1: TImage;
procedure Button_learnClick(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form_index: TForm_index;
implementation
{$R *.dfm}
procedure TForm_index.Button_learnClick(
var
inputs: array [0..1] of single;
outputs: array [0..0] of single;
e, i, j, m, n: integer;
MSE: single;
c: PFann_Connection;
begin
NN.UnBuild;
NN.Build;
Memo_result.Lines.Clear;
NN.LearningRate
:= StrToFloat('0,' + IntToStr(SpinEdit_learning_
for e := 1 to SpinEdit_epochs.Value do
begin
for i := 0 to 1 do
begin
for j := 0 to 1 do
begin
inputs[0] := i;
inputs[1] := j;
outputs[0] := i xor j;
MSE := NN.Train(inputs, outputs);
Label_MSE.Caption := Format('%.4f', [MSE]);
Application.ProcessMessages;
end;
end;
if (e mod 1000 = 0) or (e = SpinEdit_epochs.Value) then
begin
Memo_result.Lines.Add(' Эпоха обучения: ' + IntToStr(e));
Memo_result.Lines.Add(' СКО: ' + FloatToStr(RoundTo(MSE, -8)));
for m := 0 to 1 do
for n := 0 to 1 do
begin
inputs[0] := m;
inputs[1] := n;