- •В. Г. Потемкин
- •Предисловие
- •Введение
- •Используемые обозначения
- •Часть 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
- •Предметный указатель
- •Литература Книги на английском языке:
- •Книги на русском языке:
- •Оглавление
Архитектура сети
Архитектура LVQ-сети, предназначенной для классификации входных векторов, показана на рис. 7.17.
Рис. 7.17
LVQ-cеть имеет 2 слоя: конкурирующий и линейный. Конкурирующий слой выполняет кластеризацию векторов, а линейный слой соотносит кластеры с целевыми классами, заданными пользователем.
Как в конкурирующем, так и в линейном слое приходится 1 нейрон на кластер или целевой класс. Таким образом, конкурирующий слой способен поддержать до S1 кластеров; эти кластеры, в свою очередь, могут быть соотнесены с S2 целевыми классами, причем S2 не превышает S1. Например, предположим, что нейроны 1–3 конкурирующего слоя определяют 3 кластера, которые принадлежат к одному целевому классу #2 линейного слоя. Тогда выходы конкурирующих нейронов 1–3 будут передаваться в линейный слой на нейрон n2 с весами, равными 1, а на остальные нейроны с весами, равными 0. Таким образом, нейрон n2 возвращает 1, если любой из трех нейронов 1–3 конкурирующего слоя выигрывает конкуренцию.
Короче говоря, единичный элемент в i-й строке вектораa1(остальные элементыa1нулевые) однозначно выберетi-й столбец матрицы весовLW21в качестве выхода сети.При этом каждый столбец, в свою очередь, содержит единственный элемент, равный 1, который указывает принадлежность к классу. Таким образом, кластер с номером 1 из слоя 1 может оказаться отнесенным к различным классам в зависимости от значения произведения LW21a1.
Поскольку заранее известно, как кластеры первого слоя соотносятся с целевыми классами второго слоя, то это позволяет заранее задать элементы матрицы весов LW21. Однако чтобы найти правильный кластер для каждого вектора обучающего множества, необходимо выполнить процедуру обучения сети.
Создание сети
В ППП NNT для создания LVQ-сетей предусмотрена М-функция newlvq, обращение к которой имеет следующий вид:
net = newlvq(PR,S1,PC,LR,LF)
где PR – массив размера R2 минимальных и максимальных значений для R элементов вектора входа; S1 – количество нейронов конкурирующего слоя; PC – вектор с S2 элементами, определяющими процентную долю принадлежности входных векторов к определенному классу; LR – параметр скорости настройки (по умолчанию 0.01); LF – имя функции настройки (по умолчанию для версии MATLAB 5 – 'learnlv2', для версии MATLAB 6 – 'learnlv1').
Предположим, что задано 10 векторов входа и необходимо создать сеть, которая, во-первых, группирует эти векторы в 4 кластера, а во-вторых, соотносит эти кластеры с одним из двух выходных классов. Для этого следует использовать LVQ-сеть, первый конкурирующий слой которой имеет 4 нейрона по числу кластеров, а второй линейный слой – 2 нейрона по числу классов.
Зададим обучающую последовательность в следующем виде:
P = [–3 –2 –2 0 0 0 0 2 2 3;
0 1 –1 2 1 –1 –2 1 –1 0];
Tc = [1 1 1 2 2 2 2 1 1 1];
Из структуры обучающей последовательности следует, что 3 первых и 3 последних ее вектора относятся к классу 1, а 4 промежуточных – к классу 2. На рис. 7.18 показано расположение векторов входа.
I1 = find(Tc==1); I2 = find(Tc==2);
axis([–4,4,–3,3]), hold on
plot(P(1,I1),P(2,I1),’+k’)
plot(P(1,I2),P(2,I2),’xb’) % Рис.7.18
Рис. 7.18
Векторы, относящиеся к разным классам, отмечены разными символами. Как следует из расположения векторов, классы не являются линейно отделимыми, и задача не может быть решена с использованием, например, персептрона.
Преобразуем вектор индексов Tc в массив целевых векторов:
T = full(ind2vec(Tc))
T =
1 1 1 0 0 0 0 1 1 1
0 0 0 1 1 1 1 0 0 0
Процентные доли входных векторов в каждом классе равны 0.6 и 0.4 соответственно. Теперь подготовлены все данные, необходимые для вызова функции newlvq. Вызов может быть реализован c использованием следующего оператора
net = newlvq(minmax(P),4,[.6 .4],0.1);
net.layers{1} ans = dimensions: 4 distanceFcn: 'dist' distances: [44 double] initFcn: 'initwb' netInputFcn: 'netsum' positions: [0 1 2 3] size: 4 topologyFcn: 'hextop' transferFcn: 'compet' userdata: [11 struct] |
net.layers{2} ans = dimensions: 2 distanceFcn: 'dist' distances: [22 double] initFcn: 'initwb' netInputFcn: 'netsum' positions: [0 1] size: 2 topologyFcn: 'hextop' transferFcn: 'purelin' userdata: [11 struct] |