Нейронные сети

Автор работы: Пользователь скрыл имя, 29 Сентября 2013 в 17:40, курсовая работа

Описание работы

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

Содержание работы

Введение 3
1.Основные понятия 4
1.1. История нейронных сетей 4
1.2. Аналогия с мозгом 7
1.3. Биологический нейрон 8
1.4. Искусственный нейрон 10
1.5. Обучение искусственных нейронных сетей 19
1.6. Применение нейронных сетей 21
2. Приложение 22
2.1. Интерфейс 22
2.1. Код программы 23
Заключение 26
Список литературы 27

Файлы: 1 файл

Opisanie_kursovoy_raboty.doc

— 206.00 Кб (Скачать файл)

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

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

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

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

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

Еще одна классификация делит нейронные  сети на синхронные и асинхронные[3]. В первом случае в каждый момент времени свое состояние меняет лишь один нейрон. Во втором – состояние меняется сразу у целой группы нейронов, как правило, у всего слоя. Алгоритмически ход времени в нейросети задается итерационным выполнением однотипных действий над нейронами. Далее будут рассматриваться только синхронные нейронные сети.

Сети также можно классифицировать по числу слоев. На рисунке 5 представлен  двухслойный перцептрон, полученный из перцептрона с рисунка 3 путем  добавления второго слоя, состоящего из двух нейронов. Здесь уместно отметить важную роль нелинейности активационной функции, так как, если бы она не обладала данным свойством или не входила в алгоритм работы каждого нейрона, результат функционирования любой p-слойной нейросети с весовыми матрицами W(i), i=1,2,...p для каждого слоя i сводился бы к перемножению входного вектора сигналов X на матрицу

 

W(S)=W(1)×W(2) ×...×W(p) (7)

 

то есть фактически такая p-слойная  нейросеть эквивалентна однослойной  сети с весовой матрицей единственного  слоя W(S):

Y=XW(S(8)

 

Продолжая разговор о нелинейности, можно отметить, что она иногда вводится и в синаптические связи. Большинство известных на сегодняшний день сетей используют для нахождения взвешенной суммы входов нейрона формулу (1), однако в некоторых приложениях полезно ввести другую запись, например:

 

 (9)

 

или даже

 

 (10)

 

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

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

Теперь рассмотрим один нюанс, преднамеренно  опущенный ранее. Из рисунка функции  единичного скачка видно, что пороговое значение T, в общем случае, может принимать произвольное значение. Более того, оно должно принимать некое произвольное, неизвестное заранее значение, которое подбирается на стадии обучения вместе с весовыми коэффициентами. То же самое относится и к центральной точке сигмоидной зависимости, которая может сдвигаться вправо или влево по оси X, а также и ко всем другим активационным функциям. Это, однако, не отражено в формуле (1), которая должна была бы выглядеть так:

 

 (11)

 

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

 

, (12)

 

где w0 = –T, x0 = 1.

Очевидно, что различие формул (1) и (12) состоит лишь в способе нумерации  входов.

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

 

1.5. Обучение искусственных нейронных сетей

Обучить нейронную сеть - значит, сообщить ей, чего мы от нее добиваемся. Этот процесс очень похож на обучение ребенка алфавиту. Показав ребенку  изображение буквы "А", мы спрашиваем его: "Какая это буква?" Если ответ неверен, мы сообщаем ребенку тот ответ, который мы хотели бы от него получить: "Это буква А". Ребенок запоминает этот пример вместе с верным ответом, то есть в его памяти происходят некоторые изменения в нужном направлении. Мы будем повторять процесс предъявления букв снова и снова до тех пор, когда все 33 буквы будут твердо запомнены. Такой процесс называют "обучение с учителем".

При обучении нейронной сети мы действуем  совершенно аналогично. У нас имеется некоторая база данных, содержащая примеры (набор рукописных изображений букв). Предъявляя изображение буквы "А" на вход нейронной сети, мы получаем от нее некоторый ответ, не обязательно верный. Нам известен и верный (желаемый) ответ - в данном случае нам хотелось бы, чтобы на выходе нейронной сети с меткой "А" уровень сигнала был максимален. Обычно в качестве желаемого выхода в задаче классификации берут набор (1, 0, 0, ...), где 1 стоит на выходе с меткой "А", а 0 - на всех остальных выходах. Вычисляя разность между желаемым ответом и реальным ответом сети, мы получаем 33 числа - вектор ошибки. Алгоритм обратного распространения ошибки - это набор формул, который позволяет по вектору ошибки вычислить требуемые поправки для весов нейронной сети. Одну и ту же букву (а также различные изображения одной и той же буквы) мы можем предъявлять нейронной сети много раз. В этом смысле обучение скорее напоминает повторение упражнений в спорте - тренировку.

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

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

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

 

1.6. Применение нейронных сетей

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

 

2. Приложение

2.1. Интерфейс

 

Интерфейс программы представлен  двумя окнами, первое главное  окно, в котором расположен компонент для рисования цифр. Также имеются 3 кнопки: “Очистить” для отчистки окна, “Запомнить” для того чтобы программа запомнила образ, “Распознать” для попытки распознать нарисованную в окне цифру.

 

Рисунок 3(Главное окно)

Второе окно появляется при нажатии  кнопки “Запомнить”. Окно предлагает указать нарисованную вами цифру, для запоминания ее образа.

 

2.1. Код программы

Процедура запоминания образа

procedure TForm1.MemorizeBtnClick(Sender: TObject);

var

Temp: TNeuro;

begin

  Form2.ShowModal;

  case Form2.Tag of

    -1: begin end;

    else

      begin

        Temp.GetFromBitmap(VScreen);

        Temp.Normalize;

        if not Temp.Empty then

          begin

             Bank.Neuro[Chr(48+Form2.Tag)].MemoryFrom(Temp);

             Bank.SaveToFile('Bank.bnk');

          end;

      end;

  end;{case}

end;

 

Процедура распознавания образа

procedure TForm1.RecognizeBtnClick(Sender: TObject);

var

MinVal, Value: real;

MinString: String;

 Ch: Char;

Temp: TNeuro;

begin

  MinVal := 1e10;

  MinString := 'Образ не распознан.';

  Temp.GetFromBitmap(VScreen);

  Temp.Normalize;

  PaintBox1Paint(nil);

  if not Temp.Empty then

    for Ch := Low(Bank.Neuro) to High(Bank.Neuro) do

    if not Bank.Neuro[Ch].Empty then

      begin

        Value := Bank.Neuro[Ch].CompareWith(Temp);

        if Value < MinVal then

          begin

            MinVal := Value;

            MinString := 'Это '+Ch;

          end;

      end;

  ShowMessage(MinString);

end;

 

Запоминание

procedure TNeuro.MemoryFrom(var Neuro: TNeuro); 

var f,g: Integer;

    Sum: Single;

begin

  Sum := 0.0;

  for f := 0 to High(A) do

    for g := 0 to High(A[f]) do

    begin

      A[f,g] := A[f,g] * MemoryK + Neuro.A[f,g] * (1-MemoryK);

      if A[f,g] > Sum then Sum := A[f,g];

    end;

 

  if Sum > 1e-5 then

  begin

    Empty := False;

    Sum := 1 / Sum;

    for f := 0 to High(A) do

      for g := 0 to High(A[f]) do

        A[f,g] := A[f,g] * Sum;

  end

    else Empty := True;

 

end;

 

 

Заключение

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

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

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

 

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

  1. http://www.module.ru/files/un_neuron_net.pdf
  2. http://www.neuroproject.ru/neuro.htm
  3. http://www.orc.ru/~stasson/neurox.html#articles

цикл статей: «нейронные сети: основные положения», C.Короткий

  1. http://mechanoid.narod.ru/nns/base Основные модели и методы теории искусственных нейронных сетей, Борисов Е. С., 19 октября 2005 г.

 

 

 


Информация о работе Нейронные сети