МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ «УДМУРТСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ» ФИЛИАЛ «УдГУ» в г. ВОТКИНСКЕ «УТВЕРЖДАЮ» Зам. директора по УМР ____________Т.М. Смирнова «24» мая 2018г. МЕТОДИЧЕСКОЕ ПОСОБИЕ по курсу «Нечеткая логика и нейронные сети» “ИЗУЧЕНИЕ И СОЗДАНИЕ НЕЙРОННЫХ СЕТЕЙ В СИСТЕМЕ MATLAB” Воткинск 2017 ББК 32.81р30 УДК 005 М54 Составители: к.т.н., доцент Кучерова Е.А. Методическое пособие по курсу «Нечеткая логика и нейронные сети» «Изучение и создание нейронных сетей в системе MATLAB». – Воткинск, 2017. – 32 с. Методические указания составлены для студентов, обучающихся по направлению «Прикладная информатика» и «Бизнес-информатика». Материалы данной разработки могут оказаться полезными при выполнении лабораторных, практических и курсовых работ или дипломных проектов. Методические указания составлены на основе требований действующего образовательного стандарта высшего профессионального образования по направлению «Прикладная информатика» и «Бизнес-информатика». © Е.А. Кучерова Оглавление 1 Общие сведения .................................................................................................... 4 1.1 Введение в нейронные сети .......................................................................... 4 1.2 2 Работа нейронной сети ............................................................................... 7 Система Matlab .................................................................................................. 9 2.1 Знакомство с системой Matlab ...................................................................... 9 2.2 Графический интерфейс NNTool в системе Matlab ................................. 11 3. Создание нейронной сети в графическом интерфейсе NNTool ................... 13 3.1 Нейронная сеть с прямой передачей сигнала и обратным распространением ошибки. ............................................................................... 13 3.2 Нейронная сеть в виде персептрона, для разделения векторов на классы .................................................................................................................. 20 4 Создание нейронной сети в командном режиме ............................................. 23 4.1 Обобщенно-регрессионная нейронная сеть .............................................. 23 4.2 Нейронная сеть с радиальными базисными элементами. ........................ 24 4.3 Линейная нейронная сеть ............................................................................ 25 5 Создание нейронной сети с помощью Simulink .............................................. 26 5.1 Средства Simulink для работы с нейронными сетями .............................. 26 5.2 Создание нейронной сети в Simulink ......................................................... 27 Заключение ............................................................................................................ 31 Список источников ............................................................................................... 32 1 Общие сведения 1.1 Введение в нейронные сети Нейронные сети – это одно из направлений исследований в области искусственного интеллекта, основанное на попытках воспроизвести нервную систему человека. А именно: способность нервной системы обучаться и исправлять ошибки, что должно позволить смоделировать, хотя и достаточно грубо, работу человеческого мозга. Искусственная нейронная сеть - это набор нейронов, соединенных между собой. Как правило, передаточные функции всех нейронов в нейронной сети фиксированы, а веса являются параметрами нейронной сети и могут изменяться. Некоторые входы нейронов помечены как внешние входы нейронной сети, а некоторые выходы - как внешние выходы нейронной сети. Подавая любые числа на входы нейронной сети, мы получаем какой-то набор чисел на выходах нейронной сети. Таким образом, работа нейронной сети состоит в преобразовании входного вектора в выходной вектор, причем это преобразование задается весами нейронной сети. Схема нейрона показана на рисунке 1. 1) Дендриты, отростки по которым нейрон получает возбуждение 2) Веса нейрона 3) Синапсы 4) Аксон, выходной отросток Рисунок 1 Нейрон У нейронных сетей много важных свойств, но ключевое из них – это способность к обучению. Обучение нейронной сети в первую очередь заключается в изменении «силы» синаптических связей между нейронами. Следующий пример наглядно это демонстрирует. В классическом опыте Павлова, каждый раз непосредственно перед кормлением собаки звонил колокольчик. Собака достаточно быстро научилась ассоциировать звонок колокольчика с приемом пищи. Это явилось следствием того, что синаптические связи между участками головного мозга, ответственными за слух и слюнные железы, усилились. И в последующем возбуждение нейронной сети звуком колокольчика, стало приводить к более сильному слюноотделению у собаки. Преимущества нейронных сетей: 1. Универсальность. Нейронные сети не зависят от свойств входных данных, для них не существует требования к определенному типу распределения исходных данных, либо требования к линейности целевых функций. 2. Не существует проблемы «проклятия размерности». Они способны моделировать зависимости в случае большого числа переменных. 3. В отличие от статистических исследований не требуют большого объема данных. 4. Ускоряют процесс нахождения зависимости за счет одновременной обработки данных всеми нейронами. Простая схема нейронной сети показана на рисунке 2. Рисунок 2 Схема нейронной сети 1.2 Работа нейронной сети Искусственный нейрон имитирует в первом приближении свойства биологического нейрона. На вход искусственного нейрона поступает некоторое множество сигналов, каждый из которых является выходом другого нейрона. Каждый вход умножается на соответствующий вес, и все произведения суммируются, определяя уровень активации нейрона. Хотя сетевые парадигмы весьма разнообразны, в основе почти всех их лежит эта конфигурация. Здесь множество входных сигналов, поступает на искусственный нейрон. Эти входные сигналы, в совокупности, обозначаемые вектором X, соответствуют сигналам, приходящим в синапсы биологического нейрона. Каждый сигнал умножается на соответствующий вес w1, w2,..., wn, и поступает на суммирующий блок. Каждый вес соответствует "силе" одной биологической синаптической связи. (Множество весов в совокупности обозначается вектором W.) Суммирующий блок, соответствующий телу биологического элемента, складывает взвешенные входы алгебраически, создавая выход NET. NET = XW. Далее сигнал NET, как правило, преобразуется активационной функцией F и дает выходной нейронный сигнал OUT. Активационная функция может быть обычной линейной функцией OUT = K(NET), где К - постоянная, пороговой функции или же является функцией, более точно моделирующей нелинейную передаточную характеристику биологического нейрона и представляющей нейронной сети большие возможности. Самая широко используемая это сигмоидальная функция, но еще используются кусочно-линейная и функция Гаусса. Схема работы искусственного нейрона В нейрон поступают внешние данные на дендриты Каждый сигнал умножается на соответствующий вес на w1,w2,..wn, И поступает на суммирующий блок Суммирующий блок складывает взвешенные входы. NET= XW Сигнал NET преобразуется активационной функцией. OUT=K(NET), Где К- постоянная пороговой функции OUT=1, если NET>T OUT=0 В остальных случаях Рисунок 3 Схема работы сети Обучение нейронной сети происходит следующим образом: Существующие данные Сеть обучена Ошибка мала Выбор примера из них Ответ сети Применение нейроннй сети Расчет ошибки Ошибка велика Подстройка весов сети Рисунок 4 Схема обучения сети 2 Система Matlab 2.1 Знакомство с системой Matlab Для данной работы нам понадобится компьютер с установленным на него программным комплексом Matlab версии 6 или выше. Рисунок 5 Рабочий стол Описанный рабочий стол появляется при запуске Matlab. Он содержит окно рабочей области, окно истории команд, командное окно. Командное окно предназначено для работы с переменными, файлами и функциями системы Matlab. Окно истории команд содержит строки операторов, которые вводились в командном окне с начала сеанса. Окно рабочей области содержит список переменных (именованные массивы), накопленных в памяти во время работы, расширение списка переменных при обращении к функциям. После завершения сеанса работы данные в рабочей области не сохраняются, и пользователь должен предусмотреть их сохранение в виде файла. Это реализуется с помощью контекстного меню Save Workspace as… , либо с помощью команды Save. Так же в систему Matlab входит подсистема справки Help на английском языке. 2.2 Графический интерфейс NNTool в системе Matlab Данный командному графический окну системы интерфейс Matlab, позволяет, выполнять не обращаясь создание, к обучение, моделирование, а так же импорт и экспорт нейронных сетей и данных, используя только инструментальные возможности этого интерфейса. Интерфейс NNTool допускает работу только с простыми однослойными и двухслойными нейронными сетями, но при этом пользователь выигрывает во времени и эффективности освоения новых объектов. Вызов графического интерфейса NNTool производится командой nntool в командной строке, либо из окна запуска приложений Launch Pad с помощью опции NNTool из раздела Neural Network Toolbox. После вызова появляется окно, показанное на рисунке 6. Рисунок 6 Интерфейс NNTool Здесь: 1) Кнопка Help – вызов справки 2) New Data…- вызов окна формирования данных 3) New Network – создание новой нейронной сети 4) Import – загрузка данных 5) Export – запись данных Кнопки View, Delete, Initialize…,Simulate…,Train…, Adapt… становятся активными только после создания и активизации нейронной сети. 3. Создание нейронной сети в графическом интерфейсе NNTool 3.1 Нейронная сеть с прямой передачей сигнала и обратным распространением ошибки. Создадим, используя графический интерфейс пользователя, нейронную сеть, которая вычисляет операцию y x , при задании вектора входа 2 X= [-1 -0.8 -0.5 -0.2 0 0.1 0.3 0.6 0.9 1] И вектора цели Y= [1 0.64 0.25 0.04 0 0.01 0.09 0.36 0.81 1] Для открытия основного интерфейса необходимо в командном окне ввести команду >>nntool Выполнение команды приведет к открытию окна Network/Data Manager(Рис. 6) Сформируем последовательность входов и целей в рабочей области GUI-интерфейса, используя окно Create New Data. С этой целью сначала нажмем кнопку New Data, далее в поле Name окна Create New Data введем сначала имя переменной X, затем в области значений Value вектор значений [-1 - 0.8 - 0.5 - 0.2 0 0.1 0.3 0.6 0.9 1] и, используя кнопки выбора типа данных (в правой части окна), укажем тип переменных (Inputs — Входы). Ввод завершим нажатием кнопки Create. Аналогичную операцию проделаем для вектора Y, с указанием (с помощью кнопки Targets), что это — вектор целевых данных. Создадим новую нейронную сеть. Для этого в окне Network/Data Manager нажмем кнопку New Network. В открывшемся окне Create New Network(рисунок 7) выберем нейронную сеть типа feed-forward backprop с прямой передачей сигнала и с обратным распространением ошибки. При создании сети сохраним ей имя, даваемое по умолчанию (network1). Диапазон входов определим (в окне Create New Network) с помощью опции Get from input. Количество нейронов (Number of neurons) первого слоя (Layer 1) установим равным двум. Остальные установки при создании сети оставим по умолчанию. Создание сети завершим нажатием кнопки Create. Рисунок 7 Создание нейронной сети После этого в окне Network/Data Manager, в области Networks появится имя новой созданной сети — network1. Выберем это имя с помощью мышки, что приведет к активизации всех кнопок указанного окна. Выполним инициализацию сети, с помощью кнопки Initialize... Это приведет к открытию диалоговой панели Network: network1(Рис.8). Рисунок 8 Инициализация сети Для установления диапазонов входа и инициализации весов используем кнопки Set Ranges и Initialize Weights. Если требуется вернуться к прежним диапазонам, то следует выбрать кнопки Revert Ranges (Вернуть диапазоны) и Revert Weights (Вернуть веса), но в условиях примера это не нужно. Для обучения созданной сети, выбирается закладка Train в панели Network: network1 и открывается новая диалоговая панель (рисунок 9). Рисунок 9 Обучение нейронной сети Панель имеет три закладки: 1) Training Info (Информация об обучении); 2) Training Parameters (Параметры обучения); 3) Optional Info (Дополнительная информация). Применяя эти закладки, можно установить имена последовательностей входа и цели (на вкладке Training Info — в левой ее части необходимо указать X и Y), а также значения параметров процедуры обучения (на вкладке Training Parameters; в условиях примера сохраним значения по умолчанию). На вкладке Optional Info следует указать переменные X и Y в качестве проверочных и контрольных данных (Validation Data и Test Data)(Рисунок 10). Рисунок 10 Окно дополнительной информации Далее нажимаем кнопку Train Network, что вызовет обучение сети. Качество обучения сети можно посмотреть на графике во время обучения. По оси Y отображается среднеквадратическая ошибка, а по оси X – итерации обучения. Результаты обучения можно просмотреть в окне Network/Data Manager, активизируя имена последовательностей выходов network1_outputs или ошибок network1_errors, и используя кнопку View. Следует отметить, что в данном случае точность вычислений заданной функции получилась не очень высокой — максимальная абсолютная погрешность составляет 0.055, в чем можно убедиться, просмотрев значения ошибок (network1_errors) или выходов (network1_outputs) сети. Заметим, что точность вычислений здесь можно было бы повысить, создавая сеть с большим числом нейронов, но при этом необходима и более представительная обучающая выборка. Для просмотра структурной схемы сети необходимо, выбрав имя сети (network1), воспользоваться кнопкой View. Рисунок 11 Схема созданной сети Дальше экспортируем созданную нейронную сеть в рабочую область системы MATLAB (нажав кнопку Export и далее, в открывшемся окне Export or Save from Network/Data Manager, — кнопки Select All и Export) . Получить информацию о весах и смещениях в рабочем окне системы можно выполнив команду: >> network1.IW{1,1},network1.b{1} И команду: >> network1.IW{2,1},network1.b{2} Теперь можно построить модель НС в среде Simulink и отобразить ее схему, используя команду: >> gensim(network1) Эта схема является в полной мере функциональной схемой и может быть применена для моделирования нейронной сети. Двойной щелчок на блоке Neural Network раскрывает слои сети, а двойной щелчок на блоке слоя сети раскрывает его структуру. Рисунок 12 Структура сети 3.2 Нейронная сеть в виде персептрона, для разделения векторов на классы Создадим нейронную сеть в виде персептрона, который разделяет векторы входа на два класса. Обозначим эти классы как 0 и 1. Сформируем обучающую последовательность в виде двух массивов ячеек: массив входов: P = {[2;2][1;2][-2;2][-1;1][1;-2]} и массива целей: T = {0 0 1 1 1}, который задает принадлежность каждого вектора входа к определенному классу. Целесообразнее будет выполнить ввод данных в рабочей области системы Matlab, а затем импортировать их в рабочую область интерфейса NNTool(рисунок 13). Рисунок 13 Импорт данных в интерфейс NNTool Зададим нейронную сеть как персептрон с одним нейроном, функцией активации HARDLIM и правилом настройки LEARNP. Для этого в настройках создания сети выберем тип сети perceptron и зададим требуемые параметры (рисунок 14). Рисунок 14 Создание нейронной сети Теперь выполним инициализацию сети, используя закладку Initialize, а затем адаптацию и настройку параметров сети, используя вкладку Adapt окна Network. Для этого следует указать имена входа и цели, а так же задать количество циклов адаптации, во вкладке Adaption Parameters (в данном случае достаточно трех циклов) (рис 15), и нажать кнопку Adapt. Рисунок 15 Адаптация нейронной сети В результате настройки будут установлены следующие значения весов и смещений, которые можно увидеть, выбрав вкладку Weights. Для данной сети вектор весов будет равен IW{1;1} = [-3;-2], а вектор смещения b{1} = 1. Перейдя в окно Network/Data Manager, можно посмотреть значения сигналов на выходе и ошибку сети (рисунок 16). Не трудно убедиться, что на обучающей последовательности сеть обучена точно классифицировать входные векторы. Рисунок 16 Значения выхода и ошибки Знакомство с возможностями графического интерфейса NNTool позволяет сделать вывод, что это средство может быть весьма полезным на начальной стадии изучения и сравнительного анализа нейронных сетей. 4 Создание нейронной сети в командном режиме 4.1 Обобщенно-регрессионная нейронная сеть Выполним исследование нейронной сети для аппроксимации выбранной функции, используя функции пакета Neural Networks Toolbox . В состав пакета входит более 160 различных функций, дающих возможность создавать, обучать и исследовать нейронные сети. Для выполнения работы необходимо запустить MATLAB и перейти в командное окно. Создадим обобщенно-регрессионную НС (сеть типа GRNN) с именем а, реализующую функциональную зависимость между входом и выходом вида y x 2 на отрезке [-1, 1], используя следующие экспериментальные данные: x = [-1 -0.8 -0.5 -0.2 0 0.1 0.3 0.6 0.9 1], у = [1 0.64 0.25 0.04 0 0.01 0.09 0.36 0.81 1]. Проверку качества восстановления приведенной зависимости осуществим, используя данные контрольной выборки x1 = [-0.9 -0.7 -0.3 0.4 0.8], которым соответствуют значения y1 = [0.81 0.49 0.09 0.16 0.64]. Процедура создания и использования данной НС описывается следующим образом: >> x= [-1 -0.8 -0.5 -0.2 0 0.1 0.3 0.6 0.9 1]; % Задание входных значений >> у = [1 0.64 0.25 0.04 0 0.01 0.09 0.36 0.81 1]; % Задание целевых значений >> a=newgrnn(х,у,0.01); % Создание нейронной сети с отклонением 0.01 >> Y1 = sim(а,[-0.9 -0.7 -0.3 0.4 0.8]) % Опрос нейронной сети Y1 = 0.8200 0.6400 0.0400 0.0900 0.8100 Как видно, точность аппроксимации в данном случае получилась не очень высокой — максимальная относительная погрешность аппроксимации составляет 30,61 %. 4.2 Нейронная сеть с радиальными базисными элементами. Можно попытаться улучшить качество аппроксимации за счет подбора величины отклонения, но в условиях примера приемлемый результат легко достигается при использовании сети с радиальными базисными элементами типа newrbe: >> a=newrbe(х,у); >>Yl = sim(a,[-0.9 -0.7 -0.3 0.4 0.8]) % Опрос НС Y1 = 0.8100 0.4900 0.0900 0.1600 0.6400 Нетрудно видеть, что применение сети типа newrb приводит здесь не просто к интерполяции заданных обучающей выборкой значений, а действительно к точному восстановлению заданной зависимости — по крайней мере, для использованных точек контрольной последовательности. Созданную сеть можно сохранить для последующего использования набором в командной строке команды save ('а'); при этом будет создан файл a.mat, то есть файл с именем НС и расширением mat. В последующих сеансах работы эту сеть можно загрузить, используя функцию load (' а'). 4.3 Линейная нейронная сеть Рассмотрим теперь задачу восстановления некоторой, вообще говоря, неизвестной зависимости по имеющимся экспериментальным данным с использованием линейной НС. Пусть экспериментальная информация задана значениями x = [1.0 1.5 3.0 -1.2], у = [0.5 1.1 3.0 -1.0]. Создадим векторы входа и целей: >> x = [1.0 1.5 3.0 -1.2]; >> у = [0.5 1.1 3.0 -1.0]; Теперь создадим линейную нейронную сеть: >> b=newlind(х,у); % Создание линейной НС с именем b Проведем опрос сети для значения входа, равного 3.0 (этому, согласно экспериментальным данным, соответствует целевое значение 3.0): >> y1 = sim(b, 3.0) % Опрос сети y1 = 2.7003 Погрешность восстановления по данным обучающей выборки в данном случае - 10%. Отметим, что в условиях примера дать какую-либо оценку предельной величине погрешности аппроксимации невозможно, особенно для значений входов, выходящих за пределы диапазона входов обучающей последовательности. К сожалению, это является характерной особенностью нейросетевых моделей. Для подавляющего числа задач, решаемых с помощью аппарата нейронных сетей ˗ не только для задач классификации или прогноза ˗ каких - либо вероятностных оценок точности получаемых решений получить не удается. 5 Создание нейронной сети с помощью Simulink 5.1 Средства Simulink для работы с нейронными сетями Пакет Neural Network Toolbox содержит ряд блоков, которые могут быть либо непосредственно использованы для построения нейронных сетей в среде Simulink, либо применяться вместе с рассмотренной выше функцией gensim. Для вызова этого набора блоков в командной строке необходимо набрать команду neural, после выполнения которой появляется окно (рисунок 17)(этого же результата можно добиться с помощью кнопки Simulink меню MATLAB и далее — кнопки Neural Network Blockset). Рисунок 17 Simulink Каждый из нейросетевых блоков, в свою очередь, является набором (библиотекой) некоторых блоков. Рассмотрим их. Двойной щелчок на блоке Transfer Functions приводит к появлению библиотеки блоков функций активации. Каждый из блоков данной библиотеки преобразует подаваемый на него вектор в соответствующий вектор той же размерности. Блок Net Input Functions включает блоки, реализуют функции преобразования входов сети. Блок Weight Functions содержит библиотеку блоков, реализующих некоторые функции весов и смещений. Отметим, что в процессе работы со всеми приведенными блоками при задании конкретных числовых значений ввиду особенностей Simulink векторы необходимо представлять как столбцы, а не как строки. Блоки, объединенные в библиотеку Control Systems реализуют нейросетевые регуляторы трех различных структур — регулятор с предсказанием, регулятор, основанный на использовании модели нелинейной авторегрессии со скользящим средним, и регулятор на основе эталонной модели, которые удобны при построении и исследовании моделей систем автоматического управления, а также блок просмотра результатов. 5.2 Создание нейронной сети в Simulink Основной функцией для формирования нейросетевых моделей в Simulink является функция gensim, записываемая в форме >>gensim(net,st) где net — имя созданной нейронной сети, st — интервал дискретизации (если нейронная сеть не имеет задержек, ассоциированных с ее входами или слоями, значение данного аргумента устанавливается равным -1). В качестве использования средств Simulink рассмотрим следующий пример. Пусть входной и целевой векторы имеют вид p= [1 2 3 4 5] ; t=[1 3 5 7 9]; Создадим линейную нейронную сеть и протестируем ее по данным обучающей выборки: >> р = [1 2 3 4 5] ; >> t = [1 3 5 7 9] ; >> net = newlind(р,t); >> Y = sim(net,p) У= 1.0000 3.0000 5.0000 7.0000 9.0000 Затем запустим Simulink командой >> gensim(net,-1) Это приведет к открытию окна с нейросетевой моделью (Рисунок 18). Рисунок 18 Нейросетевая модель Для проведения тестирования модели щелкнем дважды на левом значке (с надписью Input 1 — Вход 1), что приведет к открытию диалогового окна параметров блока. Изменим значение по умолчанию на 2 и нажмем кнопку ОК. Затем нажмем кнопку Start в панели инструментов окна модели. Расчет нового значения сетью производится практически мгновенно. Для его вывода необходимо дважды щелкнуть на правом значке (на блоке у(1)). Рисунок 19 Результат вычислений Результат вычислений равен 3, как и требуется, и выводится в виде графика. Отметим, что дважды щелкая на блоке Neural Network, а затем на блоке Layer 1, можно получить детальную графическую информацию о структуре сети (рисунок 20). Рисунок 20 Структура сети С созданной сетью можно проводить различные эксперименты. Вообще, с помощью команды gensim осуществляется интеграция созданных нейронных сетей в блок-диаграммы этого пакета с использованием имеющихся при этом инструментов моделирования различных систем. Заключение Нейронные сети являются мощным аппаратом оценки, управления, анализа и моделирования. Нейронные сети не являются панацеей, во многих случаях более эффектным будет использование традиционных методов статистики. Несмотря на это во многих областях нейронные сети зарекомендовали себя как более рациональное решение и требуются дальнейшие исследования в данной области. Список источников 1 Портал искусственного интеллекта. Нейронные сети http://www.aiportal.ru/articles/neural-networks/ 1 Моделирование нейронных сетей в Matlab Федотов А.В. 2 Дьяконов В.П., Круглов В.В. MATLAB 6.5 SP1/7/7 SP1/7 SP2 + Simulink 5/6. Инструменты искусственного интеллекта. – М.: СОЛОН-ПРЕСС, 2006. 3 Медведев В.С., Потемкин М.Г. Нейронные сети Matlab 6/ под общ. ред. В.Г.Потемкина. - М/ДИАЛОГ-МИФИ, 2002