- •В. Г. Потемкин
- •Предисловие
- •Введение
- •Используемые обозначения
- •Часть 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
- •Предметный указатель
- •Литература Книги на английском языке:
- •Книги на русском языке:
- •Оглавление
Итерационная процедура формирования сети
Функция newrb создает радиальную базисную сеть, используя итеративную процедуру, которая добавляет по одному нейрону на каждом шаге. Нейроны добавляются к скрытому слою до тех пор, пока сумма квадратов ошибок не станет меньше заданного значения или не будет использовано максимальное количество нейронов. Эта функция вызывается с помощью команды
net = newrb(P,T,GOAL,SPREAD)
Входами функции newrbявляются массивы входных и целевых векторовPиT, а также параметры GOAL (допустимая среднеквадратичная ошибка сети), SPREAD (параметр влияния), а выходом – описание радиальной базисной сети. Значение параметра SPREAD должно быть достаточно большим, чтобы покрыть весь диапазон значений входов, но не настолько, чтобы эти значения были одинаково значимыми.
Применим функцию newrb для создания радиальной базисной сети из предыдущго примера.
P = –1:.1:1;
T = [–.9602 –.5770 –.0729 .3771 .6405 .6600 .4609 .1336 ...
–.2013 –.4344 –.5000 –.3930 –.1647 .0988 .3072 .3960 ...
.3449 .1816 –.0312 –.2189 –.3201];
plot(P,T,'*r','MarkerSize',4,'LineWidth',2)
hold on
% Создание сети
GOAL = 0.01; % Допустимое значение функционала ошибки
net = newrb(P,T,GOAL); % Создание радиальной базисной сети
net.layers{1}.size % Число нейронов в скрытом слое
ans = 6
% Моделирование сети
V = sim(net,P); % Векторы входа из обучающего множества
plot(P,V,'ob','MarkerSize',5, 'LineWidth',2)
p = [–0.75 –0.25 0.25 0.75];
v = sim(net,p); % Новый вектор входа
plot(p,v,'+k','MarkerSize',10, 'LineWidth',2)
Соответствующий график представлен на рис. 6.5, а.
а |
б |
Рис. 6.5
Здесь отмечены значения входов Р, целевых выходовТ, а также результаты обработки нового векторар. Количество используемых нейронов в скрытом слое в данном случае равно шести, что соответствует значению функционала ошибки 0.01. На рис. 6.5,бпоказана зависимость количества требуемых нейронов скрытого слоя от точности обучения. Из этого графика следует, что для значений функционала ошибки менее 1е–9 требуется максимальное количество нейронов, совпадающее с числом нейронов радиальной базисной сети с нулевой погрешностью.
Если сравнивать сети с прямой передачей сигнала и радиальные базисные сети, то следует заметить, что при решении одних и тех же задач они имеют определенные преимущества друг перед другом. Так, радиальные базисные сети с нулевой погрешностью имеют значительно больше нейронов, чем сравнимая сеть с прямой передачей сигнала и сигмоидальными функциями активации в скрытом слое. Это обусловлено тем, что сигмоидальные функции активации перекрывают большие диапазоны значений входа, чем радиальные базисные функции. С другой стороны, проектирование радиальной базисной сети требует значительно меньшего времени, а при ограниченной точности обучения может потребовать и меньшего количества используемых нейронов.
Примеры радиальных базисных сетей
Демонстрационный пример demorb1иллюстрирует применение радиальной базисной сети для решения задачи аппроксимации функции от одной переменной.
Представим функцию f(x) следующим разложением:
, (6.2)
где i(x) – радиальная базисная функция.
Тогда идея аппроксимации может быть представлена графически следующим образом. Рассмотрим взвешенную сумму трех радиальных базисных функций, заданных на интервале [–3 3].
p = –3:.1:3;
a1 = radbas(p);
a2 = radbas(p–1.5);
a3 = radbas(p+2);
a = a1 + a2*1 + a3*0.5;
plot(p,a1,p,a2,p,a3*0.5,p,a) % Рис. 6.6
Рис. 6.6
Как следует из анализа рис. 6.6 разложение по радиальным базисным функциям обеспечивает необходимую гладкость. Поэтому их применение для аппроксимации произвольных нелинейных зависимостей вполне оправдано. Разложение вида (6.2) может быть реализовано на двухслойной нейронной сети, первый слой которой состоит из радиальных базисных нейронов, а второй – из единственного нейрона с линейной характеристикой, на котором реализуется суммирование выходов нейронов первого слоя.
Приступим к формированию радиальной базисной сети. Сформируем обучающее множество и зададим допустимое значение функционала ошибки, равное 0.01, параметр влияния определим равным 1 и будем использовать итерационную процедуру формирования радиальной базисной сети:
P = –1:.1:1;
T = [–.9602 –.5770 –.0729 .3771 .6405 .6600 .4609 .1336 ...
–.2013 –.4344 –.5000 –.3930 –.1647 .0988 .3072 .3960 ...
.3449 .1816 –.0312 –.2189 –.3201];
GOAL = 0.01; % Допустимое значение функционала ошибки
SPREAD = 1; % Параметр влияния
net = newrb(P,T,GOAL,SPREAD); % Создание сети
net.layers{1}.size % Число нейронов в скрытом слое
ans = 6
Для заданных параметров нейронная сеть состоит из шести нейронов и обеспечивает следующие возможности аппроксимации нелинейных зависимостей после обучения. Моделируя сформированную нейронную сеть, построим аппроксимационную кривую на интервале [–1 1] с шагом 0.01 для нелинейной зависимости.
plot(P,T,'+k') % Точки обучающего множества
hold on;
X = –1:.01:1;
Y = sim(net,X); % Моделирование сети
plot(X,Y); % Рис. 6.7
Из анализа рис. 6.7 следует, что при небольшом количестве нейронов скрытого слоя радиальная базисная сеть достаточно хорошо аппроксимирует нелинейную зависимость, заданную обучающим множеством из 21 точки.
Рис. 6.7
В демонстрационных примерах demorb3 и demorb4 исследуется влияние параметра SPREAD на структуру радиальной базисной сети и качество аппроксимации. В демонстрационном примере demorb3 параметр влияния SPREAD установлен равным 0.01. Это означает, что диапазон перекрытия входных значений составляет лишь 0.01, а поскольку обучающие входы заданы с интервалом 0.1, то входные значения функциями активации не перекрываются.
GOAL = 0.01; % Допустимое значение функционала ошибки
SPREAD = 0.01; % Параметр влияния
net = newrb(P,T,GOAL,SPREAD); % Создание сети
net.layers{1}.size % Число нейронов в скрытом слое
ans = 19
Это приводит к тому, что, во-первых, увеличивается количество нейронов скрытого слоя с 6 до 19, а во-вторых, не обеспечивается необходимой гладкости аппроксимируемой функции:
plot(P,T,'+k') % Точки обучающего множества
hold on;
X = –1:.01:1;
Y = sim(net,X); % Моделирование сети
plot(X,Y); % Рис. 6.8
Рис. 6.8
Пример demorb4 иллюстрирует противоположный случай, когда параметр влияния SPREAD выбирается достаточно большим (в данном примере – 12 или больше), то все функции активации перекрываются и каждый базисный нейрон выдает значение, близкое к 1, для всех значений входов. Это приводит к тому, что сеть не реагирует на входные значения. Функция newrb будет пытаться строить сеть, но не сможет обеспечить необходимой точности из-за вычислительных проблем.
GOAL = 0.01; % Допустимое значение функционала ошибки
SPREAD = 12; % Параметр влияния
net = newrb(P,T,GOAL,SPREAD); % Создание сети
net.layers{1}.size % Число нейронов в скрытом слое
ans = 21
В процессе вычислений возникают трудности с обращением матриц, и об этом выдаются предупреждения; количество нейронов скрытого слоя устанавливается равным 21, а точность аппроксимации оказывается недопустимо низкой:
plot(P,T,'+k') % Точки обучающего множества
hold on;
X = –1:.01:1;
Y = sim(net,X); % Моделирование сети
plot(X,Y); % Рис. 6.9
Рис. 6.9
Вывод из выполненного исследования состоит в том, что параметр влияния SPREAD следует выбирать большим, чем шаг разбиения интервала задания обучающей последовательности, но меньшим размера самого интервала. Для данной задачи это означает, что параметр влияния SPREAD должен быть больше 0.1 и меньше 2.