- •Фгбоу впо “Воронежский государственный технический университет”
- •Нейронные сети методические указания
- •Составитель канд. Техн. Наук в.А. Медведев
- •Цель работы
- •2.1. Структура и математическая модель искусственного нейрона
- •2.2. Функции активации нейронов
- •2.3. Персептроны
- •2.4. Сеть Хопфилда
- •2.5. Сеть Хэмминга
- •4. Рабочее задание
- •5. Контрольные вопросы
- •1. Цель работы
- •2. Теоретические сведения
- •2.1. Функции пакета Neural Networks Toolbox
- •2.2. Функции активации в пакете Matlab
- •2.3. Функции обучения нейронных сетей
- •2.4. Функции создания нейронных сетей
- •2.5. Функции использования нейронных сетей
- •2.6. Создание однонаправленной сети
- •4. Рабочее задание
- •5. Контрольные вопросы
- •Библиографический список
- •Содержание
- •394026 Воронеж, Московский просп., 14
2.2. Функции активации в пакете Matlab
• hardlim(X) – пороговая функция активации с порогом = 0. Возвращает матрицу, размер которой равен размеру матрицы X, а элементы имеют значения 0 или 1 – в зависимости от знака соответствующего элемента X.
Пример:
>> X = [0.9 –0.6;0.1 0.4;0.2 –0.5;0 0.5];
>> hardlim(X)
ans =
0
1 1
1 0
1
• hardlims(X) – знаковая или сигнатурная функция активации (см. табл. 1); действует так же, как функция hardlim(X), но возвращает значения –1 или +1.
• logsig(X) – сигмоидальная логистическая функция. Возвращает матрицу, элементы которой являются значениями логистической функции от аргументов – элементов матрицы X.
• purelin(X) – возвращает матрицу значений линейной функции активации.
• dhardlim(X,Y) – производная пороговой функции активации. Аргументами являются матрица входов X и матрица выходов Y; матрицы имеют одинаковый размер. Возвращается матрица того же размера.
• dhardlms(X,Y) – производная знаковой функции активации. Возвращается матрица с нулевыми элементами.
• dlogsig(X,Y) – производная сигмоидальной логистической функции. Возвращается матрица с элементами yi,j(1–yi,j).
Примеры:
>> X=[0.1; 0.8; –0.7];
>> Y=logsig(X)
Y =
0.5250
0.6900
0.3318
>> dY_dX=dlogsig(X,Y)
dY_dX =
0.2494
0.2139
0.2217
2.3. Функции обучения нейронных сетей
Функции обучения позволяют устанавливать алгоритм и параметры обучения нейронных сетей заданной конфигурации по желанию пользователя. В группу входят следующие функции.
• [net, tr] = trainbfg(net,Pd,Tl,Ai,Q,TS,VV,TV) – функция обучения, реализующая разновидность алгоритма обратного распространения ошибки (BFGS). Аргументы функции:
net – имя обучаемой НС;
Pd – наименование массива задержанных входов обучающей выборки;
Tl – массив целевых значений выходов;
Ai – матрица начальных условий входных задержек;
Q – количество обучающих пар в одном цикле обучения (размер «пачки»);
TS – вектор временных интервалов;
VV – пустой массив ([ ]) или массив проверочных данных;
TV – пустой массив ([ ]) или массив тестовых данных.
Функция возвращает обученную нейронную сеть net и набор записей tr для каждого цикла обучения (tr.epoch – номер цикла, tr.perf – текущая ошибка обучения, tr.vperf – текущая ошибка для проверочной выборки, tr.tperf – текущая ошибка для тестовой выборки).
Процесс обучения происходит в соответствии со значениями следующих параметров (в скобках приведены значения по умолчанию):
• net.trainParam.epochs (100) – максимальное количество циклов обучения;
• net.trainParam.show (25) – количество циклов для показа промежуточных результатов;
• net.trainParam.goal (0) – целевая ошибка обучения;
• net.trainParam.time (inf) – максимальное время обучения в секундах;
• net.trainParam.min_grad (1e-6) – целевое значение градиента;
• net.trainParam.max_fail (5) – максимально допустимая кратность превышения ошибки проверочной выборки по сравнению с достигнутым минимальным значением;
• net.trainParam.searchFcn ('srchcha') – имя используемого одномерного алгоритма оптимизации.
Структуры и размеры массивов:
• Pd – массив ячеек размера NoNiTS, каждый элемент которого P{i,j,ts) есть матрица DijQ;
• Тl – массив ячеек размера NlTS, каждый элемент которого P{i,ts} есть матрица ViQ;
• Ai – массив ячеек размера NlLD, каждый элемент которого Ai{i,k} есть матрица SiQ.
Здесь
Ni = net.numInputs (количество входов сети);
Nl = net.numLayers (количество ее слоев);
LD = net. numLayerDelays (количество слоев задержки);
Ri = net inputs{i}.size (размер i-го входа);
Si = net.layers{i}.size (размер i-го слоя);
Vi = net targets{i}.size (размер целевого вектора);
Dij = Ri * length(net.inputWeights{i,j}.delays) (вспомогательная вычисляемая величина).
Если массив VV не пустой, то он должен иметь структуру, определяемую следующими компонентами:
• VV.PD – задержанные значения входов проверочной выборки;
• VV.Tl – целевые значения;
• VV.Ai – начальные входные условия;
• VV.Q – количество проверочных пар в одном цикле обучения;
• VV.TS – временные интервалы проверочной выборки.
Эти параметры используются для задания останова процесса обучения в случаях, когда ошибка для проверочной выборки не уменьшается или начинает возрастать.
Структуру, аналогичную структуре массива VV, имеет массив TV. Рассматриваемая функция, заданная в форме trainbfg(code), возвращает для значений аргумента 'pnames' и 'pdefaults', соответственно, имена параметров обучения и их значения по умолчанию.
Для использования функции в НС, определяемых пользователем, необходимо:
1. Установить параметр net.trainFcn = 'trainbfg' (при этом параметры алгоритма будут заданы по умолчанию).
2. Установить требуемые параметры (net.trainParam).
Процесс обучения останавливается в случае выполнения любого из следующих условий:
• превышено заданное количество циклов обучения (net.trainParam.epochs);
• превышено заданное время обучения (net.trainParam.time);
• ошибка обучения стала меньше заданной (net.trainParam.goal);
• градиент стал меньше заданного (net.trainParam.min_grad);
• возрастание ошибки проверочной выборки по сравнению с достигнутым минимальным превысило заданное значение (net.trainParam.max_fail).
Пример:
>> P = [0 1 2 3 4 5]; % Задание входного вектора
>> T = [0 0 0 1 1 1]; % Задание целевого вектора
>> % Создание и тестирование сети
>> net = newff([0 5],[2 1],{'tansig','logsig'},'trainbfg');
>> a = sim(net,P)
a =
0.0586 0.0772 0.0822 0.0870 0.1326 0.5901
>> % Обучение с новыми параметрами и повторное тестирование >> net.trainParam.searchFcn = 'srchcha';
>> net.trainParam.epochs = 50;
>> net.trainParam.show = 10;
>> net.trainParam.goal = 0.1;
>> net = train(net,P,T);
TRAINCGF-srchcha, Epoch 0/50, MSE 0.295008/0.1, Gradient 0.623241/le–006
TRAINCGF-srchcha, Epoch 1/50, MSE 0.00824365/0.1, Gradient 0.0173555/le-006
TRAINCGF, Performance goal met.
>> a = sim(net,P)
a =
0.0706 0.1024 0.1474 0.9009 0.9647 0.9655
В данном примере созданная многослойная НС, обученная с установками по умолчанию, вначале показала плохой результат отображения обучающей выборки, но после изменения параметров и повторного обучения сети результат стал вполне приемлемым.