Смекни!
smekni.com

Самообучающиеся системы (стр. 3 из 5)

Рисунок4 - Графическое представление функции XOR

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

Задачи, для которых не существует решающей поверхности в виде гиперплоскости, называются линейно неразделимыми.

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

7 Решение проблемы XOR

Для построения булевых функций c помощью нейросетей есть завершенные математические методы [Мкртчян71]. Рассмотрим простейший пример и построим нейронную сеть без предварительного обучения.

ЗапишемфункциюXORввиде: y = x1XORx2 = (x1 ANDNOTx2) OR (NOTx1 ANDx2). Алгоритмические обозначения операторов использованы для наглядности. Легко построить двухслойную сеть для реализации такой функции. Инверсию можно осуществить отрицательным весовым коэффициентом, а операции AND и OR — каждую отдельным нейроном с различными значениями порогов. Схема сети представлена на рисунке 6.

Рисунок5 - Двухслойная сеть, реализующая функцию XOR.

Таблица 2 -Таблица истинности для нейронной сети

x1 x2 d1 d2 y1 y2 d y
-1 -1 0 0 -1 -1 -2w -1
-1 1 -w w -1 1 w 1
1 -1 w -w 1 -1 w 1
1 1 0 0 1 1 -2w -1

8 Нейронные сети обратного распространения

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

Нейронная сеть обратного распространения состоит из нескольких слоев нейронов, причем каждый нейрон слоя i связан с каждым нейроном слоя i+1, т. е. речь идет о полносвязной НС.

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

В общем случае задача обучения НС сводится к нахождению некой функциональной зависимости Y=F(X) где X – входной, а Y – выходной векторы. В общем случае такая задача, при ограниченном наборе входных данных, имеет бесконечное множество решений. Для ограничения пространства поиска при обучении ставится задача минимизации целевой функции ошибки НС, которая находится по методу наименьших квадратов:

где

yj – значение j-го выхода нейросети;

dj– целевое значение j-го выхода;

k– число нейронов в выходном слое.

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

где ή – параметр, определяющий скорость обучения.

Для выходного слоя можно записать компоненты градиента по весам функции ошибки:

где

yj– значение выхода j-го нейрона;

Sj– взвешенная сумма входных сигналов j-го нейрона;

wiji-тый вход j – того нейрона.

При этом производная взвешенной суммы по весам будет равна:

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

Для выходного слоя производная функции ошибки будет равна:

,

где p – номер обучающего образца.

Если в качестве активационной функции используется сигмоид, то

будет определяться формулой:

,

где

, определяет текущее значение выходного сигнала.

Расчеты по вышеприведенным формулам позволяют выполнить коррекцию весов для нейронов последнего слоя. Для получения формул для других слоев можно воспользоваться формулой производной функции ошибки по входному сигналу (n – номер слоя):

.

Последний сомножитель тождественно совпадает с весовым коэффициентом i – того входа j – того нейрона:

.

Но производная по входному значению

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

.

Первый множитель формулы (7) определяется формулой:

,

где k – число нейронов в слое n.

Вводится вспомогательная переменная

Тогда можно задать рекурсивную формулу для определения

(n-1) - го слоя, если известны
следующего n - го слоя.

.

Нахождение же

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

.

Можно записать формулу для приращений весовых коэффициентов в раскрытом виде

.

Полный алгоритм обучения нейросети складывается из следующих шагов:

1) подать на вход НС один из обучающих образов и определить значения выходов нейронов;

2) рассчитать функцию ошибки Е. Если значение ошибки не превышает допустимое, то выбрать следующий обучающий образец и перейти на шаг 1. Целесообразно организовать случайный выбор образцов из обучающей последовательности. Иначе – к следующему пункту;

3) рассчитать

для выходного слоя нейронной сети по формуле (12) и рассчитать изменения весов
выходного слоя n по формуле (13);

4) рассчитать по формулам (11) и (13) соответственно

и
для остальных слоев, n = N-1..1;

5) скорректировать все веса нейронной сети:

6) перейти на шаг 1.

9 Повышение эффективности обучения

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

Простейшим методом усовершенствования градиентного спуска является введение момента µ, когда влияние градиента на изменение весов изменяется со временем. Тогда формула (13) примет вид

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

10 Подготовка входных и выходных данных

Данные, подаваемые на вход сети и снимаемые с выхода, должны быть правильно подготовлены.

Один из распространенных способов — масштабирование:

x = ( x’ – m)*c,

где

x’ - исходный вектор,

x - масштабированный;

m – вектор усредненных значений совокупности входных данных;

с - масштабный коэффициент.

Масштабирование желательно, чтобы привести данные в допустимый диапазон. Если этого не сделать, то возможно несколько проблем:

1) нейроны входного слоя или окажутся в постоянном насыщении (|m| велик, дисперсия входных данных мала) или будут все время заторможены (|m| мал, дисперсия мала);