- •В. Г. Потемкин
- •Предисловие
- •Введение
- •Используемые обозначения
- •Часть 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
- •Предметный указатель
- •Литература Книги на английском языке:
- •Книги на русском языке:
- •Оглавление
Функции обучения
Метод обучения.В качестве метода обучения сетей в ППП NNT версии 4 применяется функцияtrain, которая позволяет установить процедуры обучения сети и настройки ее параметров, присваивая свойствам net.trainFcnиnet.trainParam требуемые значения.
train |
Обучение нейронной сети |
Синтаксис:
[net, TR] = train(net,P,T,Pi,Ai)
[net, TR] = train(net,P,T,Pi,Ai,VV,TV)
Описание:
Функция [net, TR] = train(net, P, T, Pi, Ai) является методом для объектов класса network object, который реализует режим обучения нейронной сети. Эта функция характеризуется следующими входными и выходными аргументами.
Входные аргументы:
net – имя нейронной сети;
P– массив входов;
T– вектор целей, по умолчанию нулевой вектор;
Pi –начальные условия на линиях задержки входов, по умолчанию нулевой вектор;
Ai –начальные условия на линиях задержки слоев, по умолчанию нулевой вектор.
Выходные аргументы:
net– структура объекта network object после обучения;
TR – характеристики процедуры обучения:
TR.timesteps– длина последней выборки;
TR.perf – значения функции качества на последнем цикле обучения.
Заметим, что входной аргумент Tиспользуется только при наличии целевых выходов. АргументыPiиPfиспользуются только в случае динамических сетей, имеющих линии задержки на входах или в слоях.
Входные аргументы P и T могут иметь 2 формата: cell array и double array. Формат cell array наиболее прост для понимания и соответствует последовательному представлению данных.
Последовательное представление данных. Каждую строку массива ячеек можно рассматривать как временную последовательность, и тогда описание многомерной сети может быть представлено следующим образом:
P – массив ячеек размера NiTS, каждый элемент которого P{i, ts} – числовой массив размера RiQ;
T – массив ячеек размера NtTS, каждый элемент которогоT{i, ts} – числовой массив размера ViQ;
Pi – массив ячеек размера NiID, каждый элемент которого Pi{i, k} – числовой массив размера RiQ;
Ai – массив ячеек размера NlLD, каждый элемент которого Ai{i, k} – числовой массив размера SiQ;
Y – массив ячеек размера NoTS, каждый элемент которого Y{i, ts} – числовой массив размера UiQ;
Pf – массив ячеек размера NiID, каждый элемент которого Pf{i, k} – числовой массив размера RiQ;
Af – массив ячеек размера NlLD, каждый элемент которого Af{i, k} – числовой массив размера SiQ.
Параметры описания массивов ячеек и их связь с параметрами сети представлены в следующей таблице.
Параметр описания |
Параметр сети |
Назначение |
Ni |
net.numInputs |
Количество векторов входа |
Nl |
net.numLayers |
Количество слоев |
No |
net.numOutputs |
Количество выходов |
Nt |
net.numTargets |
Количество целевых выходов |
ID |
net.numInputDelays |
Максимальное значение задержки на входе |
TS |
|
Число шагов по времени |
Q |
|
Количество реализаций для фиксированного момента времени |
LD |
net.numLayerDelays |
Максимальные значения задержек для слоев |
Ri |
net.inputs{i}.size |
Количество элементов i-го вектора входа |
Si |
net.layers{i}.size |
Количество нейронов i-го слоя |
Vi |
net.targets{i}.size |
Количество элементов i-го вектора цели |
Ui |
net.outputs{i}.size |
Количество элементов i-го вектора выхода |
Столбцы массивов начальных условий Pi, Pf, Ai, Af упорядочены в соответствии со следующими условиями:
Pi{i, k}– значение начального условия для линии задержкиi-го входа в момент времениts = k – ID;
Pf{i, k} – значение начального условия для линии задержкиi-го входа в момент времениts = TS + k – ID;
Ai{i, k}– значение начального условия для линии задержкиi-го слоя в момент времениts = k – LD;
Af{i, k}– значение начального условия для линии задержкиi-го слоя в момент времениts = TS + k – LD.
Групповое представлениеданных можно использовать только при обучении статических сетей (TS = 1). При этом следует помнить, что при переходе от формата последовательного представления данныхcellarrayк формату группового представленияdoublearrayмассив ячеек, содержащий, например,Niчисловых массивов размераRiQ,преобразуется в единственный числовой массив размераQ.
Следующая таблица поясняет связь этих форм представления.
-
Формат
Аргумент
Cell array
Double array
Size(P)
Size(P{I,1})
Size(P)
P
Ni1
RiQ
T
Nt1
ViQ
Pi
NiID
RiQ
Ai
NlLD
SiQ
Функция [net, TR] = train(net, P, T, Pi, Ai, VV, TV)позволяет использовать в процессе обучения контрольные и тестовые подмножества для оценки представительности используемых обучающих выборок. Эти подмножества описываются массивами структур со следующими полями:
VV.P, TV.P – контрольное и тестовое подмножества векторов входов;
VV.T, TV.T– контрольное и тестовое подмножества векторов целей;
VV.Pi, TV.Pi– начальные значения задержек на входе сети для контрольного и тестового подмножеств, по умолчанию нулевые;
VV.Ai, TV.Ai– начальные значения задержек на слоях для контрольного и тестового подмножеств, по умолчанию нулевые.
Алгоритм:
Метод train вызывает функцию обучения, заданную свойством net.trainFcn со значениями параметров обучения, заданными свойством net.trainParam. Обычно цикл обучения определяется как предъявление сети всех векторов входа. Затем выполняется настройка параметров сети. Обучение продолжается до тех пор, пока не будет выполнено заданное число циклов обучения, не будет достигнуто допустимое значение критерия качества обучения или выполнено любое другое условие остановки для выбранной функции обучения.
Сопутствующие функции: sim, init, adapt.
Представление входных данных.Для задания способа представления входных данных в ППП NNT версии 4 включены функцииtrainb,trainc,trainrиtrains. Эти функции должны быть заданы как значения свойстваnet.trainFcn. Для каждой из этих функций требуетсязадать желаемую функцию настройки параметров, присваивая соответствующие значения свойствам net.inputWeights{i, j}.learnFcn, net.layerWeights{i, j}.learnFcn, net.biases{i}.learnFcn.
trainB |
Групповое обучение |
1traiСинтаксис:
[net,TR,Ac,El] = trainb(net,Pd,Tl,Ai,Q,TS,VV,TV)
info = trainb(code)
Описание:
Функция trainb не вызывается непосредственно. К ней обращается метод train, когда свойствоnet.trainFcnсоответствует значению'trainb'. Функция trainb настраивает веса и смещения при каждом предъявлении сети входной последовательности.
Функция [net, TR, Ac, El] = trainb(net Pd, Tl, Ai, Q, TS, VV, TV) имеет следующие входные и выходные аргументы.
Входные аргументы:
net– исходная нейронная сеть;
Pd– вектор максимальных задержек по слоям;
Tl– вектор целей для слоя;
Ai– начальные условия на линиях задержки;
Q– количество реализаций для фиксированного момента времени;
TS– число шагов по времени;
VV – структура, описывающая контрольное множество;
TV – структура, описывающая тестовое множество.
Выходные аргументы:
net– структура объекта network object после адаптации;
TR – характеристики процедуры обучения:
TR.epoch – вектор, определяющий циклы обучения;
TR.perf – значения функции качества по циклам обучения;
TR.vperf – значения контрольной функции по циклам обучения;
TR.tperf – значения тестовой функции по циклам обучения;
Ac– массив выходов слоя для последнего цикла;
El – массив ошибок слоя для последнего цикла.
Входные и выходные массивы характеризуются следующими размерами:
Pd – массив ячеек размера IDNiTS, каждый элемент которого Pd{i, j, ts} – числовой массив размераZijQ;
Tl – массив ячеек размера NlTS, каждый элемент которогоTl{i, ts} – числовой массив размера ViQ, возможно пустой [];
Ai – массив ячеек размера NlLD, каждый элемент которого Ai{i, k} – числовой массив размера SiQ;
Ac – массив ячеек размера Nl(LD+TS), каждый элемент которого Ac{i, k} – числовой массив размера SiQ;
El – массив ячеек размера NlTS, каждый элемент которого El{i, k} – числовой массив размера ViQ, возможно пустой [].
Параметры описания массивов ячеек и их связь с параметрами сети представлены в следующей таблице.
-
Параметр описания
Параметр сети
Назначение
Ni
net.numInputs
Количество векторов входа
Nl
net.numLayers
Количество слоев
Nt
net.numTargets
Количество целевых выходов
ID
net.numInputDelays
Максимальное значение задержки на входе
LD
net.numLayerDelays
Максимальные значения задержек для слоев
Ri
net.inputs{i}.size
Количество элементов i-го вектора входа
Si
net.layers{i}.size
Количество нейронов i-го слоя
Vi
net.targets{i}.size
Количество элементов i-го вектора цели
TS
Число шагов по времени
Q
Количество реализаций для фиксированного момента времени
Zij
Произведение длины вектора входа слоя i на максимальное значение задержки от слоя i к слою j:
Ri * length(net.inputWeights{i, j}.delays)
Если входные аргументы VV или TV не пустые ([ ]), то они должны быть массивами структур:
VV.PD, TV.PD – контрольное и тестовое подмножества векторов входов после линии задержки, по умолчанию нулевые;
VV.Tl, TV.Tl – контрольное и тестовое подмножества векторов целей слоя;
VV.Ai, TV.Ai – контрольное и тестовое подмножества начальных условий на входе;
VV.Q, TV.Q – число выборок контрольного и тестового подмножеств;
VV.TS, TV.TS – длина выборок контрольного и тестового подмножеств.
Контрольные и тестовые подмножества используются для предотвращения явления переобучения.
Процедура обучения прекращается при достижении следующих значений параметров функции trainb:
Параметр |
Назначение |
net.trainParam.epochs |
Максимальное число циклов обучения, по умолчанию 100 |
net.trainParam.goal |
Предельное значение показателя качества обучения, по умолчанию 0 |
net.trainParam.max_fail |
Максимально допустимый уровень превышения ошибки контрольного подмножества по сравнению с обучающим, по умолчанию 5 |
net.trainParam.show |
Интервал вывода данных, по умолчанию 25 циклов, отмена вывода – NaN |
net.trainParam.time |
Максимальное время обучения в секундах, по умолчанию Inf |
Функция info = trainb(code)возвращает информацию о параметрах группового обучения, соответствующую следующим значениям аргумента code:
'pnames'– имена параметров группового обучения;
'pdefaults'– значения параметров группового обучения, принимаемые по умолчанию.
Применение функции:
Чтобы сформировать нейронную сеть, используя функцию обучения trainb, следует:
установить свойство net.trainFcn равным 'trainb'. Это автоматически установит свойство net.trainParam равным значению по умолчанию;
установить значения свойств net.inputWeights{i, j}.learnFcn, net.layerWeights{i, j}.learnFcn, net.biases{i}.learnFcn соответствующими выбранным функциям настройки.
Для того чтобы фактически выполнить групповое обучение сети, необходимо:
установить желаемые значения параметров настройки весов и смещений;
установить желаемые значения свойств net.trainParam;
вызвать функцию train.
Алгоритм:
Элементы матриц весов и векторов смещения изменяются в соответствии с заданной функцией настройки на каждом цикле обучения.
Обучение прекращается, когда выполняется одно из следующих условий:
достигнуто максимальное число циклов обучения;
значение функции качества стало меньше предельного;
превышено максимальное время, отпущенное на обучение;
ошибка контрольного подмножества превысила ошибку обучающего более чем в max_fail раз.
Пример:
Сформировать динaмическую линейную нейронную сеть с одним выходом, линией задержки на входе [0 1], диапазоном изменения элементов входа [–1 1] и адаптивно обучить ее за 200 циклов с параметром скорости обучения 0.01.
Формирование сети:
net = newlin([–1 1],1,[0 1],0.01);
Формирование векторов входа и цели:
P1 = {0 –1 1 1 0 –1 1 0 0 1};
T1 = {0 –1 0 2 1 –1 0 1 0 1};
Групповое обучение:
net.trainFcn='trainb';
net.trainParam.epochs = 200;
[net,TR]=train(net,P1,T1); % Рис.11.42
На рис. 11.42 представлена зависимость показателя качества в течение 200 циклов обучения.
Рис. 11.42
Выполним моделирование сети при заданном входе:
Y = sim(net,P1); Y = [Y{:}]
Y = 0.0002 –0.9994 0.0003 1.9993 0.9997
–0.9994 0.0003 0.9997 0.0002 0.9998
Результат моделирования близок к вектору целей. При этом среднеквадратичная ошибка составляет
E = mse(Y–[T1{:}])
E = 1.5137e–007
Сопутствующие функции: NEWP, NEWLIN, TRAIN.
trainc |
Обучение нейронной сети cциклическим представлением входа |
[net,TR,Ac,El] = trainc(net,Pd,Tl,Ai,Q,TS,VV,TV)
info = trainc(code)
Описание:
Функция trainc не вызывается непосредственно. К ней обращается метод train, когда свойство net.trainFcn соответствует значению 'trainc'. Функция trainc настраивает веса и смещения при каждом предъявлении сети входной последовательности в циклическом порядке.
Функция [net, TR, Ac, El] = trainc(net Pd, Tl, Ai, Q, TS, VV, TV) имеет следующие входные и выходные аргументы.
Входные аргументы:
net– исходная нейронная сеть;
Pd– вектор максимальных задержек по слоям;
Tl– вектор целей для слоя;
Ai– начальные условия на линиях задержки;
Q– количество реализаций для фиксированного момента времени;
TS– число шагов по времени;
VV – структура, описывающая контрольное множество;
TV – структура, описывающая тестовое множество.
Выходные аргументы:
net– структура объекта network object после адаптации;
TR – характеристики процедуры обучения:
TR.epoch – вектор, определяющий циклы обучения;
TR.perf – значения функции качества по циклам обучения;
Ac– массив выходов слоя для последнего цикла;
El – массив ошибок слоя для последнего цикла.
Входные и выходные массивы характеризуются следующими размерами:
Pd – массив ячеек размера IDNiTS, каждый элемент которого Pd{i, j, ts} – числовой массив размераZijQ;
Tl – массив ячеек размера NlTS, каждый элемент которогоTl{i, ts} – числовой массив размера ViQ, возможно пустой [];
Ai – массив ячеек размера NlLD, каждый элемент которого Ai{i, k} – числовой массив размера SiQ;
Ac – массив ячеек размера Nl(LD+TS), каждый элемент которого Ac{i, k} – числовой массив размера SiQ;
El – массив ячеек размера NlTS, каждый элемент которого El{i, k} – числовой массив размера ViQ, возможно пустой [].
Параметры описания массивов ячеек и их связь с параметрами сети представлены в следующей таблице.
Параметр описания |
Параметр сети |
Назначение |
Ni |
net.numInputs |
Количество векторов входа |
Nl |
net.numLayers |
Количество слоев |
Nt |
net.numTargets |
Количество целевых выходов |
ID |
net.numInputDelays |
Максимальное значение задержки на входе |
LD |
net.numLayerDelays |
Максимальные значения задержек для слоев |
Ri |
net.inputs{i}.size |
Количество элементов i-го вектора входа |
Si |
net.layers{i}.size |
Количество нейронов i-го слоя |
Vi |
net.targets{i}.size |
Количество элементов i-го вектора цели |
TS |
|
Число шагов по времени |
Q |
|
Количество реализаций для фиксированного момента времени |
Zij |
|
Произведение длины вектора входа слоя i на максимальное значение задержки от слоя i к слою j: Ri * length(net.inputWeights{i, j}.delays) |
Функция traincне выполняет проверки обучающей последовательности на представительность, поэтому входные аргументы VV и TV не используются.
Процедура обучения прекращается при достижении следующих значений параметров функции trainc:
Параметр |
Назначение |
net.trainParam.epochs |
Максимальное число циклов обучения, по умолчанию 100 |
net.trainParam.goal |
Предельное значение показателя качества обучения, по умолчанию 0 |
net.trainParam.show |
Интервал вывода данных, по умолчанию 25 циклов, отмена вывода –NaN |
net.trainParam.time |
Максимальное время обучения в секундах, по умолчанию Inf |
Функция info = trainc(code)возвращает информацию о параметрах обучения, соответствующую следующим значениям аргумента code:
'pnames'– имена параметров процедуры обучения с циклическим представлением входа;
'pdefaults'– значения параметров процедуры обучения с циклическим представлением входа, принимаемые по умолчанию.
Применение функции:
Чтобы сформировать нейронную сеть, используя функцию обучения trainc, следует:
установить свойство net.trainFcn равным 'trainc'. Это автоматически установит свойство net.trainParam равным значению по умолчанию;
установить значения свойств net.inputWeights{i, j}.learnFcn, net.layerWeights{i, j}.learnFcn, net.biases{i}.learnFcn соответствующими выбранным функциям настройки.
Для того чтобы фактически выполнить обучение сети, необходимо:
установить желаемые значения параметров настройки весов и смещений;
установить желаемые значения свойств net.trainParam;
вызвать функцию train.
Алгоритм:
Элементы матриц весов и векторов смещения изменяются в соответствии с заданной функцией настройки на каждом цикле обучения.
Обучение прекращается, когда выполняется одно из следующих условий:
достигнуто максимальное число циклов обучения;
значение функции качества стало меньше предельного;
превышено максимальное время, отпущенное на обучение.
Пример:
Сформировать нейронную сеть на основе персептрона с одним выходом и вектором входа из двух элементов, принимающих значения в диапазоне [–2 2].
Формирование сети:
net = newp([–2 2; –2 2],1);
Формирование векторов входа и цели:
P = [ 2 1 –2 –1;
2 –2 2 1];
T = [ 0 1 0 1];
Обучение с циклическим представлением входа:
net.trainFcn='trainc';
[net,TR]=train(net,P,T); % Рис.11.43
На рис. 11.43 представлена зависимость показателя качества обучения от количества циклов обучения. Нетрудно убедиться, что абсолютная точность достигается на третьем цикле обучения.
Рис. 11.43
Выполним моделирование сети при заданном входе:
Y = sim(net, P)
Y = 0 1 0 1
Полученный результат полностью совпадает с заданием.
Найдем значения весов и смещения:
net.IW{1,1}, net.b{1}
ans = –2 –3
ans = 1
Сопутствующие функции: NEWP, NEWLIN, TRAIN.
trainr |
Обучение нейронной сети в режиме случайного представления входа |
Синтаксис:
[net,TR,Ac,El] = trainr(net,Pd,Tl,Ai,Q,TS,VV,TV)
info = trainr(code)
Описание:
Функция trainrне вызывается непосредственно. К ней обращается методtrain, когда свойствоnet.trainFcnсоответствует значению'trainr'. Функцияtrainrнастраивает веса и смещения при каждом предъявлении сети случайной входной последовательности.
Функция [net, TR, Ac, El] = trainr(net Pd, Tl, Ai, Q, TS, VV, TV)имеет следующие входные и выходные аргументы.
Входные аргументы:
net – исходная нейронная сеть;
Pd – вектор максимальных задержек по слоям;
Tl – вектор целей для слоя;
Ai – начальные условия на линиях задержки;
Q – количество реализаций для фиксированного момента времени;
TS – число шагов по времени;
VV – структура, описывающая контрольное множество;
TV – структура, описывающая тестовое множество.
Выходные аргументы:
net – структура объекта network object после адаптации;
TR – характеристики процедуры обучения:
TR.epoch – вектор, определяющий циклы обучения;
TR.perf – значения функции качества по циклам обучения;
Ac – массив выходов слоя для последнего цикла;
El – массив ошибок слоя для последнего цикла.
Входные и выходные массивы характеризуются следующими размерами:
Pd – массив ячеек размера IDNiTS, каждый элемент которого Pd{i, j, ts} – числовой массив размераZijQ;
Tl – массив ячеек размера NlTS, каждый элемент которогоTl{i, ts} – числовой массив размера ViQ, возможно пустой [];
Ai – массив ячеек размера NlLD, каждый элемент которого Ai{i, k} – числовой массив размера SiQ;
Ac – массив ячеек размера Nl(LD+TS), каждый элемент которого Ac{i, k} – числовой массив размера SiQ;
El – массив ячеек размера NlTS, каждый элемент которого El{i, k} – числовой массив размера ViQ, возможно пустой [].
Входные и выходные массивы характеризуются следующими размерами:
Pd – массив ячеек размера IDNiTS, каждый элемент которого Pd{i, j, ts} – числовой массив размераZijQ;
Tl – массив ячеек размера NlTS, каждый элемент которогоTl{i, ts} – числовой массив размера ViQ, возможно пустой [];
Ai – массив ячеек размера NlLD, каждый элемент которого Ai{i, k} – числовой массив размера SiQ;
Ac – массив ячеек размера Nl(LD+TS), каждый элемент которого Ac{i, k} – числовой массив размера SiQ;
El – массив ячеек размера NlTS, каждый элемент которого El{i, k} – числовой массив размера ViQ, возможно пустой [].
Параметры описания массивов ячеек и их связь с параметрами сети представлены в следующей таблице.
Параметр описания |
Параметр сети |
Назначение |
Ni |
net.numInputs |
Количество векторов входа |
Nl |
net.numLayers |
Количество слоев |
Nt |
net.numTargets |
Количество целевых выходов |
ID |
net.numInputDelays |
Максимальное значение задержки на входе |
LD |
net.numLayerDelays |
Максимальные значения задержек для слоев |
Ri |
net.inputs{i}.size |
Количество элементов i-го вектора входа |
Si |
net.layers{i}.size |
Количество нейронов i-го слоя |
Vi |
net.targets{i}.size |
Количество элементов i-го вектора цели |
TS |
|
Число шагов по времени |
Q |
|
Количество реализаций для фиксированного момента времени |
Zij |
|
Произведение длины вектора входа слоя i на максимальное значение задержки от слоя i к слою j: Ri * length(net.inputWeights{i, j}.delays) |
Функция trainrне выполняет проверки обучающей последовательности на представительность, поэтому входные аргументы VV и TV не используются.
Процедура обучения прекращается при достижении следующих значений параметров функции trainr:
Параметр |
Назначение |
net.trainParam.epochs |
Максимальное число циклов обучения, по умолчанию 100 |
net.trainParam.goal |
Предельное значение показателя качества обучения, по умолчанию 0 |
net.trainParam.show |
Интервал вывода данных, по умолчанию 25 циклов, отмена вывода – NaN |
net.trainParam.time |
Максимальное время обучения в секундах, по умолчанию Inf |
Функция info = trainr(code) возвращает информацию о параметрах обучения, соответствующую следующим значениям аргумента code:
'pnames'– имена параметров процедуры обучения в режиме случайного представления входа;
'pdefaults'– значения параметров процедуры обучения в режиме случайного представления входа, принимаемые по умолчанию.
Применение функции:
Чтобы сформировать нейронную сеть, используя функцию обучения trainr, следует:
установить свойство net.trainFcn равным 'trainr'. Это автоматически установит свойство net.trainParam равным значению по умолчанию;
установить значения свойств net.inputWeights{i, j}.learnFcn, net.layerWeights{i, j}.learnFcn, net.biases{i}.learnFcn соответствующими выбранным функциям настройки.
Для того чтобы фактически выполнить обучение сети, необходимо:
установить желаемые значения параметров настройки весов и смещений;
установить желаемые значения свойств net.trainParam;
вызвать функцию train.
Алгоритм:
Элементы матриц весов и векторов смещения изменяются в соответствии с заданной функцией настройки на каждом цикле обучения.
Обучение прекращается, когда выполняется одно из следующих условий:
достигнуто максимальное число циклов обучения;
значение функции качества стало меньше предельного;
превышено максимальное время, отпущенное на обучение.
Пример:
Сформировать самоорганизующуюся нейронную сеть для разделения векторов входа на 2 класса. Векторы входа состоят из двух элементов со значениями из диапазона [0 1]. Сеть имеет 2 выхода (по числу классов) и обучается с помощью функции trainr.
Формирование сети:
net = newc([0 1; 0 1], 2);
Формирование векторов входа:
P = [.1 .8 .1 .9;
.2 .9 .1 .8];
Обучение с циклическим представлением входа:
net.trainFcn ='trainr';
net = train(net,P,T);
Выполним моделирование сети и значения выхода преобразуем в индексы классов:
Y = sim(net,P);
Yc = vec2ind(Y)
Yc = 1 2 1 2
Нейронная сеть справилась с классификацией входных векторов на 2 класса, отнеся первый и третий векторы к классу 1, а второй и четвертый – к классу 2.
Сопутствующие функции: NEWP, NEWLIN, TRAIN.
Функции обучения.Ниже приведены функции ППП NNT, совместимые как с 11, так и с 12 выпусками ПОMWи предназначенные для реализации конкретных алгоритмов обучения и настройки параметров сети. Все эти функции имеют одинаковый формат вызова
[net,TR,Ac,El] = <имя_функции>(NET,Pd,Tl,Ai,Q,TS,VV,TV)
Они имеют следующие входные и выходные аргументы.
Входные аргументы:
net – исходная нейронная сеть;
Pd – вектор максимальных задержек по слоям;
Tl – вектор целей для слоя;
Ai – начальные условия на линиях задержки;
Q – количество реализаций для фиксированного момента времени;
TS – число шагов по времени;
VV – структура, описывающая контрольное множество;
TV– структура, описывающая тестовое множество.
Выходные аргументы:
net – структура объекта network object после адаптации;
TR – массив записей, содержащий характеристики процедуры обучения:
TR.epoch – вектор, определяющий циклы обучения;
TR.perf – значения функции качества по циклам обучения;
TR.vperf – значения контрольной функции по циклам обучения;
TR.tperf – значения тестовой функции по циклам обучения;
Ac– массив выходов слоя для последнего цикла;
El – массив ошибок слоя для последнего цикла.
Входные и выходные массивы характеризуются следующими размерами:
Pd – массив ячеек размера IDNiTS, каждый элемент которого Pd{i, j, ts} – числовой массив размераZijQ;
Tl – массив ячеек размера NlTS, каждый элемент которогоTl{i, ts} – числовой массив размера ViQ, возможно пустой [];
Ai – массив ячеек размера NlLD, каждый элемент которого Ai{i, k} – числовой массив размера SiQ;
Ac – массив ячеек размера Nl(LD+TS), каждый элемент которого Ac{i, k} – числовой массив размера SiQ;
El – массив ячеек размера NlTS, каждый элемент которого El{i, k} – числовой массив размера ViQ, возможно пустой [].
Входные и выходные массивы характеризуются следующими размерами:
Pd – массив ячеек размера IDNiTS, каждый элемент которого Pd{i, j, ts} – числовой массив размераZijQ;
Tl – массив ячеек размера NlTS, каждый элемент которогоTl{i, ts} – числовой массив размера ViQ, возможно пустой [];
Ai – массив ячеек размера NlLD, каждый элемент которого Ai{i, k} – числовой массив размера SiQ;
Ac – массив ячеек размера Nl(LD+TS), каждый элемент которого Ac{i, k} – числовой массив размера SiQ;
El – массив ячеек размера NlTS, каждый элемент которого El{i, k} – числовой массив размера ViQ, возможно пустой [].
Параметры описания массивов ячеек и их связь с параметрами сети представлены в следующей таблице.
Параметр описания |
Параметр сети |
Назначение |
Ni |
net.numInputs |
Количество векторов входа |
Nl |
net.numLayers |
Количество слоев |
Nt |
net.numTargets |
Количество целевых выходов |
ID |
net.numInputDelays |
Максимальное значение задержки на входе |
LD |
net.numLayerDelays |
Максимальные значения задержек для слоев |
Ri |
net.inputs{i}.size |
Количество элементов i-го вектора входа |
Si |
net.layers{i}.size |
Количество нейронов i-го слоя |
Vi |
net.targets{i}.size |
Количество элементов i-го вектора цели |
TS |
|
Число шагов по времени |
Q |
|
Количество реализаций для фиксированного момента времени |
Zij |
|
Произведение длины вектора входа слоя i на максимальное значение задержки от слоя i к слою j: Ri * length(net.inputWeights{i, j}.delays) |
Если входные аргументы VV или TV не пустые ([ ]), то они должны быть массивами структур:
VV.PD, TV.PD – контрольное и тестовое подмножества векторов входов после линии задержки, по умолчанию нулевые;
VV.Tl, TV.Tl – контрольное и тестовое подмножества векторов целей слоя;
VV.Ai, TV.Ai – контрольное и тестовое подмножества начальных условий на входе;
VV.Q, TV.Q – число выборок контрольного и тестового подмножеств;
VV.TS, TV.TS – длина выборок контрольного и тестового подмножеств.
Контрольные и тестовые подмножества используются для предотвращения явления переобучения.
Функции обучения могут включать следующие параметры:
Параметр |
Назначение |
net.trainParam.epochs |
Максимальное количество циклов (эпох) обучения, по умолчанию 100 |
net.trainParam.goal |
Предельное значение критерия обучения, по умолчанию 0 |
net.trainParam.show |
Интервал вывода данных, по умолчанию 25 циклов, отмена вывода – NaN |
net.trainParam.min_grad |
Минимальное значение градиента критерия качества, по умолчанию 1e–6 |
net.trainParam.time |
Максимальное время обучения в секундах, по умолчанию Inf |
net.trainParam.max_fail |
Максимально допустимый уровень превышения ошибки контрольного подмножества по сравнению с обучающим, по умолчанию 5 |
net.trainParam.searchFcn |
Имя функции поиска одномерного экстремума, по умолчанию 'srchbac' |
Функции поиска одномерного экстремума также включают достаточно большое количество настраиваемых параметров, приведенных в следующей таблице:
Параметр |
Назначение |
net.trainParam.scal_tol |
Параметр, связывающий погрешность tol с шагом delta по формуле tol = delta/scale_tol, по умолчанию 20 |
net.trainParam.alpha |
Коэффициент, определяющий порог уменьшения критерия качества, по умолчанию 0.001 |
net.trainParam.beta |
Коэффициент, определяющий выбор шага, по умолчанию 0.1 |
net.trainParam.delta |
Начальное значение шага, по умолчанию 0.01 |
net.trainParam.gama |
Параметр, регулирующий изменение критерия качества, по умолчанию 0.1 |
net.trainParam.low_lim |
Нижняя граница изменения шага, по умолчанию 0.1 |
net.trainParam.up_lim |
Верхняя граница изменения шага, по умолчанию 0.5 |
net.trainParam.maxstep |
Максимальное значение шага, по умолчанию 100 |
net.trainParam.minstep |
Минимальное значение шага, по умолчанию 1.0e–6 |
net.trainParam.bmax |
Максимальный размер шага, по умолчанию 26 |
net.trainParam.mu |
Начальное значение |
net.trainParam.mu_dec |
Коэффициент уменьшения параметра mu, по умолчанию 0.1 |
net.trainParam.mu_inc |
Коэффициент увеличения параметра mu, по умолчанию 10 |
net.trainParam.mu_max |
Максимальное значение параметра mu, по умолчанию 1e–10 |
net.trainParam.mem_reduc |
Параметр разбиения матрицы Якоби на подматрицы, по умолчанию 1 |
net.trainParam.lr |
Параметр, по умолчанию 0.01 |
net.trainParam.lr_inc |
Коэффициент увеличения скорости настройки, по умолчанию 1.05 |
net.trainParam.lr_dec |
Коэффициент уменьшения скорости настройки, по умолчанию 0.7 |
net.trainParam.delta0 |
Начальное значение шага настройки в методе Rprop, по умолчанию 0.07 |
net.trainParam.delt_inc |
Коэффициент увеличения шага настройки в методе Rprop, по умолчанию 1.2 |
net.trainParam.delt_dec |
Коэффициент уменьшения шага настройки в методе Rprop, по умолчанию 0.5 |
net.trainParam.deltamax |
Максимальное значение шага настройки в методе Rprop, по умолчанию 50 |
При описании каждой функции одномерного поиска приводится перечень используемых параметров.
Кроме того, все функции возвращают информацию о параметрах обучающей функции, если используется следующий формат вызова:
info = <имя_функции>(code).
В зависимости от значения аргумента code возвращается следующая информация:
'pnames'– имена параметров процедуры обучения;
'pdefaults'– значения параметров процедуры обучения, принимаемые по умолчанию.
В качестве примера, иллюстрирующего возможности обучения, рассмотрен общий пример, что позволяет сравнивать описываемые алгоритмы обучения по скорости и точности.