Лабораторная работа "Реализация нейронной сети CMAC в Матлаб"
Представлена лабораторная работа по теме "Реализация нейроной сети CMAC в Матлаб", предлагаемая студентам МФТИ и НИУ ВШЭ в рамках курсов "Нейросетевые технологии".
Нейронная сеть CMAC является одним из представителей нейронных сетей прямого распространения, родственна радиально-базисным нейронным сетям. Детальное описание можно найти в источнике [1].
Сеть предназначена для аппроксимации функций нескольких переменных, представляет собой вектор памяти, в котором сохраняются запоминаемые значения аппроксимируемой функции.
Аргументы функции дискретизируются и приводятся к натуральным числам от 1 до Xmax, которые определяют максимальное значение аргумента. Для простоты считается, что xmax=(mu-1)*r+1, где mu - натуральные числа. При невыполнении этого устовия используются несколько большие xmax, которые удовлетворяют этому условию.
Сеть имеет параметр r который влияет на ее аппроксимационные возможности, является некоторым аналогом ширины базисной функции и определяет сколько ячеек памяти активируется для запоминаемого примера аппроксимируемой функции.
Для каждого входа (аргументов) в нейронную сеть активируются r определенных ячеек памяти, выход сети является суммой содержимого активных ячеек памяти.
При обучении выход сети сравнивается с желаемым выходом - значением аппроксимируемой функции, и, если есть ошибка (разность этих двух значений), она добавляется к содержимому активных ячейк памяти в равныз долях, чтобы скомпенсировать эту ошибку.
Поскольку для близких точек (аргументов) наборы активных ячеек памяти пересекаются, то в этом и проявляются аппроксимационные свойства сети (для соседних точек будет только один отличающийся адрес активных ячеек памяти).
Нелинейность сети проявляется в алгоритме рассчета адресов активных ячеек памяти для каждого входа. Сеть отличается простым способом расчета выхода и простой процедурой обучения.
Ниже представлен код этой сети и пример ее использования.
Нейронная сеть CMAC реализована в виде класса CMAC, с методами, похожими на таковые для персептрона из Neural Network Toolbox. Класс СМАС имеет поля для хранения параметров нейронной сети и методы, показанные ниже. Память представлена в виде гиперпараллелепипеда (многомерного массива) и хранится по столбцам. Обучение проводится после каждого предъявления примера, возможно повторять процедуру обучения предъявляя те же примеры.
CMAC.m - файл класса нейронной сети CMAC.
% net=CMAC(r,mu);
%
% Нейронная сеть обладает свойствами:
% r параметр "ро"
% память нейронной сети представляется в виде гиперпараллелепипеда
% со сторонами r, mu(1), mu(2), ..., mu(N)
% mu строка
% xmax строка определяющая максимальные значения координат которые
% может запомнить нейронная сеть
% W собственно память нейронной сети
% MemorySize размер памяти
% trainParam струкутра дополнительных параметров для обучения
% trainParam.epochs количество эпох обучения
% trainParam.tol заданная точность
% Далее под L понимается количество примеров, под N размерность входов.
Реализованы методы:
- Конструктор, создающий объект СМАС: net=CMAC(r,xmax)
- Симуляция сети (расчет выхода по заданному входу): [z]=sim(net,P)
z - выход, строка 1*L; P - вход, матрица N*L, столбцы интерпретируются как примеры.
- Расчет адресов активных ячеек памяти c=active(net,P)
с - номера активных ячеек для заданного входа, матрица r*L, P - вход, матрица N*L
- Обучение нейронной сети, net1=train(net,P,T)
возвращает net1 объект класса CMAC с обученной памятью. P - вход, матрица N*L, T - указания учителя, строка 1*L.
Представлен пример использования сети на примере из книжки "Хайкин. Нейронные сети." для классификации на два класса, файл Haykin.m
1) Создается нейронная сеть нужной конфигурации.
2) Генерируются (случайно) примеры для обучающего множества (функция getHaykinSet.m см. рисунок).
3) Добавляется шум в указания учителя, когда для части примеров указан неверный класс (с помощью функции Markovtransition2.m, можно задать долю неверных примеров).
4) Вход дискретизируется, приводится к натуральным числам от 1 до xmax и обучается нейронная сеть на этих зашумленных данных.
5) Генерируются данные для проверки сети.
5) Рассчитывается выход нейронной сети, который интерпретируется как класс №1 если выход меньше 1.5 и класс №2 если выход больше или равен 1.5.
6) Отображаются графики (функция plotHaykin.m) и рассчитывается ошибка (доля неверно распознанных примеров).
На рисунке 1 показан пример для r=8, xmax = 129 по обоим координатам (объем необходимой памяти - 2312 ячеек). В обучении использовалось 10 000 примеров, в тесте - 100 000. Шум - 20%. (слева - обучающие примеры, справа результат классификации).
На рисунке 2 тот же пример для r=16, шум 10% (объем необходимой памяти 1296 - ячеек).
Аппроксимационные свойства сети невысоки, однако сеть отличается высокой скоростью работы и обучения.
Комментарии