Моделирование нейрона и персептрона в MatLab

0

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

(СГУГиТ)

Кафедра наносистем и оптотехники

 

 

 

Отчет по лабораторной работе

По предмету: Технологии и системы ИИ

на тему: Моделирование нейрона и персептрона в MatLab

 

 

                                         Выполнил: ст. гр. ОЗИ-41

Матясов А.Ю.

                                             Проверил: Сырецкий Г.А.

 

 

 

 

Новосибирск-2015

 

 

Цель работы: освоить принципы создания и обучения прогнозирующей модели в виде нейронной сети для поддержки принятия решений, изучить возможности пакета MatLab для построения нейронных сетей.

 

 

  • Теоретические сведения

Введение в искусственные нейронные сети

    Искусственные нейронные сети (artificial neural networks, ANN) – это одно из научных направлений, в основе которого лежит идея создания искусственных интеллектуальных устройств по образу и подобию человеческого мозга.

    Мозг человека состоит из белого и серого вещества: белое – это тела нейронов, а серое – соединяющие их нервные волокна. Каждый нейрон состоит из трех частей: тела клетки, дендритов и аксона.

    Нейрон получает информацию через свои дендриты, а передает её дальше через аксон, разветвляющийся на конце на тысячи синапсов – нервных нитей, соединяющих нейроны между собой.

    Каждый нейрон может существовать в двух состояниях – возбужденном и невозбужденном. В возбужденное состояние нейрон переходит под воздействием электрических сигналов, поступающих к нему от других нейронов, когда эти воздействия становятся достаточно большими. В возбужденном состоянии нейрон сам посылает электрический сигнал другим соединенным с ним нейронам. После возбуждения наступает период релаксации – некоторое время нейрон не способен генерировать новые импульсы. Благодаря этому клетки мозга работают по тактам, наподобие дискретных автоматов, а сеть нейронов в целом передает направленную волну импульсов. Таким образом, элементарной ячейкой мозга является нейрон. Взаимосвязь нейронов в нейронную сеть образуют сложную структуру – сеть, позволяющую решать сложные задачи классификации и распознавания образов.

 

 

 

Математическая модель нейрона

         В 1943 году МакКаллок и Питтс предложили математическую модель нейрона – абстрактного устройства, моделирующего нейрон мозга человека (рис 1.1).

Рисунок 1.1 Математическая модель нейрона

Мак-каллока и Питтса

         Математический нейрон (рис 1.1) имеет несколько входов и один выход. От n входов математический нейрон принимает входные сигналы
, которые суммируют, умножая каждый входной сигнал на некоторый весовой коэффициент :

                        (1.1)

Выходной сигнал нейрона y может принимать одно из двух значений – нуль или еденицу, которые формируются на основании логической функции

                   (1.2)

Где bпорог чувствительности (скалярное смещение) нейрона.

         Если взвешенная сумма входных сигналов s не достигает некоторой пороговой величины b, то математический нейрон не возбужден и его выходной сигнал равен нулю. Если же входные сигналы достаточно интенсивны и их сумма достигает порога чувствительности b, то нейрон переходит в возбужденное состояние и на его выходе образуется сигнал y=1. Весовые коэффициенты имитируют электропроводность нервных волокон – силу синаптических связей между нейронами. Чем они выше, тем больше вероятность перехода нейрона в возбужденное состояние.

         Величину порога b можно представить как единичный вход с весовым коэффициентом . Тогда модель нейрона примет вид, показанный на рис. 1.2.

Рис. 1.2. Математическая модель нейрона

Структура нейрона, представленная на рис. 1.2. является развернутой. При рассмотрении нейрона, состоящего из большого числа нейронов, целесообразно использовать укрупненную структурную схему нейрона через векторное представление.

Рис. 1.3. Математическая модель нейрона через векторное представление

        

         Исходя из векторного представления (рис 1.3), уравнение нейрона примет вид:

                 (1.3)

Где φ = активационная функция нейрона

(1.4)

         Если вход функции активации , то нейрон возвращает 1, если

         Функция активации с жесткими ограничениями придает нейрону способность классифицировать векторы входы, разделяя пространство входов на две области, как это показано на рис 1.4, для нейрона с двумя входами при условии

         Пространство входов нейрона разделяется прямой линией, положений и наклон определяются значениями весовых коэффициентов и и величиной порога согласно уравнению:

         (1.5)

Для всех точек плоскости лежащих на этой линии, выполняется равенство v=0, и поэтому вследствие (1.4), выход нейрона равен единице. Для точек, лежащих выше указанной линии, выход нейрона равен единице, а для точек, лежащих ниже этой линии, выход персептрона равен нулю. Поэтому линию, изображающую уравнение (1.5), называют пороговой прямой.

Рис 1.4 разделение пространства входов

При различной величине порога

Искусственный нейрон может реализовывать различные типы булевых (логических) функций. Так, математический нейрон, имеющий два входа с единичными силами синаптических связей согласно формулам (1.1) – (1.4) реализуют функцию логического умножения «И» при Покажем это.

,

         Из выражения (1.4) и таблицы истинности для операции конъюнкции следует:

 

Пространство входов будет разделено в этом случае, так как показано на графике

Рис 1.5. разделение пространства входов в математической модели нейрона при реализации логического умножения с параметрами весов

 

 

Теоретические сведения об NNTool MatLab

Основы теории и технологии применения NN (NN - Neural Networks) широко представлены в пакете MATLAB. Следует отметить версию пакета MATLAB 6.0, где впервые представлен GUI (Graphical User Interface - графический интерфейс пользователя) для NN - NNTool.

 

Графический интерфейс пользователя NNTool позволяет выбирать структуры NN из обширного перечня и предоставляет множество алгоритмов обучения для каждого типа сети.

В статье рассмотрены следующие вопросы, относящиеся к работе с NNTool:

  • назначение графических управляющих элементов;
  • подготовка данных;
  • создание нейронной сети;
  • обучение сети;
  • прогон сети.

Все этапы работы с сетями проиллюстрированы примерами решения простых задач. Как и в предыдущих статьях проекта "MATLAB для DSP", предполагается, что читатель знаком с основами теории NN и её терминологией.

Управляющие элементы NNTool

Чтобы запустить NNTool, необходимо выполнить одноимённую команду в командном окне MATLAB:

>> nntool

после этого появится главное окно NNTool, именуемое "Окном управления сетями и данными" (Network/Data Manager) (рис. 1).

Рисунок 1. Главное окно NNTool

 

Панель "Сети и данные" (Networks and Data) имеет функциональные клавиши со следующими назначениями:

  • Помощь (Help)- краткое описание управляющих элементов данного окна;
  • Новые данные (New Data…)- вызов окна, позволяющего создавать новые наборы данных;
  • Новая сеть (New Network…)- вызов окна создания новой сети;
  • Импорт (Import…)- импорт данных из рабочего пространства MATLAB в пространство переменных NNTool;
  • Экспорт (Export…)- экспорт данных из пространства переменных NNTool в рабочее пространство MATLAB;
  • Вид (View)- графическое отображение архитектуры выбранной сети;
  • Удалить (Delete)- удаление выбранного объекта.

На панели "Только сети" (Networks only) расположены клавиши для работы исключительно с сетями. При выборе указателем мыши объекта любого другого типа, эти кнопки становятся неактивными.

При работе с NNTool важно помнить, что клавиши View, Delete, Initialize, Simulate, Train и Adapt (изображены на рис. 1 как неактивные) действуют применительно к тому объекту, который отмечен в данный момент выделением. Если такого объекта нет, либо над выделенным объектом невозможно произвести указанное действие, соответствующая клавиша неактивна.

 

Создание нейронной сети, выполняющей логическую функцию «И» и «ИЛИ»

 

Создание сети

Выберем сеть, состоящую из одного персептрона с двумя входами. В процессе обучения сети на её входы подаются входные данные и производится сопоставление значения, полученного на выходе, с целевым (желаемым). На основании результата сравнения (отклонения полученного значения от желаемого) вычисляются величины изменения весов и смещения, уменьшающие это отклонение.

Итак, перед созданием сети необходимо заготовить набор обучающих и целевых данных. Составим таблицу истинности для логической функции "И", где P1 и Р2 - входы, а А - желаемый выход (табл. 1).

Таблица 1. Таблица истинности логической функции "И"

P1

P2

A

0

0

0

0

1

0

1

0

0

1

1

1

Чтобы задать матрицу, состоящую из четырёх векторов-строк, как входную, воспользуемся кнопкой New Data. В появившемся окне следует произвести изменения, показанные на рис. 2, и нажать клавишу "Создать" (Create).

Рисунок 2. Задание входных векторов

 

После этого в окне управления появится вектор data1 в разделе Inputs. Вектор целей задаётся схожим образом (рис. 3).

Рисунок 3. Задание целевого вектора

 

После нажатия на Create в разделе Targets появится вектор target1.

Данные в поле "Значение" (Value) могут быть представлены любым понятным MATLAB выражением. К примеру, предыдущее определение вектора целей можно эквивалентно заменить строкой вида

bitand([0 0 1 1], [0 1 0 1]).

Теперь следует приступить к созданию нейронной сети. Выбираем кнопку New Network и заполняем форму, как показано на рис. 4.

Рисунок 4. Окно "Создание сети"

 

При этом поля несут следующие смысловые нагрузки:

  • Имя сети (Network Name) - это имя объекта создаваемой сети.
  • Тип сети (Network Type)- определяеттип сети и в контексте выбранного типа представляет для ввода различные параметры в части окна, расположенной ниже этого пункта. Таким образом, для разных типов сетей окно изменяет своё содержание.
  • Входные диапазоны (Input ranges)- матрица с числом строк, равным числу входов сети. Каждая строка представляет собой вектор с двумя элементами: первый - минимальное значение сигнала, которое будет подано на соответствующий вход сети при обучении, второй - максимальное. Для упрощения ввода этих значений предусмотрен выпадающий список "Получить из входа" (Get from input), позволяющий автоматически сформировать необходимые данные, указав имя входной переменной.
  • Количество нейронов (Number of neurons)- число нейронов в слое.
  • Передаточная функция (Transfer function)- в этом пункте выбирается передаточная функция (функция активации) нейронов.
  • Функция обучения (Learning function)- функция, отвечающая за обновление весов и смещений сети в процессе обучения.

С помощью клавиши "Вид" (View) можно посмотреть архитектуру создаваемой сети (рис. 5). Так, мы имеем возможность удостовериться, все ли действия были произведены верно. На рис. 5 изображена персептронная сеть с выходным блоком, реализующим передаточную функцию с жёстким ограничением. Количество нейронов в слое равно одному, что символически отображается размерностью вектора-столбца на выходе слоя и указывается числом непосредственно под блоком передаточной функции. Рассматриваемая сеть имеет два входа, так как размерность входного вектора-столбца равна двум.

Рисунок 5. Предварительный просмотр создаваемой сети

 

Итак, структура сети соответствует нашему заданию. Теперь можно закрыть окно предварительного просмотра, нажав клавишу "Закрыть" (Close), и подтвердить намерение создать сеть, нажав "Создать" (Create) в окне создания сети.

В результате проделанных операций в разделе "Сети" (Networks) главного окна NNTool появится объект с именем network1.

Обучение

Наша цель - построить нейронную сеть, которая выполняет функцию логического "И". Очевидно, нельзя рассчитывать на то, что сразу после этапа создания сети последняя будет обеспечивать правильный результат (правильное соотношение "вход/выход"). Для достижения цели сеть необходимо должным образом обучить, то есть подобрать подходящие значения параметров. В MATLAB реализовано большинство известных алгоритмов обучения нейронных сетей, среди которых представлено два для персептронных сетей рассматриваемого вида. Создавая сеть, мы указали LEARNP в качестве функции, реализующей алгоритм обучения (рис. 4).

Вернёмся в главное окно NNTool. На данном этапе интерес представляет нижняя панель "Только сети" (Networks only). Нажатие любой из клавиш на этой панели вызовет окно, на множестве вкладок которого представлены параметры сети, необходимые для её обучения и прогона, а также отражающие текущее состояние сети.

Отметив указателем мыши объект сети network1, вызовем окно управления сетью нажатием кнопки Train. Перед нами возникнет вкладка "Train" окна свойств сети, содержащая, в свою очередь, ещё одну панель вкладок (рис. 6). Их главное назначение - управление процессом обучения. На вкладке "Информация обучения" (Training info) требуется указать набор обучающих данных в поле "Входы" (Inputs) и набор целевых данных в поле "Цели" (Targets). Поля "Выходы" (Outputs) и "Ошибки" (Errors) NNTool заполняет автоматиче-ски. При этом результаты обучения, к которым относятся выходы и ошибки, будут сохраняться в переменных с указанными именами.

 

Рисунок 6. Окно параметров сети, открытое на вкладке "обучение" (Train)

 

Завершить процесс обучения можно, руководствуясь разными критериями. Возможны ситуации, когда предпочтительно остановить обучение, полагая достаточным некоторый интервал времени. С другой стороны, объективным критерием является уровень ошибки.

На вкладке "Параметры обучения" (Training parameters) для нашей сети (рис. 7) можно установить следующие поля:

  • Количество эпох (epochs)- определяет число эпох (интервал времени), по прошествии которых обучение будет прекращено.
  • Эпохой называют однократное представление всех обучающих входных данных на входы сети.
  • Достижение цели или попадание (goal)- здесь задаётся абсолютная величина функции ошибки, при которой цель будет считаться достигнутой.
  • Период обновления (show)- период обновления графика кривой обучения, выраженный числом эпох.
  • Время обучения (time)- по истечении указанного здесь временного интервала, выраженного в секундах, обучение прекращается.

 

Рисунок 7. Вкладка параметров обучения

 

Принимая во внимание тот факт, что для задач с линейно отделимыми множествами (а наша задача относится к этому классу) всегда существует точное решение, установим порог достижения цели, равный нулю. Значения остальных параметров оставим по умолчанию. Заметим только, что поле времени обучения содержит запись Inf, которая определяет бесконечный интервал времени (от английского Infinite - бесконечный).

Следующая вкладка "Необязательная информация" (Optional Info) показана на рис. 8.

Рисунок 8. Вкладка необязательной информации

 

Рассмотрим вкладку обучения (Train). Чтобы начать обучение, нужно нажать кнопку "Обучить сеть" (Train Network). После этого, если в текущий момент сеть не удовлетворяет ни одному из условий, указанных в разделе параметров обучения (Training Parameters), появится ок-но, иллюстрирующее динамику целевой функции - кривую обучения. В нашем случае график может выглядеть так, как показано на рис. 9. Кнопкой "Остановить обучение" (Stop Training) можно прекратить этот процесс. Из рисунка видно, что обучение было остановлено, ко-гда функция цели достигла установленной величины (goal = 0).

Рисунок 9. Кривая обучения

 

Следует отметить, что для персептронов, имеющих функцию активации с жёстким ограничением, ошибка рассчитывается как разница между целью и полученным выходом.

Итак, алгоритм обучения нашёл точное решение задачи. В методических целях убедимся в правильности решения задачи путём прогона обученной сети. Для этого необходимо открыть вкладку "Прогон" (Simulate) и выбрать в выпадающем списке "Входы" (Inputs) заготовленные данные. В данной задаче естественно использовать тот же набор данных, что и при обучении data1. При желании можно установить флажок "Задать цели" (Supply Targets). Тогда в результате прогона дополнительно будут рассчитаны значения ошибки. Нажатие кнопки "Прогон се-ти" (Simulate Network) запишет результаты прогона в переменную, имя которой указано в поле "Выходы" (Outputs). Теперь можно вернуться в основное окно NNTool и, выделив мышью выходную переменную network1, нажать кнопку "Просмотр" (View). Содержимое окна просмотра совпадает со значением вектора целей - сеть работает правильно.

Следует заметить, что сеть создаётся инициализированной, то есть значения весов и смещений задаются определённым образом. Перед каждым следующим опытом обучения обычно начальные условия обновляются, для чего на вкладке "Инициализация" (Initialize) предусмотрена функция инициализации. Так, если требуется провести несколько независимых опытов обучения, инициализация весов и смещений перед каждым из них осуществляется нажатием кнопки "Инициализировать веса" (Initialize Weights).

Вернёмся к вкладке "Необязательная информация" (Optional Info) (рис. 8). Чтобы понять, какой цели служат представленные здесь параметры, необходимо обсудить два понятия: переобучение и обобщение.

При выборе нейронной сети для решения конкретной задачи трудно предсказать её порядок. Если вы-брать неоправданно большой порядок, сеть может оказаться слишком гибкой и может представить простую зависимость сложным образом. Это явление называется переобучением. В случае сети с недостаточным количеством нейронов, напро-тив, необходимый уровень ошибки никогда не будет достигнут. Здесь налицо чрез-мерное обобщение.

Для предупреждения переобучения применяется следующая техника. Данные делятся на два множества: обучающее (Training Data) и контрольное (Validation Data). Контрольное множество в обучении не используется. В начале работы ошибки сети на обучающем и контрольном множествах будут одинаковыми. По мере того, как сеть обучается, ошибка обучения убывает, и, пока обучение уменьшает действительную функцию ошибки, ошибка на контрольном множестве также будет убывать. Если же контрольная ошибка перестала убывать или даже стала расти, это указывает на то, что обучение следует закончить. Остановка на этом этапе называется ранней остановкой (Early stopping).

Таким образом, необходимо провести серию экспериментов с различными сетями, прежде чем будет получена подходящая. При этом чтобы не быть введённым в заблуждение локальными минимумами функции ошибки, следует несколько раз обучать каждую сеть.

Если в результате последовательных шагов обучения и контроля ошибка остаётся недопустимо большой, целесообразно изменить модель нейронной сети (например, усложнить сеть, увеличив число нейронов, или использовать сеть другого вида). В такой ситуации рекомендуется применять ещё одно множество - тестовое множество наблюдений (Test Data), которое представляет собой независимую выборку из входных данных. Итоговая модель тестируется на этом множестве, что даёт дополнительную возможность убедиться в достоверности полученных результатов. Очевидно, чтобы сыграть свою роль, тестовое множество должно быть использовано только один раз. Если его использовать для корректировки сети, оно фактически превратится в контрольное множество.

Установка верхнего флажка (рис. 8) позволит задать контрольное множество и соответствующий вектор целей (возможно, тот же, что при обучении). Установка нижнего позволяет задать тестовое множество и вектор целей для него.

Обучение сети можно проводить в разных режимах. В связи с этим, в NNTool предусмотрено две вкладки, представляющие обучающие функции: рассмотренная ранее вкладка Train и "Адаптация" (Adapt). Adapt вмещает вкладку информация адаптации (Adap-tion Info), на которой содержатся поля, схожие по своему назначению с полями вкладки Training Info и выполняющие те же функции и вкладку параметры адаптации (Adaption Parameters). Последняя содержит единственное поле "Проходы" (passes). Значение, указанное в этом поле, определяет, сколько раз все входные векторы будут представлены сети в процессе обучения.

Параметры вкладок "Train" и "Adapt" в MATLAB используются функциями train и adapt, соответственно.

 

Если создать следующую сеть:

- персептрон (Feed-Forward Back Propa-gation) c сигмоидными (TANSIG) нейронами скрытого слоя и одним линейным (PURELIN) нейроном выходного слоя; обучение выполняется используя алгоритм Левенберга-Маркардта (Levenberg-Mar-quardt), который реализует функция TRAINLM

то получим изображение сети:

 

кривая процесса обучения:

 

Можно построить сеть в системе Simulink:

>> clear, net = newp([-2 2;-2 2],1);

>> net.IW{1,1}= [-1 1];

net.b{1} = [1];

gensim(net)

 

Открывается окно модели сети:

 

Если 2 раза щелкнуть на сети увидим следующее:

 

Окно библиотеки элементов::

 

 

 

Задание-2. Требуется создать нейронную сеть, выполняющую логическую функцию "исключающее ИЛИ".

Выполнение работы. Рассмотрим таблицу истинности логической функции "исключающее ИЛИ"

 

P1

P2

A

0

0

0

0

1

1

1

0

1

1

1

0

 

Что же подразумевается под "линейной неотделимостью" множеств? Чтобы ответить на этот вопрос, изобразим множество выходных значений в пространстве входов (см. рисунок 9.10), следуя следующему правилу: сочетания входов P1 и P2, при которых выход A обращается в нуль, обозначаются кружком, а те, при которых A обращается в единицу - крестиком.

 

Рисунок 9.10. Состояния логического элемента "исключающее ИЛИ"

 

Наша цель - провести границу, отделяющую множество нулей от множества крестиков. Из построенной картины на рисунке 9.10 видно, что невозможно провести прямую линию, которая бы отделила нули от единиц. Именно в этом смысле множество нулей линейно неотделимо от множества единиц, и персептроны, рассмотренные ранее, в принципе, не могут решить рассматриваемую задачу.

Если же использовать персептроны со специальными нелинейными функциями активации, например, сигмоидными, то решение задачи возможно.

Выберем персептрон с двумя нейронами скрытого слоя, у которых функции активации сигмоидные, и одним выходным нейроном с линейной функцией активации (см. рисунок 9.11). В качестве функции ошибки укажем MSE (Mean Square Error - средний квадрат ошибки). Напомним, что функция ошибки устанавливается в окне "Создание сети" после выбора типа сети.

Рисунок 9.11 Сеть для решения задачи "исключающего ИЛИ"

 

Инициализируем сеть, нажав кнопку Initialize Weights на вкладке Initialize, после чего обучим, указав в качестве входных значений сформированную ранее переменную data1, в качестве целей - новый вектор, соответствующий желаемым выходам. В процессе обучения сеть не может обеспечить точного решения, то есть свести ошибку к нулю. Однако получается приближение, которое можно наблюдать по кривой обучения на рисунке 9.12.

Следует отметить, что данная кривая может менять свою форму от эксперимента к эксперименту, но, в случае успешного обучения, характер функции будет монотонно убывающим.

В результате обучения, ошибка была минимизирована до весьма малого значения, которое практически можно считать равным нулю.

 

Рисунок 9.12. Кривая обучения в задаче "исключающего ИЛИ"

Задача синтеза элемента "исключающего ИЛИ" является также примером задачи классификации. Она отражает общий подход к решению подобного рода задач.

 

сеть генетический алгоритм

 

Скачать: matyasov-perseptron-2.docx

Категория: Лабораторные работы / Лабораторные работы по математике

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.