Автор: Пользователь скрыл имя, 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
Таким образом, в данной сети имеется выделенное направление распространения нейроимпульсов — от входного слоя через один (или несколько) скрытых слоев к выходному слою нейронов. Нейросеть такой топологии мы будем называть обобщенным многослойным персептрономили, если это не будет вызывать недоразумений, просто персептроном.
Персептрон представляет собой сеть, состоящую из нескольких последовательно соединенных слоев нейронов. На низшем уровне иерархии находится входной слой сенсорных элементов, задачей которого является только прием и распространение по сети входной информации. Далее имеются один или, реже, несколько скрытых слоев. Каждый нейрон на скрытом слое имеет несколько входов, соединенных с выходами нейронов предыдущего слоя или непосредственно со входными сенсорами , и один выход. Выходы нейронов последнего, выходного, слоя описывают результат классификации . Особенности работы персептрона состоят в следующем. Каждый нейрон суммирует поступающие к нему сигналы от нейронов предыдущего уровня иерархии с весами, определяемыми состояниями синапсов, и формирует ответный сигнал (переходит в возбужденное состояние), если полученная сумма выше порогового значения. Персептрон переводит входной образ, определяющий степени возбуждения нейронов самого нижнего уровня иерархии, в выходной образ, определяемый нейронами самого верхнего уровня. Число последних обычно сравнительно невелико. Состояние возбуждения нейрона на верхнем уровне говорит о принадлежности входного образа к той или иной категории.
Традиционно рассматривается аналоговая логика, при которой допустимые состояния синаптических связей определяются произвольными действительными числами, а степени активности нейронов - действительными числами между 0 и 1. Иногда исследуются также модели с дискретной арифметикой, в которой синапс характеризуется двумя булевыми переменными: активностью (0 или 1) и полярностью ( или ). Состояния нейронов могут при этом описываться одной булевой переменной. Данный дискретный подход делает конфигурационное пространство состояний нейронной сети конечным (не говоря уже о преимуществах при аппаратной реализации).
Мы рассмотрим классический вариант
многослойной сети с аналоговыми
синапсами и сигмоидальной
В литературе нет единого мнения
относительно того, что именно считать
числом слоев в таких сетях. Одни
авторы используют число слоев нейронов
(включая несуммирующий
Процедура обратного распространения
Обзор обучения. Целью обучения сети является такая подстройка ее весов, чтобы приложение некоторого множества входов приводило к требуемому множеству выходов. Для краткости эти множества входов и выходов будут называться векторами. При обучении предполагается, что для каждого входного вектора существует парный ему целевой вектор, задающий требуемый выход. Вместе они называются обучающей парой. Как правило, сеть обучается на многих парах. Например, входная часть обучающей пары может состоять из набора нулей и единиц, представляющего двоичный образ некоторой буквы алфавита. На 2.4 показано множество входов для буквы "А", нанесенной на сетке.
Рисунок 2.5 Входы для буквы «А»
. Если через квадрат проходит
линия, то соответствующий
Перед началом обучения всем весам должны быть присвоены небольшие начальные значения, выбранные случайным образом. Это гарантирует, что в сети не произойдет насыщения большими значениями весов, и предотвращает ряд других некорректных случаев. Например, если всем весам придать одинаковые начальные значения, а для требуемого функционирования нужны неравные значения, то сеть не сможет обучиться.
Обучение сети обратного распространения требует выполнения следующих операций:
Операции, выполняемые шагами 1 и 2, сходны с теми, которые выполняются при функционировании уже обученной сети, — подается входной вектор и вычисляется получающийся выход. Вычисления выполняются послойно. На рис. 2.3 сначала вычисляются выходы нейронов слоя , затем они используются в качестве входов слоя , после чего вычисляются выходы нейронов слоя , которые и образуют выходной вектор сети.
На шаге 3 каждый из выходов сети, которые на рис. 2.3 обозначены , вычитается из соответствующей компоненты целевого вектора, чтобы получить значение ошибки. Эта ошибка используется на шаге 4 для коррекции весов сети, причем знак и величина изменений весов определяются алгоритмом обучения.
После достаточного числа повторений этих четырех шагов разность между действительными и целевыми выходами должна уменьшиться до приемлемой величины: при этом говорят, что сеть обучилась. Теперь сеть используется для распознавания, и веса не изменяются.
На шаги 1 и 2 можно смотреть как на "проход вперед", так как сигнал распространяется по сети от входа к выходу. Шаги 3, 4 составляют "обратный проход", здесь вычисляемый сигнал ошибки распространяется обратно по сети и используется для подстройки весов. Эти два прохода теперь будут детализированы и записаны как математические выражения.
Проход вперед. Шаги 1 и 2 могут быть выражены в векторной форме следующим образом: подается входной вектор и на выходе получается вектор . Векторная пара вход — цель и берется из обучающего множества. Вычисления проводятся над вектором , чтобы получить выходной вектор .
Как мы видели, вычисления в многослойных сетях выполняются слой за слоем, начиная с ближайшего к входу. Величина каждого нейрона первого слоя вычисляется как взвешенная сумма входов нейрона. Затем активационная функция "сжимает" и дает величину для каждого нейрона в этом слое. Когда множество выходов слоя получено, оно является входным множеством для следующего слоя. Процесс повторяется слой за слоем, пока не будет получено заключительное множество выходов сети.
Этот процесс может быть выражен в сжатой форме с помощью векторной нотации. Веса между нейронами будем рассматривать как матрицу . Например, вес от нейрона 8 в слое 2 к нейрону 5 слоя 3 обозначается . Тогда -вектор слоя может быть выражен не как сумма произведений, а как произведение и . В векторном обозначении . Покомпонентным применением функции к -вектору получаем выходной вектор . Таким образом, для данного слоя вычислительный процесс описывается следующим выражением:
|
(3) |
Выходной вектор одного слоя является входным вектором для следующего, поэтому вычисление выходов последнего слоя требует применения уравнения (3) к каждому слою от входа сети к ее выходу.
Обратный проход. Подстройка весов выходного слоя. Так как для каждого нейрона выходного слоя задано целевое значение, то подстройка весов легко осуществляется с использованием дельта - правила. Внутренние слои называют "скрытыми слоями", для их выходов не имеется целевых значений для сравнения, поэтому обучение усложняется.
Рассмотрим процесс обучения для одного веса от нейрона в скрытом слое к нейрону в выходном слое . Выход нейрона слоя , вычитаемый из целевого значения (Target), дает сигнал ошибки. Он умножается на производную сжимающей функции , вычисленную для этого нейрона слоя , давая, таким образом, величину .
|
(4) |
Затем умножается на величину нейрона , из которого выходит рассматриваемый вес. Это произведение, в свою очередь, умножается на коэффициент скорости обучения (обычно от 0,01 до 1,0), и результат прибавляется к весу. Такая же процедура выполняется для каждого веса от нейрона скрытого слоя к нейрону в выходном слое.
Следующие уравнения иллюстрируют это вычисление:
|
(5) | |
|
(6) |
где — величина веса от нейрона в скрытом слое к нейрону в выходном слое на шаге (до коррекции); отметим, что индекс относится к слою, в котором заканчивается данный вес (т. е. к слою, с которым он объединен); — величина веса на шаге (после коррекции); — величина для нейрона , в выходном слое ; — величина для нейрона в скрытом слое .
Подстройка весов скрытого слоя. Рассмотрим один нейрон в скрытом слое, предшествующем выходному слою. При проходе вперед этот нейрон передает свой выходной сигнал нейронам в выходном слое через соединяющие их веса. Во время обучения эти веса функционируют в обратном порядке, пропуская величину от выходного слоя назад к скрытому слою. Каждый из этих весов умножается на величину нейрона, к которому он присоединен в выходном слое. Величина , необходимая для нейрона скрытого слоя, получается суммированием всех таких произведений и умножением на производную сжимающей функции (см. рис. 2.6):
|
(7)
Когда значение
получено, веса, питающие первый скрытый
уровень, могут быть подкорректированы
с помощью уравнений (5) и (6), где индексы
модифицируются в соответствии со слоем.
Для каждого нейрона в данном
Рисунок. 2.6
С помощью векторных обозначений операция обратного распространения ошибки может быть записана значительно компактнее. Обозначим множество величин выходного слоя через и множество весов выходного слоя как массив . Чтобы получить , -вектор выходного слоя, достаточно следующих двух операций:
Добавление нейронного смещения. Во многих случаях желательно наделять каждый нейрон обучаемым смещением. Это позволяет сдвигать начало отсчета логистической функции, давая эффект, аналогичный подстройке порога персептронного нейрона, и приводит к ускорению процесса обучения. Такая возможность может быть легко введена в обучающий алгоритм с помощью добавляемого к каждому нейрону веса, который присоединен к +1. Этот вес обучается так же, как и все остальные веса, за исключением того, что подаваемый на него сигнал всегда равен +1, а не выходу нейрона предыдущего слоя.
Импульс. Существует метод ускорения обучения для алгоритма обратного распространения, увеличивающий также устойчивость процесса. Этот метод, названный импульсом, заключается в добавлении к коррекции веса члена, пропорционального величине предыдущего изменения веса. Как только происходит коррекция, она "запоминается" и служит для модификации всех последующих коррекций. Уравнения коррекции модифицируются следующим образом:
где — коэффициент импульса, который обычно устанавливается около 0,9.
Используя метод импульса, сеть стремится идти по дну "узких оврагов" поверхности ошибки (если таковые имеются), а не двигаться "от склона к склону". Этот метод, по-видимому, хорошо работает на некоторых задачах, но дает слабый или даже отрицательный эффект на других.