- •В. Г. Потемкин
- •Предисловие
- •Введение
- •Используемые обозначения
- •Часть 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.4. Функции инициализации
Функции инициализации выполняют подготовку нейронной сети к инициализации и выполняют саму инициализацию, присваивая начальные значения матрицам весов и векторам смещений.
inIT |
Инициализация нейронной сети |
Синтаксис:
net = init(net)
Описание:
Функция net = init(net)выполняет инициализацию нейронной сети, используя функцию инициализации, определяемую свойствомnet.initFcn, и значения параметров, определяемые свойствомnet.initParam.
Пример:
Сформировать персептрон с одним нейроном, вход которого имеет 2 элемента со значениями в диапазонах [0 1] и [ –2 2].
net = newp([0 1; –2 2], 1);
net.initFcn
net.layers{1}.initFcn
net.inputWeights{1}.initFcn
net.biases{1}.initFcn
ans = initlay
ans = initwb
ans = initzero
ans = initzero
В результате создания персептрона мы видим, что сеть допускает возможность задавать любые функции инициализации весов и смещений, поскольку в качестве функций готовности выбраны: для сети – функция initlay, для слоя – initwb. В качестве функций инициализации для весов и смещений персептрона используется функция initzero.
Выведем значения установленных весов и смещений:
net.IW{1,1}
net.b{1}
ans = 0 0
ans = 0
Обучим персептрон на следующих обучающих множествах P = [0 1 0 1; 0 0 1 1]:
T = [0 0 0 1];
net = train(net,P,T);
net.IW{1,1}
net.b{1}
ans = 1 2
ans = –3
Это приводит к установлению новых значений весов и смещений.
Для того чтобы возвратиться к начальным значениям весов и смещений, характерных для данной сети, и предназначена функция init:
net = init(net);
net.IW{1,1}
net.b{1}
ans = 0 0
ans = 0
Веса и смещения возвращаются к нулевым значениям, что соответствует свойствам нейронной сети персептрона.
Алгоритм:
Функция init проверяет свойствоnet.initFcn, чтобы инициализировать нужным образом веса и смещения. Обычно свойствоnet.initFcnустанавливается равным 'initlay', что позволяет устанавливать функции инициализации для каждого слоя, используя свойствоnet.layers{i}.initFcn.
В сетях с обратным распространением ошибки свойство net.layers{i}.initFcn устанавливается равным'initnw', что соответствует алгоритму инициализацииNguyen–Widrow.
Для других сетей значение свойства net.layers{i}.initFcnустанавливается равным'initwb', что позволяет устанавливать произвольные функции инициализации для каждого слоя. Наиболее общий тип функции инициализации – это функция rands, которая генерирует случайные значения весов и смещений в диапазоне [–1 1].
Сопутствующие функции: SIM, ADAPT, TRAIN, INITLAY, INITNW, INITWB, RANDS.
inITLAY |
Функция готовности сети к инициализации |
Синтаксис:
net = initlay(net)
info = initlay(code)
Описание:
Функция net = initlay(net)устанавливает, что в сетиnet для инициализации ее слоев могут быть использованы собственные функции инициализации, определяемые свойствомnet.layers{i}.initFcn.
Функция info = initlay(code)возвращает информацию о параметрах инициализации, соответствующую следующим значениям аргументаcode:
'pnames'– имена параметров инициализации;
'pdefaults'– значения параметров инициализации по умолчанию.
Initlayне имеет параметров инициализации.
Применение функции:
Функция инициализации initlay используется при создании сетей с помощью методовnewp,newlin,newff,newcf, а также при формировании сетей с атрибутами, определяемыми пользователем.
Для того чтобы подготовить сеть к заданию произвольных функций инициализации слоев, необходимо:
установить свойство сети net.initFcnравным'initlay'. Это автоматически установит свойствоnet.initParamравным пустой матрице [ ], так как функцияinitlayне имеет параметров инициализации;
установить значения свойств net.layers{i}.initFcn, соответствующие выбранным функциям инициализации для слоя, напримерinitwbилиinitnw.
Для того чтобы фактически инициализировать сеть, т. е. присвоить значения матрицам весов и векторам смещений, необходимо применить функцию init.
Алгоритм:
Веса и смещения в каждом слое iсетиnetинициализируются функцией, заданной значением свойстваnet.layers{i}.initFcn.
Сопутствующие функции: initwb, initnw, init.
inITWB |
Функция готовности слоя к инициализации |
Синтаксис:
net = initwb(net,I)
Описание:
Функция net = initwb(net, I) устанавливает, что в сети net для инициализации слоя I будет использована функция инициализации, определяемая свойством net.layers{i}.initFcn.
Применение функции:
Функция инициализации initwb используется при создании сетей с помощью методовnewp,newlin,newff, а также при формировании сетей с атрибутами, определяемыми пользователем.
Для того чтобы подготовить сеть к заданию произвольных функций инициализации слоев, необходимо:
установить свойство сети net.initFcnравным'initlay'. Это автоматически установит свойствоnet.initParamравным пустой матрице [ ], так как функцияinitlayне имеет параметров инициализации;
установить значение свойства net.layers{i}.initFcnравным'initwb';
установить значения свойств net.inputWeights{i, j}.initFcn, net.layerWeights{i, j}.initFcn, net.biases{i}.initFcn, соответствующие выбранным функциям инициализации, например rands или midpoint.
Для того чтобы фактически инициализировать сеть, т. е. присвоить значения матрицам весов и векторам смещений, необходимо применить функцию init.
Сопутствующие функции: initnw, initlay, init.
inITNW |
Функция инициализации слоя по алгоритму NW |
Синтаксис:
net = initnw(net,I)
Описание:
Функция net = initnw(net, I)инициализирует веса и смещения слояIсети net, используя алгоритм инициализацииNguyen–Widrow.
Применение функции:
Функция инициализации initnw используется при создании сетей с помощью методов newff, newcf, а также при формировании сетей с атрибутами, определяемыми пользователем.
Для того чтобы подготовить сеть к заданию функции инициализации initnw, необходимо:
установить свойство сети net.initFcnравным'initlay'. Это автоматически установит свойствоnet.initParamравным пустой матрице [ ], так как функцияinitlayне имеет параметров инициализации;
установить значение свойства net.layers{i}.initFcnравным 'initnw'.
Для того чтобы фактически инициализировать сеть, т. е. присвоить значения матрицам весов и векторам смещений, необходимо применить функцию init.
Алгоритм:
Метод Nguyen–Widrowгенерирует значения начальных весов и смещений так, чтобы активные области слоя нейронов были бы распределены приблизительно равномерно в пространстве входа.
Его преимуществами по сравнению с методом инициализации случайных весов и смещений являются следующие:
оптимальное количество используемых нейронов;
ускорение процедуры обучения, поскольку активные зоны нейронов соответствуют пространству входа.
Ограничения метода инициализации Nguyen–Widrowсвязаны с тем, что его можно применять только к слоям, имеющим смещения, с функцией взвешиванияdotprodи функцией накопленияnetsum.
Если эти условия не выполняются, то следует использовать метод инициализации rands.
Сопутствующие функции: initwb, initlay, init.
inITZERO |
Инициализация нулевых значений весов и смещений |
IСинтаксис:
W = initzero(S,PR)
b = initzero(S,[1 1])
Описание:
Функция W = initzero(S, PR)присваивает матрице весов слоя нулевые значения и имеет следующие входные и выходные аргументы.
Входные аргументы:
S – число нейронов в слое;
PR – матрица размера R2, задающая диапазоны изменения элементов входного вектора.
Выходной аргумент:
W – нулевая матрица весов размера SR.
Функция b = initzero(S, [1 1])присваивает вектору смещений слоя нулевые значения и имеет следующие входные и выходные аргументы.
Входной аргумент:
S – число нейронов в слое.
Выходной аргумент:
b – нулевой вектор смещений размера S1.
Пример:
Присвоить нулевые значения матрице весов и вектору смещения для слоя с пятью нейронами и вектором входа, элементы которого принимают значения в диапазонах [0 1], [–2 2].
W = initzero(5, [0 1; –2 2])
b = initzero(5, [1 1])
-
W =
b =
0 0
0 0
0 0
0 0
0 0
0
0
0
0
0
Применение функции:
Функция инициализации initzero используется при создании сетей с помощью методов newp, newlin, а также при формировании сетей с атрибутами, определяемыми пользователем.
Для того чтобы подготовить сеть к заданию функции инициализации initzero, необходимо:
установить свойство сети net.initFcnравным'initlay'. Это автоматически установит свойствоnet.initParamравным пустой матрице [ ], так как функцияinitlayне имеет параметров инициализации;
установить значение свойства net.layers{i}.initFcnравным'initwb';
установить значения свойств net.inputWeights{i, j}.initFcn, net.layerWeights{i, j}.initFcn, net.biases{i}.initFcn равными initzero.
Для того чтобы фактически инициализировать сеть, т. е. присвоить нулевые значения матрицам весов и векторам смещений, необходимо применить функцию init.
Сопутствующие функции: initwb, initlay, init.
midpoint |
Инициализация матрицы средних значений |
Синтаксис:
W = midpoint(S,PR)
Описание:
Функция W = midpoint (S, PR)присваивает элементам матрицы весов слоя средние значения элементов вектора входа и имеет следующие входные и выходные аргументы.
Входные аргументы:
S – число нейронов в слое;
PR – матрица размера R2, задающая диапазоны изменения элементов входного вектора[Pmin Pmax].
Выходной аргумент:
W – матрица весов размера SR с элементами столбцов, равными (Pmin+Pmax)/2.
Пример:
Присвоить нулевые значения матрице весов и вектору смещения для слоя с пятью нейронами и вектором входа, элементы которого принимают значения в диапазонах [0 1], [–2 2].
W = midpoint(5,[0 1; –2 2])
W =
5.0000e–001 0
5.0000e–001 0
5.0000e–001 0
5.0000e–001 0
5.0000e–001 0
Применение функции:
Функция инициализации midpointиспользуется при создании сетей с помощью методаnewp, а также при формировании сетей с атрибутами, определяемыми пользователем.
Для того чтобы подготовить сеть к заданию функции инициализации midpoint, необходимо:
установить свойство сети net.initFcnравным'initlay'. Это автоматически установит свойствоnet.initParamравным пустой матрице [ ], так как функцияinitlayне имеет параметров инициализации;
установить значение свойства net.layers{i}.initFcnравным'initwb';
установить значения свойств net.inputWeights{i, j}.initFcn, net.layerWeights{i, j}.initFcn равными midpoint.
Для того чтобы фактически инициализировать сеть, т. е. присвоить нулевые значения матрицам весов и векторам смещений, необходимо применить функцию init.
Сопутствующие функции: INITWB, INITLAY, INIT.
randS |
Инициализация случайных весов/смещений |
Синтаксис:
W = rands(S,PR)
M = rands(S,R)
v = rands(S)
Описание:
Функции семейства randsпредназначены для инициализации случайных массивов весов и смещений.
Функция W = rands(S, PR) имеет 2 входных аргумента:
S – число нейронов;
PR – массив минимальных и максимальных значений вектора входа размера R2.
Выходом является случайная матрица весов размера SR с элементами из диапазона [–1 1].
Функция M = rands(S, R) использует в качестве второго аргумента параметр R, соответствующий числу элементов вектора входа. Выходом также является случайная матрица весов размера SR с элементами из диапазона [–1 1].
Функция v = rands(S) возвращает случайный вектор размера S1 с элементами из диапазона [–1 1].
Пример:
Сформируем с помощью функции rands различные массивы случайных величин:
W = rands(4,[0 1; –2 2])
M = rands(2,3)
v = rands(4)
W =
0.9003 0.7826
–0.5377 0.5242
0.2137 –0.0871
–0.0280 –0.9630
M =
0.6428 0.2309 0.8436
–0.1106 0.5839 0.4764
v =
–0.6475
–0.1886
0.8709
0.8338
Применение функции:
Для того чтобы подготовить сеть к заданию функции инициализации rands, необходимо:
установить свойство сети net.initFcnравным'initlay'. Это автоматически установит свойствоnet.initParamравным пустой матрице [ ], так как функцияinitlayне имеет параметров инициализации;
установить значение свойства net.layers{i}.initFcnравным'initwb';
установить значения свойств net.inputWeights{i, j}.initFcn, net.layerWeights{i, j}.initFcn равными rands.
Для того чтобы фактически инициализировать сеть, т. е. присвоить случайные значения матрицам весов и векторам смещений, необходимо применить функцию init.
Сопутствующие функции: RANDNR, RANDNC, INITWB, INITLAY, INIT.
randnc |
Инициализация случайной матрицы с нормированными столбцами |
Синтаксис:
W = randnc(S,PR)
W = randnc(S,R)
Описание:
Функции семейства randncаналогичны функциямrands, но предназначены только для инициализации весов. К ним возможны 2 формы обращения, которые возвращают случайную матрицу весов размера SR с нормированными столбцами.
Пример:
Сформируем случайный массив из четырех нормированных трехэлементных столбцов:
M = randnc(3,4)
M =
–0.6007 –0.4715 –0.2724 0.5596
–0.7628 –0.6967 –0.9172 0.7819
–0.2395 0.5406 –0.2907 0.2747
Сопутствующие функции: randnr, randS.
randnR |
Инициализация случайной матрицы с нормированными строками |
Синтаксис:
W = randnr(S,PR)
W = randnr(S,R)
Описание:
Функции семейства randnr аналогичны функциям rands, но предназначены только для инициализации весов. К ним возможны 2 формы обращения, которые возвращают случайную матрицу весов размера SR с нормированными строками.
Пример:
Создадим случайную матрицу из трех нормированных четырехэлементных строк:
W = randnr(3,4)
W =
0.9713 0.0800 –0.1838 –0.1282
0.8228 0.0338 0.1797 0.5381
–0.3042 –0.5725 0.5436 0.5331
Сопутствующие функции: randnC, randS.
inITCON |
Функция инициализации равных смещений |
Синтаксис:
b = initcon(S,PR)
Описание:
Функция initconявляется функцией инициализации смещений, которая инициализирует смещения для сети с функцией настройкиlearncon.
Функция b = initcon(S, PR) присваивает значения вектору смещения и имеет следующие входные и выходные аргументы.
Входные аргументы:
S – число нейронов в слое;
PR – матрица размера R2, задающая диапазоны изменения элементов входного вектора, по умолчанию [1 1]'.
Выходной аргумент:
b– вектор смещений размера S1.
Функция initconможет также быть использована для инициализации весов, но применение ее для этой цели не рекомендуется.
Пример:
Начальные значения смещений рассчитаем для слоя с пятью нейронами:
b = initcon(5)
b’ =
1.3591e+001 1.3591e+001 1.3591e+001 1.3591e+001 1.3591e+001
Применение функции:
Функция инициализации initconиспользуется при создании сетей с помощью методаnewc, а также при формировании сетей с атрибутами, определяемыми пользователем.
Для того чтобы подготовить сеть к заданию функции инициализации midpoint, необходимо:
установить свойство сети net.initFcnравным'initlay'. Это автоматически установит свойствоnet.initParamравным пустой матрице [ ], так как функцияinitlayне имеет параметров инициализации;
установить значение свойства net.layers{i}.initFcnравным'initwb';
установить свойство net.biases{i}.initFcnна'initcon'.
Для того чтобы фактически инициализировать сеть, необходимо применить функцию init.
Алгоритм:
Функция learncon модифицирует смещения так, чтобы значение каждого смещенияb(i) являлось функцией среднего значения выхода для нейрона с номеромi. Начальные значения смещений устанавливаются равными
b(i) = exp(1)S.
Сопутствующие функции: INITWB, INITLAY, INIT, LEARNCON.
REVERT |
Возвращение к ранее установленным значениям весов и смещений |
Синтаксис:
net = revert(net)
Описание:
Функция net = revert(net) возвращает веса и смещения к значениям, соответствующим последней процедуре инициализации. Если же изменениям подвергались связи между нейронами или изменялось их количество, то функцияrevertне может восстановить прежних значений и присваивает весам и смещениям нулевые значения.
Сопутствующие функции: INIT, SIM, ADAPT, TRAIN.