Процесс обучения нейронных сетей связан с такой настройкой ее весов и смещений, чтобы минимизировать некоторый функционал, зависящий от ошибок сети, т. е. разности между желаемым и реальным сигналами на ее выходе. В качестве таких функционалов
в ППП NNT используются:
сумма квадратов ошибок
(11.6)
средняя квадратичная ошибка
; (11.7)
комбинированная ошибка
; (11.8)
средняя абсолютная ошибка
. (11.9)
Для вычисления этих функционалов качества и предназначены соответствующие функции пакета, рассматриваемые ниже. Все эти функции и их производные имеют одинаковый формат вызова
perf = <имя_функции>(E,X,pp) perf = <имя_функции>(E,net,pp) | dPerf_dE = d<имя_функции>('e',E,X,perf,pp) dPerf_dX = d<имя_функции>('x',E,X,perf,pp) |
Входные аргументы:
E – матрица или массив ячеек вектора ошибки;
X – вектор весов и смещений;
pp – параметр функционала;
net – нейронная сеть в виде объекта network object;
'e', 'x' – аргументы операции дифференцирования;
perf – критерий качества обучения.
Выходные аргументы:
perf – критерий качества обучения;
|
|
dPerf_dE – производная критерия качества по вектору ошибки;
dPerf_dX – производная критерия качества по вектору параметров.
Входной аргумент E может иметь 2 формата: cell array и double array.
В формате cell array массив E имеет следующие размеры:
E – массив ячеек размера Nt ´TS, каждый элемент которого E{i, ts} – числовой массив размера Vi ´Q, где Nt – количество целевых выходов;
TS – число шагов по времени;
Q – количество реализаций для фиксированного момента времени;
Vi – количество элементов i- го вектора цели.
В формате double array Nt числовых массивов E размера Vi ´Q преобразуются в единственный числовой массив размера ´Q.
Кроме того, все функции возвращают информацию о параметрах функции критерия качества, если используется следующий формат вызова:
info = <имя_функции>(code).
В зависимости от значения аргумента code возвращается следующая информация:
'name' – полное название функции критерия качества;
'deriv' – имя производной функции критерия качества;
'pnames' – имена параметров функции критерия качества;
'pdefaults' – значения параметров функции критерия качества, принимаемые по умолчанию.
sSE, DSSE | Критерий суммы квадратов ошибок |
Синтаксис:
perf = sse(E,X,pp) perf = sse(E,net,pp) info = sse(code) | dPerf_dE = dsse('e',E,X,perf,pp) dPerf_dX = dsse('x',E,X,perf,pp) |
Описание:
Функции perf = sse(E, X, pp) и perf = sse(E, net, pp) вычисляют критерий качества
обучения в виде сумм квадратов ошибок по формуле (11.6).
Функции dPerf_dE = dsse('e', E, X, perf, pp) и dPerf_dX = dsse('x', E, X, perf, pp) вычисляют градиенты функционала качества по векторам ошибки, а также весов и смещений.
Применение функции:
Для того чтобы использовать функцию критерия качества sse, необходимо установить свойство net.performFcn равным 'sse'. Это автоматически установит значения параметра net.performParam равными пустому массиву [ ], поскольку данная функция не имеет таких параметров.
|
|
Примеры:
Получим информацию о данной функции и ее производной:
sse('name'), sse('deriv'), sse('pnames')
ans = Sum squared error
ans = dsse
ans = {}
Сформируем двухслойную нейронную сеть прямой передачи с одноэлементным входом, изменяющимся в диапазоне [–10 10], которая имеет 4 скрытых нейрона с функцией активации tansig и 1 нейрон на выходе с функцией активации purelin:
net = newff([–10 10],[4 1],{'tansig','purelin'});
Зададим векторы входа и целей:
P = [–10 –5 0 5 10];
T = [ 0 0 1 1 1];
Промоделируем исходную нейронную сеть и вычислим ее ошибку:
Y = sim(net, P);
E = T–Y
E = –0.4714 –1.4040 –0.2399 0.6419 0.0049
Вычислим функционал качества sse:
net.performFcn = 'sse';
perf = sse(E)
perf = 2.6629
Теперь вычислим градиенты функционала качества.
Градиент функционала по вектору ошибки вычисляется следующим образом:
dPerf_dE = dsse('e',E,X)
dPerf_dE = –0.9427 –2.8079 –0.4798 1.2837 0.0097
Для вычислений градиента функционала по вектору настраиваемых параметров сформируем этот вектор, который объединяет веса и смещения сети:
X = [net.IW{1}; net.b{1}]'
X = 0.5600 –0.5600 0.5600 –0.5600 –5.6000 1.8667 1.8667 –5.6000
Градиент функционала по вектору параметров
dPerf_dX = dsse('x',E,X)
dPerf_dX= 0 0 0 0 0 0
Этот градиент равен нулевому вектору, поскольку функционал качества не зависит явным образом от параметров сети.
mSe, DMSE | Критерий средней квадратичной ошибки |
Синтаксис:
perf = mse(E,X,pp) perf = mse(E,net,pp) info = mse(code) | dPerf_dE = dmse('e',E,X,perf,pp) dPerf_dX = dmse('x',E,X,perf,pp) |
Описание:
Функции perf = mse(E, X, pp) и perf = mse(E, net, pp) вычисляют критерий качества обучения в виде средней суммы квадратов ошибок по формуле (11.7).
Функции dPerf_dE = dmse('e', E, X, perf, pp) и dPerf_dX = dmse('x', E, X, perf, pp) вычисляют градиенты функционала качества по векторам ошибки, а также весов и смещений.
Применение функции:
Функция критерия качества mse используется при создании сетей с помощью методов newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми пользователем.
Для того чтобы использовать функцию критерия качества mse, необходимо установить свойство net.performFcn равным 'mse'. Это автоматически установит значения параметра net.performParam равными пустому массиву [ ], поскольку данная функция не имеет таких параметров.
Пример:
Получим информацию о данной функции и ее производной:
mse('name'), mse('deriv'), mse('pnames')
ans = Mean squared error
ans = dmse
ans = {}
Сформируем двухслойную нейронную сеть прямой передачи с одноэлементным входом, изменяющимся в диапазоне [–10 10], которая имеет 4 скрытых нейрона с функцией активации tansig и 1 нейрон на выходе с функцией активации purelin:
net = newff([–10 10],[4 1],{'tansig','purelin'});
Зададим векторы входа и целей:
P = [–10 –5 0 5 10];
T = [ 0 0 1 1 1];
Промоделируем исходную нейронную сеть и вычислим ее ошибку:
Y = sim(net, P);
E = T–Y
E = –0.4714 –1.4040 –0.2399 0.6419 0.0049
Вычислим функционал качества mse:
net.performFcn = 'mse';
perf = mse(E)
perf = 0.5326
Теперь вычислим градиенты функционала качества.
Градиент функционала по вектору ошибки вычисляется следующим образом:
dPerf_dE = dmse('e',E,X)
dPerf_dE = –0.1885 –0.5616 –0.0960 0.2567 0.0019
Для вычислений градиента функционала по вектору настраиваемых параметров сформируем этот вектор, который объединяет веса и смещения сети:
X = [net.IW{1}; net.b{1}]'
X = 0.5600 –0.5600 0.5600 –0.5600 –5.6000 1.8667 1.8667 –5.6000
Градиент функционала по вектору параметров
dPerf_dX = dmse('x',E,X)
dPerf_dX= 0 0 0 0 0 0
Этот градиент равен нулевому вектору, поскольку функционал качества не зависит явным образом от параметров сети.
Сопутствующие функции: msereg, mae.
MSEREG, DMSEREG | Комбинированный критерий качества |
Синтаксис:
perf = mse(E,X,pp) perf = mse(E,net,pp) info = mse(code) | dPerf_dE = dmsereg('e',E,X,perf,PP) dPerf_dX = dmsereg('x',E,X,perf,PP) |
Описание:
Функции perf = msereg(E, X, pp) и perf = msereg(E, net, pp) вычисляют комбинированный критерий качества обучения по формуле (11.8).
Функции dPerf_dE = dmsereg('e', E, X, perf, pp) и dPerf_dX = dmsereg('x', E, X, perf, pp) вычисляют градиенты функционала качества по векторам ошибки, а также весов и смещений.
|
|
Применение функции:
Функция критерия качества msereg используется при создании сетей с помощью методов newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми пользователем.
Для того чтобы использовать функцию критерия качества msereg, необходимо установить свойство net.performFcn равным 'msereg'. Это автоматически установит значения параметра net.performParam равными значениям по умолчанию.
Пример:
Получим информацию о данной функции и ее производной:
msereg('name'), msereg('deriv'), msereg('pnames'), msereg('pdefaults')
ans = Mean squared error with regularization
ans = dmsereg
ans = 'ratio'
ans = ratio: 0.9000
Это единственный функционал качества, который состоит из двух слагаемых: среднеквадратичной ошибки с весом ratio и штрафной функции, оцениваемой суммой квадратов весов и смещений с весом 1–ratio.
Сформируем двухслойную нейронную сеть прямой передачи с одноэлементным входом, изменяющимся в диапазоне [–10 10], которая имеет 4 скрытых нейрона с функцией активации tansig и 1 нейрон на выходе с функцией активации purelin:
net = newff([–10 10],[4 1],{'tansig','purelin'});
Зададим векторы входа и целей:
P = [–10 –5 0 5 10];
T = [ 0 0 1 1 1];
Промоделируем исходную нейронную сеть и вычислим ее ошибку:
Y = sim(net, P);
E = T–Y
E = –0.4714 –1.4040 –0.2399 0.6419 0.0049
Вычислим функционал качества msereg:
net.performFcn = 'msereg';
net.performParam.ratio = 0.9;
perf = msereg(E,net)
perf = 0.5326
Теперь вычислим градиенты функционала качества.
Градиент функционала по вектору ошибки вычисляется следующим образом:
dPerf_dE = dmsereg('e',E,X)
dPerf_dE = –0.1885 –0.5616 –0.0960 0.2567 0.0019
Для вычислений градиента функционала по вектору настраиваемых параметров сформируем этот вектор, который объединяет веса и смещения сети:
X = [net.IW{1}; net.b{1}]'
X = 0.5600 –0.5600 0.5600 –0.5600 –5.6000 1.8667 1.8667 –5.6000
Градиент функционала по вектору параметров
dPerf_dX = dmsereg('x',E,X,perf,net.performParam)
dPerf_dX = –0.0140 0.0140 –0.0140 0.0140 0.1400 –0.0467 –0.0467 0.1400
Этот градиент не равен нулевому вектору, поскольку функционал качества зависит явным образом от параметров сети.
Сопутствующие функции: mse, mae.
|
|
mae,DMAE | Критерий средней абсолютной ошибки |
Синтаксис:
perf = mae(E,X,pp) perf = mae(E,net,pp) info = mae(code) | dPerf_dE = dmae('e',E,X,perf,pp) dPerf_dX = dmae('x',E,X,perf,pp) |
Описание:
Функции perf = mae(E, X, pp) и perf = mae(E, net, pp) вычисляют критерий качества обучения в виде средней суммы абсолютных ошибок по формуле (11.9).
Функции dPerf_dE = dmae('e', E, X, perf, pp) и dPerf_dX = dmae('x', E, X, perf, pp) вычисляют градиенты функционала качества по векторам ошибки, а также весов и смещений.
Применение функции:
Функция критерия качества mae используется при создании сетей с помощью методов newff, newcf, newelm, а также при формировании сетей с атрибутами, определяемыми пользователем.
Для того чтобы использовать функцию критерия качества mae, необходимо установить свойство net.performFcn равным 'mae'. Это автоматически установит значения параметра net.performParam равными пустому массиву [ ], поскольку данная функция не имеет таких параметров.
Пример:
Получим информацию о данной функции и ее производной:
mae('name'), mae('deriv'), mae('pnames')
ans = Mean absolute error
ans = dmae
ans = {}
Сформируем двухслойную нейронную сеть прямой передачи с одноэлементным входом, изменяющимся в диапазоне [–10 10], которая имеет 4 скрытых нейрона с функцией активации tansig и 1 нейрон на выходе с функцией активации purelin:
net = newff([–10 10],[4 1],{'tansig','purelin'});
Зададим векторы входа и целей:
P = [–10 –5 0 5 10];
T = [ 0 0 1 1 1];
Промоделируем исходную нейронную сеть и вычислим ее ошибку:
Y = sim(net, P);
E = T–Y
E = –0.4714 –1.4040 –0.2399 0.6419 0.0049
Вычислим функционал качества mae:
net.performFcn = 'mae';
perf = mae(E)
perf = 0.5524
Теперь вычислим градиенты функционала качества.
Градиент функционала по вектору ошибки вычисляется следующим образом:
dPerf_dE = dmae('e',{E},X); [dPerf_dE{:}]
ans = –1 –1 –1 1 1
Для вычислений градиента функционала по вектору настраиваемых параметров сформируем вектор, который объединяет веса и смещения сети:
X = [net.IW{1}; net.b{1}]'
X = 0.5600 –0.5600 0.5600 –0.5600 –5.6000 1.8667 1.8667 –5.6000
Градиент функционала по вектору параметров
dPerf_dX = dmae('x',{E},{X})
dPerf_dX = 0
Сопутствующие функции: mse, msereg.