Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Скачиваний:
857
Добавлен:
07.03.2016
Размер:
15.55 Mб
Скачать

11.5.1. Функции оценки качества обучения

Процесс обучения нейронных сетей связан с такой настройкой ее весов и смещений, чтобы минимизировать некоторый функционал, зависящий от ошибок сети, т. е. разности между желаемым и реальным сигналами на ее выходе. В качестве таких функционалов в ППП 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 – нейронная сеть в виде объекта networkobject;

'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-го вектора цели.

В формате doublearrayNtчисловых массивов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.