- •В. Г. Потемкин
- •Предисловие
- •Введение
- •Используемые обозначения
- •Часть 1. Ппп Neural Network Toolbox
- •1. Система matlab 6
- •1.1. Операционная среда matlab 6
- •Командное окно
- •Окно предыстории
- •Окно запуска
- •Окно текущего каталога
- •Окно рабочей области
- •Справочная подсистема
- •1.3. Демонстрационные примеры ппп nnt
- •2. Модель нейрона и архитектура сети
- •2.1. Модель нейрона
- •2.1.1. Простой нейрон
- •2.1.2. Функция активации
- •2.1.3. Нейрон с векторным входом
- •2.2. Архитектура нейронных сетей
- •2.2.1. Однослойные сети
- •2.2.2. Многослойные сети
- •2.2.3. Сети с прямой передачей сигнала
- •2.3. Создание, инициализация и моделирование сети Формирование архитектуры сети
- •Инициализация сети
- •Моделирование сети
- •3. Обучение нейронных сетей
- •3.1. Процедуры адаптации и обучения
- •Явление переобучения
- •Свойство обобщения
- •3.1.1. Способы адаптации и обучения
- •Адаптация нейронных сетей
- •Xlabel(''), ylabel('Выходыa(I)'),grid
- •Xlabel(''), ylabel('Весавходовw(I)'),grid
- •Xlabel(' Циклы'), ylabel('Ошибка'),grid
- •Xlabel(''), ylabel('Выходыa(I)'),grid
- •Xlabel(''), ylabel('Весавходовw(I)'),grid
- •Xlabel('Циклы'), ylabel('Ошибка'),grid
- •Xlabel(''), ylabel('Выходыa(I)'),grid
- •Xlabel(''), ylabel('Весавходовw(I)'),grid
- •Xlabel('Циклы'), ylabel('Ошибка'),grid
- •Обучение нейронных сетей
- •3.2. Методы обучения
- •3.2.1. Обучение однослойной сети
- •3.2.2. Обучение многослойной сети
- •Метод обратного распространения ошибки
- •Характеристика методов обучения
- •3.3. Алгоритмы обучения
- •3.3.1. Градиентные алгоритмы обучения Алгоритм gd
- •Алгоритм gdm
- •Алгоритм gda
- •Алгоритм Rprop
- •3.3.2. Алгоритмы метода сопряженных градиентов
- •Алгоритм cgf
- •Алгоритм cgp
- •Алгоритм cgb
- •Алгоритм scg
- •3.3.3. Квазиньютоновы алгоритмы Алгоритм bfgs
- •Алгоритм oss
- •Алгоритм lm
- •3.3.4. Алгоритмы одномерного поиска
- •Алгоритм gol
- •Алгоритм bre
- •Алгоритм hyb
- •Алгоритм cha
- •Алгоритм bac
- •3.3.5. Расширение возможностей процедур обучения
- •Переобучение
- •Метод регуляризации
- •Формирование представительной выборки
- •Предварительная обработка и восстановление данных
- •Пример процедуры обучения
- •4. Персептроны
- •4.1. Архитектура персептрона
- •4.2. Модель персептрона
- •Моделирование персептрона
- •Инициализация параметров
- •4.3. Процедуры настройки параметров
- •Правила настройки
- •Процедура адаптации
- •5. Линейные сети
- •5.1. Архитектура линейной сети
- •5.2. Создание модели линейной сети
- •5.3. Обучение линейной сети
- •Процедура настройки
- •Процедура обучения
- •5.4. Применение линейных сетей Задача классификации векторов
- •Фильтрация сигнала
- •Предсказание сигнала
- •Подавление шумов
- •Многомерные цифровые фильтры
- •6. Радиальные базисные сети
- •Модель нейрона и архитектура сети
- •Создание сети
- •Радиальная базисная сеть с нулевой ошибкой
- •Итерационная процедура формирования сети
- •Примеры радиальных базисных сетей
- •6.1. Сети grnn
- •Архитектура сети
- •Синтез сети
- •6.2. Сети pnn
- •Архитектура сети
- •Синтез сети
- •7. Сети кластеризации и классификации данных
- •7.1. Самоорганизующиеся нейронные сети
- •7.1.1. Слой Кохонена
- •Архитектура сети
- •Создание сети
- •Правило обучения слоя Кохонена
- •Правило настройки смещений
- •Обучение сети
- •7.1.2. Карта Кохонена
- •Топология карты
- •Функции для расчета расстояний
- •Архитектура сети
- •Создание сети
- •Обучение сети
- •Одномерная карта Кохонена
- •Двумерная карта Кохонена
- •Архитектура сети
- •Создание сети
- •Обучение сети Правила настройки параметров
- •Процедура обучения
- •8. Рекуррентные сети
- •8.1. Сети Элмана
- •Архитектура
- •Создание сети
- •Обучение сети
- •Проверка сети
- •8.2. Сети Хопфилда
- •Архитектура сети
- •Синтез сети
- •9. Применение нейронных сетей
- •9.1. Аппроксимация и фильтрация сигналов
- •9.1.1. Предсказание стационарного сигнала Постановка задачи
- •Синтез сети
- •Проверка сети
- •9.1.2. Слежение за нестационарным сигналом
- •Инициализация сети
- •Проверка сети
- •9.1.3. Моделирование стационарного фильтра
- •Постановка задачи
- •Синтез сети
- •Проверка сети
- •9.1.4. Моделирование нестационарного фильтра
- •Постановка задачи
- •Инициализация сети
- •Проверка сети
- •9.2. Распознавание образов
- •Постановка задачи
- •Нейронная сеть
- •Архитектура сети
- •Инициализация сети
- •Обучение
- •Обучение в отсутствие шума
- •Обучение в присутствии шума
- •Повторное обучение в отсутствие шума
- •Эффективность функционирования системы
- •9.3. Нейронные сети и системы управления
- •9.3.1. Регулятор с предсказанием
- •9.3.2. Регулятор narma-l2
- •9.3.3. Регулятор на основе эталонной модели
- •Часть2. Операторы, функции и команды
- •10. Вычислительная модель нейронной сети
- •10.1. Описание сети Описание архитектуры
- •Функции инициализации, адаптации и обучения
- •10.2. Описание элементов сети
- •Описание входов
- •Описание слоев
- •Описание выходов
- •Описание целей
- •Описание смещений
- •Описание весов входа
- •Описание весов слоя
- •Матрицы весов и векторы смещений
- •Информационные поля
- •11. Формирование моделей нейронных сетей
- •11.1. Модели сетей
- •11.1.1. Однослойные сети Персептрон
- •Линейные сети
- •11.1.2. Многослойные сети
- •Радиальные базисные сети
- •Самоорганизующиеся сети
- •Сети – классификаторы входных векторов
- •Рекуррентные сети
- •11.2. Функции активации
- •Персептрон
- •Линейные сети
- •Радиальные базисные сети
- •Самоорганизующиеся сети
- •Рекуррентные сети
- •11.3. Синаптические функции
- •Функции взвешивания и расстояний
- •Функции накопления
- •11.4. Функции инициализации
- •11.5. Функции адаптации и обучения Функции адаптации
- •Функции обучения
- •Градиентные алгоритмы обучения
- •Алгоритмы метода сопряженных градиентов
- •Квазиньютоновы алгоритмы обучения
- •11.5.1. Функции оценки качества обучения
- •11.6. Функции настройки параметров
- •11.6.1. Функции одномерного поиска
- •11.7. Масштабирование и восстановление данных
- •11.8. Вспомогательные функции
- •Утилиты вычислений
- •Операции с массивами данных
- •Графические утилиты
- •Информация о сети и ее топологии
- •11.9. Моделирование нейронных сетей и система Simulink Функции моделирования сети
- •11.9.1. Применение системы Simulink
- •Библиотеки блоков для моделирования нейронных сетей
- •Построение моделей нейронных сетей
- •Индексный указатель Команды, функции и операторы ппп Neural Network Toolbox
- •Предметный указатель
- •Литература Книги на английском языке:
- •Книги на русском языке:
- •Оглавление
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– массив ячеек размераNtTS, каждый элемент которогоE{i, ts} – числовой массив размераViQ, гдеNt– количество целевых выходов;
TS – число шагов по времени;
Q – количество реализаций для фиксированного момента времени;
Vi – количество элементовi-го вектора цели.
В формате doublearrayNtчисловых массивовEразмераViQ преобразуются в единственный числовой массив размера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.