- •В. Г. Потемкин
- •Предисловие
- •Введение
- •Используемые обозначения
- •Часть 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
- •Предметный указатель
- •Литература Книги на английском языке:
- •Книги на русском языке:
- •Оглавление
Графические утилиты
PLOTV |
Отображение векторов в виде линий |
Синтаксис:
plotv(P, LineStyle)
Описание:
Функция plotv(P,LineStyle) строит векторы столбцов массива входа Р размера RQ; строковая переменнаяLineStyleпозволяет задать тип линии согласно следующей таблице.
-
Тип линии
Значение LineStyle
Непрерывная
'–', по умолчанию
Штриховая
'– –'
Двойной пунктир
':'
Штрихпунктирная
'–.'
Число строк R массива Р должно быть не меньше чем 2; при значениях R, больших, чем 2, для построения графика используются только первые 2 строки массива Р.
Пример:
P = [–0.4 0.7 0.2;
–0.5 0.1 0.5];
plotv(P,'–'); % Рис.11.64
Результат построения представлен на рис. 11.64.
Рис. 11.64
Сопутствующие функции: PLOTVEC.
PLOTVEC |
Отображение векторов входа в виде маркеров |
Синтаксис:
plotvec(P,color,Marker)
plotvec(P)
hh = plotvec(...)
Описание:
Функция plotvec(P, color, Marker) отображает векторы столбцов массива входа Р размера RQ в виде маркеров, цвет каждого из которых задается элементами вектор-строки color; строковая переменная Marker позволяет задать тип маркера согласно следующей таблице.
-
Тип маркера
Значение Marker
Тип маркера
Значение Marker
Плюс
'+', по умолчанию
Пятигранник
'p'
Точка
'.'
Шестигранник
'h'
Звездочка
'*'
Стрелка вниз
'v'
Кружок
'o'
Стрелка вверх
'^'
Крест
'x'
Стрелка влево
'<'
Квадрат
's'
Стрелка вправо
'>'
Ромб
'd'
Число строк R массива Р должно быть не меньше чем 2; для отображения маркеров используются первые 2 или 3 строки массива Р. Графики строятся либо в двумерном, либо в трехмерном пространстве соответственно.
Функция plotvec(P) использует тип маркера по умолчанию, а элементы вектор-строкиcolorсоответствуют номеру столбца массива Р.
Функция hh = plotvec(...) возвращает вектор дескрипторов для всех маркеров.
Пример:
P =[ 0.1000 1.0000 0.5000 0.7000
–1.0000 2.0000 0.5000 0.1000
1.0000 0.1000 0.7000 0.5000];
t = minmax(P)';
axis(t(:)')
c = [1 2 3 4];
plotvec(P,c,’o’) % Рис.11.65
Результат представлен на рис. 11.65.
Рис. 11.65
Сопутствующие функции: PLOTV.
PLOTPV |
Отображение векторов входов и целей в виде маркеров |
Синтаксис:
plotpv(P,T)
plotpv(P,T,v)
Описание:
Функция plotpv(P, T) отображает векторы столбцов массива входа Р размера RQ и массива целей размера SQ в виде маркеров различного типа. Число строк этих массивовRиSдолжно быть не более трех.
Функция plotpv(P, T, v) позволяет задать пределы построения графика:
для двумерных векторов в виде вектора [x_min x_max y_min y_max];
для трехмерных векторов в виде вектора [x_min x_max y_min y_max z_minz_max].
Пример:
Определим выходы и цели персептрона:
P = [0 0 1 1;
0 1 0 1;
1 0 0 1];
T = [0 0 0 1];
plotpv(P,T) % Рис.11.66
Результат представлен на рис. 11.66.
Рис. 11.66
Сопутствующие функции: PLOTPC.
PLOTPC
|
Построение разделяющей линии или плоскости в пространстве векторов входа для персептрона |
Синтаксис:
plotpc(W,b)
plotpc(W,b,hh)
h = plotpc(…)
Описание:
Функция plotpc(W, b) строит разделяющую линию или плоскость, если заданы матрица весов Wразмера SR и вектор смещений размера S1, причем значениеRдолжно быть не более трех. Разделяющая линия или плоскость строятся в пространстве векторов входа, координатные оси которого предварительно формируются с помощью функции plotpv.
Функция plotpc(W, b,hh) иcпользует векторhhдескрипторов графических объектовLineпоследних построенных линий и удаляет их перед тем, как построить новую разделяющую линию или плоскость.
Функция h = plotpc(...) возвращает вектор дескрипторов вновь созданных графических объектовLine.
Примеры:
Определим векторы входов и целей и отобразим их в двумерном пространстве входов:
P = [0 0 1 1;
0 1 0 1];
T = [0 0 0 1];
plotpv(P,T)
Создадим персептрон со входами P, зададим произвольные значения весам и смещениям и построим разделяющую линию в пространстве входов:
net = newp(minmax(P),1);
net.iw{1,1} = [–1.2 –1];
net.b{1} = 1.3;
plotpc(net.iw{1,1},net.b{1}) % Рис.11.67
На рис. 11.67 построено начальное положение разделяющей линии и требуется выполнить процедуру настройки параметров персептрона, чтобы правильно классифицировать векторы входа.
Рис. 11.67
Перейдем к построению разделяющей плоскости в трехмерном пространстве:
P = [0 0 1 1;
0 1 0 1;
1 0 0 1];
T = [0 0 0 1];
plotpv(P,T)
Следующие функции создают персептрон со входами, соответствующими значениям вектора P, назначают значения его весам и смещениям и строят разделяющую плоскость:
net = newp(minmax(P),1);
net.iw{1,1} = [–1.2 –1 –0.5];
net.b{1} = 1.3;
plotpc(net.iw{1,1},net.b{1}) % Рис.11.68
Результат представлен на рис. 11.68.
Рис. 11.68
Анализ рис. 11.68 позволяет сделать вывод, что векторы входов и цели в начальном состоянии находятся по разные стороны от плоскости.
Сопутствующие функции: PLOTPV.
HINTONW |
Диаграмма Хинтона для весов |
Синтаксис:
hintonw(W,maxw,minw)
hintonw(W)
Описание:
Функция hintonw(W, maxw, minw) отображает значения элементов матрицы весов Wразмера SR в видедиаграммы Хинтона; при этом аргумент maxw соответствует максимальному, а minw – минимальному элементу весовой матрицы. Диаграмма Хинтона – это прямоугольная сетка, в узлах которой изображаются квадраты, площадь которых пропорциональна значению соответствующего веса; цвет квадрата соответствует знаку веса: красный (темный) для отрицательных и зеленый (светлый) для положительных весов.
Функция hintonw(W) использует по умолчанию для аргумента maxwзначениеmax(max(abs(W))), а для аргумента minw значениеmaxw/100.
Пример:
Зададим случайную матрицу весов и построим для нее диаграмму Хинтона (рис. 11.69), используя значения дополнительных аргументов по умолчанию:
W = rands(4,5)
W =
0.9003 0.7826 0.6428 0.8436 0.8709
–0.5377 0.5242 –0.1106 0.4764 0.8338
0.2137 –0.0871 0.2309 –0.6475 –0.1795
–0.0280 –0.9630 0.5839 –0.1886 0.7873
hintonw(W) % Рис.11.69
Рис. 11.69
Сопутствующие функции: HINTONWB.
HINTONWB |
Диаграмма Хинтона для весов и смещений |
Синтаксис:
hintonwb(W,b,maxw,minw)
hintonwb(W,b)
Описание:
Функция hintonw(W, b, maxw, minw) отображает значения элементов матрицы весов W размера SR и вектора смещений размера S1 в виде диаграммы Хинтона; при этом аргумент maxw соответствует максимальному, а minw – минимальному элементу весовой матрицы. Элементы вектора смещений показаны в левой части диаграммы.
Функция hintonw(W, b) использует по умолчанию для аргументаmaxwзначениеmax(max(abs(W))), а для аргумента minw значениеmaxw/100.
Пример:
Зададим случайные матрицу весов и вектор смещений и построим для них диаграмму Хинтона (рис. 11.70), используя значения дополнительных аргументов по умолчанию:
W = rands(4,5);
b = rands(4,1);
hintonwb(W,b) % Рис.11.70
Рис. 11.70
Сопутствующие функции: HINTONW.
PLOTPERF |
График функции качества обучения |
Синтаксис:
plotperf(tr,goal,name,epoch)
plotperf(tr)
Описание:
Функция plotperf(TR, goal, name, epoch) предназначена для построения графиков критерия качества обучения, предельной точности и графиков точности обучения с учетом контрольного и тестового подмножеств. Функция имеет следующие входные аргументы:
TR – массив записей с характеристиками обучения, возвращаемый функцией train;
goal – предельная точность, по умолчанию NaN;
name – имя обучающей функции, по умолчанию ' ';
epoch – число циклов обучения.
Пример:
Зададим 8 значений вектора входа P, соответствующий им вектор целей T, а также контрольное подмножество в виде векторов VV.P и VV.T:
P = 1:8; T = sin(P); VV.P = P; VV.T = T+rand(1,8)*0.1;
Создадим и обучим двухслойную сеть прямой передачи с четырьмя нейронами в первом слое с функцией активации tansig и одним нейроном во втором слое также с функцией активации tansig:
net = newff(minmax(P),[4 1],{'tansig','tansig'});
[net,tr] = train(net,P,T,[],[],VV);
В процессе выполнения процедуры train для построения графика точности обучения также применяется функция plotperf, и во многих случаях этого бывает достаточно для оценки процедуры обучения.
Однако функция plotperf позволяет оформить графики результатов обучения и по завершении этой процедуры, используя дополнительные аргументы.
Например, выполняя обучение с предельной точностью, заданной по умолчанию, на заключительном графике можно указать требуемую точность и оценить длительность обучения (рис. 11.71):
plotperf(tr, 0.005) % Рис.11.71
Рис. 11.71
Для достижения требуемой точности обучения, равной 0.005, требуется не более 10 циклов.
Сопутствующие функции: TRAIN.
ERRSURF, PLOTES |
Вычисление и построение графика поверхности ошибки для нейрона |
Синтаксис:
ES = errsurf(p,t,wv,bv,f)
plotes(wv,bv,ES,v)
Описание:
Функция ES= errsurf(p, t, wv, bv, f) вычисляет массивES, описывающий поверхность ошибки для нейрона с одним вектором входаpразмера 1Q, одним вектором целейtразмера 1Q; также должны быть заданы векторы весовwvи смещенийbи функция активации нейрона f.
Функция plotes(wv, bv, ES, v) строит график поверхности ошибок и линий уровня для нейрона в зависимости от весов wvи смещенийb, если задан массив ES, вычисленный с помощью функции errsurf. Для удобства изображения поверхности в трехмерном пространстве можно изменять значение вектораv, который задает направление угла зрения, по умолчанию векторvравен [–37.5, 30].
Пример:
p = [3 2];
t = [0.4 0.8];
wv = –4:0.4:4; bv = wv;
ES = errsurf(p,t,wv,bv,'logsig');
plotes(wv,bv,es,[60 30]) % Рис.11.72
Результат построения представлен на рис. 11.72.
Рис. 11.72
Сопутствующие функции: PLOTEP.
PLOTEP |
Построение траектории обучения на поверхности ошибки |
Синтаксис:
h = plotep(w,b,e)
h = plotep(w,b,e,h)
Описание:
Функция h = plotep(w, b, e) строит изображающую точку на графиках поверхности ошибок и линий уровня, построенных с помощью функции plotes.
Входные аргументы:
w – текущий вектор весов;
b – текущий вектор смещений;
e – текущая ошибка.
Выходные аргументы:
h– дескриптор, содержащий информацию для построения изображающей точки.
Функция h = plotep(w, b, e, h) – это рекуррентная форма вышеописанной функции, которая позволяет построить траекторию движения изображающей точки.
Применение функции:
Возможность применения функции plotep для построения траектории обучения в пространстве настраиваемых параметров поясняется нижеприведенным script-файлом, который описывает сценарий построения такой траектории. Читатель может реализовать этот сценарий на своем компьютере. Авторы предполагают разместить наиболее интересные примеры расчета нейронных сетей в виде М-файлов на сайтеwww.mathworks.ru. Данный сценарий обязательно будет включен в число этих М-файлов.
Script
% Задание обучающей последовательности P = 1:8; T = sin(P);
% Построение поверхности ошибок w_range = –1:0.2:1; b_range = –1:0.2:1; ES = errsurf(P, T, w_range, b_range, 'purelin'); plotes(w_range, b_range,ES);
% Формирование нейронной сети maxlr = 0.40*maxlinlr(P, 'bias'); net = newlin([–2 2], 1, [0], maxlr);
% Задание начальной точки subplot(1, 2, 2); h = text(sum(get(gca, 'xlim'))*0.5 sum(get(gca, 'ylim'))*0.5, '*Укажите точку*'); set(h,'horizontal', 'center', 'fontweight', 'bold'); [net.IW{1,1} net.b{1}] = ginput(1); delete(h);
|
% Построение траектории обучения limiting = net.trainParam.epochs; limloop = limiting+1; net.trainParam.epochs = 1; net.trainParam.goal = .001; net.trainParam.show = Inf; h = plotep(net.IW{1}, net.b{1}, mse(T–sim(net, P))); [net, tr] = train(net, P, T); r = tr; epoch = 1; cont = 1; while (length(r.epoch)<limloop & cont) epoch = epoch+1; [net, tr]=train(net, P, T); if length(tr.epoch)>1 h = plotep(net.IW{1,1}, net.b{1}, tr.perf(2), h); r.epoch = [r.epoch epoch]; r.perf = [r.perf tr.perf(2)]; r.vperf = [r.vperf NaN]; r.tperf = [r.tperf NaN]; else cont = 0; end; end; |
Рис. 11.73
На рис. 11.73 показан результат выполнения сценария для построения траектории обучения в пространстве настраиваемых параметров. Траектории обучения наглядно видны на графиках линий уровня.
Сопутствующие функции: ERRSURF, PLOTES.