Введение Искусственные Нейронные Сети (ИНС) - бурно развивающееся направление современной прикладной математики и информатики. ИНС охватывают широкий диапазон научных и промышленных приложений от моделирования сложных инженерных систем, прогнозирования финансовых и климатических временных рядов, до медицинской диагностики и психофизиологии. Актуальность исследований в этом направлении подтверждается массой различных применений НС. Это автоматизация процессов распознавания образов, адаптивное управление, аппроксимация функционалов, прогнозирование, создание экспертных систем, организация ассоциативной памяти и многие другие приложения а также решение многих задач в гуманитарных науках, таких как философия, физиология и психология. В последнее время появляются все новые и новые задачи, решение которых может основываться на построении не одной нейросетевой архитектуры, а совокупности нейросетевых модулей, решающих различные подзадачи и функционирующих как единая сеть. Это такие задачи, как моделирование систем с распределенными параметрами, решение уравнений с частными производными с помощью нейросетей, определение собственных векторов и чисел матриц с помощью нейросетевых алгоритмов, задача оптимального выбора подмножества векторов случайной многомерной выборки. Данные задачи могут рещаться и традиционными нейросетевыми методами – путем выбора одной нейросетевой архитектуры и использования стандартных нейросетевых алгоритмов функционирования и обучения. Но возможно и решение с помощью нейросетевых структур- совокупности различных нейросетевых архитектур, решающих различные подзадачи данной задачи. Нейросетевая структура-это сеть, которая может состоять из множества различных по своему назначению модулей: как статических, так и динамических; как нейросетевых, так и других (функциональных; модулей хранения входных и выходных данных; осуществляющих некие функции управления). Каждый такой модуль получает на входе входные данные, затем осуществляет их преобразование с помощью функции отображения, соответствующей парадигме данного модуля, и на выходе выдает полученные значения. Далее эти значения подаются на следующий модуль и все повторяется до тех пор, пока не сработает последний модуль нейросетевой структуры. Порядок срабатывания модулей нейросетевой структуры может быть неоднозначен, поэтому для определения последовательности их срабатывания нужен специальный алгоритм. Искусственные нейронные сети индуцированы биологией, так как они состоят из элементов, функциональные возможности которых аналогичны большинству элементарных функций биологического нейрона. Эти элементы затем организуются по способу, который может соответствовать (или не соответствовать) анатомии мозга. Несмотря на такое поверхностное сходство, искусственные нейронные сети демонстрируют удивительное число свойств присущих мозгу. Например, они обучаются на основе опыта, обобщают предыдущие прецеденты на новые случаи и извлекают существенные свойства из поступающей информации, содержащей излишние данные. Исследования в области биологии показали, что человеческий мозг функционирует не как одна массивная сеть, а как набор небольших сетей, связанных между собой. Поэтому нейросетевую структуру можно итерпретировать как аналог отдела головного мозга. Подобно людям, структуру мозга которых они копируют, искусственные нейронные сети, а также нейросетевые структуры, сохраняют в определенной мере непредсказуемость. Единственный способ точно знать выход состоит в испытании всех возможных входных сигналов. Решение данной задачи без специального инструментария очень трудоемко, а существующие программные реализации не позволяют пользователю автоматизировать передачу данных из одного блока нейросетевой структуры в другой. В результате, приходится работать с файлами данных вручную, получая их на выходе одной нейронной сети и подавая на вход другой. В нейросетевой структуре функционирование одних модулей зависит от выходных параметров других модулей, а эти выходные параметры, в свою очередь, зависят от начальных и текущих входных параметров других модулей. Поэтому для решения задачи построения нейросетевой структуры нужен соответствующий инструментарий. Существующие разработки не дают возможности полностью автоматизировать передачу данных от одного модуля к другому , что делает построение и реализацию функционирования нейросетевой структуры очень трудоемким и требующим массу времени. Поэтому для построения и симуляции нейросетевых структур разрабатывается система N-FONTO –интрументарий, который позволит пользователю строить нейросетевые структуры, автоматически направлять данные из одного модуля в другой, контролировать процесс функционирования и обучения нейросетевой структуры. Настоящий проект посвящен разработке симулятора нейросетевых структур в рамках системы N-FONTO. В задачи данного проекта входят следующие подзадачи: Анализ вариантов построения и нейросетевых структур из нейросетевых блоков Разработка формального языка описания нейросетевых структур Разработка алгоритма симуляции нейросетевой структуры в модельном времени по ее формальному описанию средствами разработанного языка Программная реализация прототипа симулятора нейросетевых структур на языке программирования Visual C++ Тестирование симулятора нейросетевых структур на модельных структурах и данных 1. Анализ публикаций и разработок, посвященных моделированию нейросетевых структур. 1.1 Обзор существующих задач, для решения которых применяются нейросетевые структуры 1.1.1 Задача 1 Моделирование систем с распределенными параметрами Примером задачи моделирования системы с распределенными параметрами является прогнозирование распределения температуры в режиме реального времени. Постановка задачи прогнозирования распределения температуры выглядит следующим образом: пусть в некоторой точке (x10, x20 ,…,xn0) n-мерного пространства Vn установлен источник тепла. Мощность этого источника не постоянна и в каждый момент времени ее значение характеризуется функцией управляющего воздействия u(t). Кроме того, действие данного источника на каждую точку пространства не является постоянным в пространстве, а для каждой i-й точки с координатами (x1i, x2i ,…,xni) в n-мерном пространстве температура, которая зависит от управляющего воздействия, находится в зависимости от их координат (x1i, x2i ,…,xni): Таким образом, если выбрать M отдельных точек данного объема и измерить значение температуры в каждой из этих точек в каждый момент времени на в некотором временном интервале (t0,T) , то получим следующий набор значений функции температур: u(t)-> f1 (t ,x11, x21 ,…,xn1), f2 (t, x12, x22 ,…,xn2),…, fM (t, x1M, x2M ,…,xnM) Меняя вид функции u(t) получим различные ответные изменения функций f1 ,f2 ,…,fM и, соответственно, различные наборы значений температур: u1(t) : f11 (t ,x11, x21 ,…,xn1), f21 (t, x12, x22 ,…,xn2),…, fM1 (t, x1M, x2M ,…,xnM) u2(t): f12 (t ,x11, x21 ,…,xn1), f22 (t, x12, x22 ,…,xn2),…, fM2 (t, x1M, x2M ,…,xnM) ……… ………… uk(t): f1k (t ,x11, x21 ,…,xn1), f2k (t, x12, x22 ,…,xn2),…, fMk (t, x1M, x2M ,…,xnM) Для определения вида функций f1j (t ,x11, x21 ,…,xn1), f2j (t, x12, x22 ,…,xn2),…, fMj (t, x1M, x2M ,…,xnM) где j=(1,k)- номер управляющего воздействия uj(t) разместим в каждой точке Xi (x1i, x2i ,…,xni) i=(1,M) датчик , измеряющий температуру в данной точке в каждый момент дискретного времени t=(1,T). Пусть показания этих датчиков таковы: u1(t)-> g(1)1(t), g(2)1(t) ,…,g(M)1(t); u2(t)-> g(1)2(t), g(2)2(t) ,…,g(M)2(t); ... uk(t)-> g(1)k(t), g(2)k(t) ,…,g(M)k(t); Тогда при известном виде функций g(i)j (i=(1,M) , j=(1,k)) требуется определить: 1) Какой вид примут функции g(1)j(t), g(2)j(t) ,…,g(M)j(t) j=(1,k), если функция управляющего воздействия будет иметь произвольный вид uh(t), при h≠j для любых j=(1,k). То есть требуется саппроксимировать функции f1 (t ,x11, x21 ,…,xn1), f2 (t, x12, x22 ,…,xn2),…, fM (t, x1M, x2M ,…,xnM) по известным их значениям в отдельные моменты времени а затем сделать прогноз их значений для управляющего воздействия uh(t) 2) Каковы значения функции g(j)(t)= F(f (t ,x1, x2 ,…,xn)) при условии, что в точке X(x1, x2 ,…,xn ) (X ≠Xi i=(1,M); f- температура в точке X)и управляющее воздействие имеет вид uj(t) при j=(1,k)- то есть известны показания датчиков температур для данной функции управляющего воздействия в точках, где расположены датчики и требуется определить, как ведет себя функция температуры в точке, в которой отсутствует датчик тепла. 3) В более общем случае требуется определить значение функции температуры в любой точке X( x1, x2 ,…,xn) n- мерного пространственного объема в каждый момент времени t=(t0,T) при конкретном значении функции управляющего возлействия, не совпадающим ни с одной из функций uj(t) (j=1,k). 1.2 Анализ вариантов построения нейросетевых структур из нейросетевых блоков 1.2.1 Понятие нейросетевой структуры Для того, чтобы описать возможные варианты построения нейросетевых структур, введем понятие нейросетевой структуры. Нейросетевая структура представляет собой совокупность элементов, как нейросетевых так и других, связанных между собой и функционирующих как единое целое. Простейшим примером нейросетевой структуры является сеть, состоящая из двух нейронных сетей, связанных таким образом, что вектор выходных значений для первой нейронной сети на каждом такте работы нейросетевой структуры совпадает с вектором входных значений для второй: (X=(X1,X2,…,Xn)-вектор входных значений для Нейронной сети-1; Y=(Y1,Y2,…,Ym)- вектор выходных значений для Нейронной сети-2) Это означает, что если для Нейронной сети-1 вектор выходных значений имеет вид U=(U1,U2,…,Up) и вектор входных значений Нейронной сети-2 имеет вид V=(V1,V2,…,Vp), то Ui=Vi для любых i=(1,p). Но это только самый простой вариант нейросетевой структуры, в которой участвуют только 2 нейронные сети, тогда как в общем случае в нейросетевой структуре может быть достаточно большое количество различных блоков, которые могут выполнять различные функции. Кроме того, вектор выходных значений одного блока нейросетевой структуры может быть не только вектором входных значений для другог блока, но и оказывать влияя ние на пего параметры (например, на матрицу синоптических коэффициентов). Отдельно взятый блок нейросетевой структуры может представлять собой как известную нейросетевую архитектуру (например, многослойный персептрон или просто отдельный нейрон) так и являться блоком, реализующим какие-либо функциональные преобразования над векторами входных значений. Пример: В данном случае входной вектор X=(X1,X2,…,Xn) подвергается функциональному отображению F в вектор Y=(Y1,Y2,…,Ym). Рассмотренный простейший случай иллюстрирует преобразование одного единственного вектора X в один единственный вектор Y. Но векторно- матричные преобразования можно осуществлять и над несколькими векторами. Примерами векторно-матричных преобразований, которые могут потребоваться при работе с нейросетевыми структурами могут быть нормировка вектора входных элементов (вообще говоря- различные виды нормировки) или другая предобработка векторов входных значений, а также различные варианты постобработки данных (мормировка) , а также графическое отображение зависимостей одних полученных в результате работы нейросетевой структуры параметров от других. Все это примеры статических нейросетевых структур, функционирование которых в каждый последующий момент времени не зависит от результатов функционирования всей нейросетевой структуры в целом в предыдущий момент времени. В частном случае, если в состав нейросетевой структуры включена рекуррентная нейронная сеть, нейросетевая структура функционирует в модельном времени и ее функционирование на каждом последующем такте модельного времени зависит от результатов ее функционирования на предыдущих тактах. 1.2.2 Общая классификация элементов нейросетевых структур Элементы нейросетевых структур, в первую очередь, делятся на блоки (Blocks) и связи между этими блоками (Links). Block- это математическая модель, которая при наличии входных и выходных значений может функционировать самостоятельно. Примером блока является многослойная нейронная сеть, имеющая N входов , M выходов и K слоев нейронов.Классификация блоков нейросетевой структуры представлена на следующем рисунке: Process Block- это такой блок нейросетевой структуры, который производит основные преобразования данных, используя либо нейросетевую парадигму, либо производя функциональные преобразования, т.е. некую функцию преобразования . Process Block подразделяется на две категории: функциональный блок FBlock и нейросетевой блок NeuroBlock в зависимости от того, что представляет из себя функция преобразования данных- просто функциональное отображение или отображение с помощью нейросетевой парадигмы. Virtual Block- это такой блок нейросетевой структуры, который осуществляет функцию управления потоками данных. Data Block- это блок, хранящий данные и не осуществляющих никаких преобразований над ними. Link- это математическая модель, которая при отсутствии блоков нейросетевой структуры функционировать автономно не может, так как ее задача- связывать воедино эти блоки, обеспечивая тем самым единое функционирование всей нейросетевой структуры в целом. Связь также решает проблему размерности (когда размерность выхода начального блока не совпадает с размерностью входного вектора конечного блока) , с помощью вектороно- матричных преобразований. При этом она связь может связывать 2 и только 2 блока нейросетевой структуры- именуемые начальным и конечным блоками данной связи. Учитывая эту особенность связи, ее можно также определить, как вектор, соединяющий начальный и конечный блоки связи: Классификация связей между блоками нейросетевой структуры имеет следующий вид: In-Out Link –это такая связь между двумя блоками нейросетевой структуры, при которой вектор выходных значений начального блока становится вектором входных значений для конечного блока. Out-Weight Link- это такая связь между двумя блоками нейросетевой структуры, при которой вектор выходных значений начального блока становится матрицей синоптических коэффициентов для конечного блока. Out-InitState Link- это такая связь между двумя блоками нейросетевой структуры, при которой вектор выходных значений начального блока становится вектором начальных состояний для конечного блока. Также, учитывая функции, выполняемые связями, их можно классифицировать на следующие 4 типа: связь «один к одному»: связь «один ко многим»: связь «многие к одному»: связь «многие к многим»: 1.3 1.2.3 Варианты построения нейросетевых структур из нейросетевых блоков 1.2.6 Варианты функционирования нейросетевых структур Обзор существующих нейропакетов и анализ их на применимость для моделирования нейросетевых структур. 1.3.1 Пакет MatLab 1.3.2 Пакет NeuroPro 1.3.3 Пакет Simulink 1.4 Постановка задачи курсового проекта Настоящая работа посвящена разработке и исследованию алгоритмов функционирования нейросетевых структур в модельном времени. Для построения схемы и алгоритмов функционирования нгейросетевых структур в модельном времени необходима разработка формального языка описания нейросетевых структур, позволяющего однозначно определить функционирование нейросетевой структуры. Для отладки и исследования алгоритмов необходимо инструментальное средство, позволяющее конструировать нейросетевые структуры и проводить анализ результатов их функционирования. Одной из задач настоящего проекта является разработка посистемы функционирования нейросетевых структур (симулятора) в рамках системы N-FONTO, предназначенной для визуальногомоделирования нейросетевых структур. К задачам данного курсового проекта относятся: 1) Разработка формального языка статического описания нейросетевых структур; 2) Разработка формального языка описания функционирования нейросетевых структур (динамического описания нейросетевых структур), предоставляющего возможность для решения задач моделирования систем с распределенными параметрами, решения уравнений с частными производными с помощью нейросетей, определение собственных векторов и чисел матриц с помощью нейросетевых алгоритмов,оптимального выбора подмножества векторов случайной многомерной выборки; 3) Разработка алгоритмов функционирования нейросетевых структур в модельном времени; 4) Разработка требований к посистеме функционирования нейросетевых структур (симулятору нейросетевых структур) 5) Разработка проекта симулятора нейросетевых структур; 6) Программная реализация прототипа симулятора нейросетевых структур; 7) Исследование алгоритмов симуляции на модельных нейросетевых структурах. 2. Разработка алгоритмов и методов симуляции нейросетевых структур 2.1 Понятие нейросетевой структуры Нейросетевая структура- это математическая модель, представимая в виде связного направленного графа , вершинами которого являются блоки нейросетевой структуры, которые срабатывают на определенных тактах модельного времени, в определенной последовательности. 2.2 Разработка структуры данных для хранения нейросетевой структуры Рассмотрим параметры различных типов элементов нейросетевых струкрур: связей и блоков. Блок нейросетевой структуры характеризуется следующими параметрами: Вид элемента: связь или блок Типом блока/связи (Конкретным видом нейросетевой архитектуры или иной архитектуры) Пример: многослойный персептрон, сеть Хопфилда, функциональное преобразование, виртуальный блок внутренними параметрами функционирования а) Для нейросетевого блока и функционального блока (в общем виде) - вектором входных значений x(t1,t2,…,tp) = (x1(t1,t2,…,tp), x2((t1,t2,…,tp)), ... xM((t1,t2,…,tp))). -вектором выходных значений y(t1,t2,…,tp) = (y1(t1,t2,…,tp), y2((t1,t2,…,tp)), ... yM((t1,t2,…,tp))).? -функцией обработки данных б) Для блока данных (в общем случае для входных и выходных значений) - тип блока данных : хранение входных или выходных данных: - размерность N вектора данных - значение элементов вектора данных (z1,z2,…,zN) в) Для виртуального блока (переключателя) - количество входов - условия срабатывания каждого из входных векторов Связь между блоками нейросетевой структуры характеризуется следующими параметрами: начальный блок связи конечный блок связи тип связи (по синоптическим коэффициентам, по входным- выходным элементам или по начальным состояниям) Для сохранения элементов нейросетевой структуры был разработан следующий формат: Block{ Type=<тип_блока> Name=<имя_блока> Id=<идентификатор_блока> Prop1=<внутренний_атрибут1> Prop2=< внутренний_атрибут2> … PropN=< внутренний_атрибутN> } Link { Type=<тип_связи> IdFirstBlock=<Идентификатор_начального_блока> IdLastBlock=<Идентификатор_конечного_блока> } Причем поля могут принимать следующие значения: <тип_блокаI>::=”InData”|”OutData”|”MNN”|”RNN”|”Neuron”|”FBlock”|”VirtualBlock” <Идентификатор_начального_блока>::=<Идентификатор_блокаK> <Идентификатор_конечного_блокаJ>::=<Идентификатор_блокаM> 2.3 Управление срабатыванием блоков нейросетевых структур во времени При достаточно сложной организации нейросетевой структуры может возникнуть ситуация, когда последовательность срабатывания блоков нейросетевых структур, а следовательно, и алгоритм функционирования всей структуры в целом неоднозначен. Рассмотрим следующий пример: 2.4 Типы условий срабатывания для блоков нейросетевых структур Правила образования условий срабатывания нейросетевых блоков Базовыми условиями срабатывания нейросетевых блоков являются: 1) У1-Тип условия срабатывания 1: на нейросетевой блок не накладывается никаких ограничений, то есть он срабатывает всегда, когда до него доходит очередь; 2) У2-Тип условия срабатывания 2: нейросетевой блок срабатывает только 1 раз- на первом такте модельного времени и больше не срабатывает никогда; 3)У3-Тип условия срабатывания 3: Нейросетевой блок срабатывает определенное количество раз на ограниченном интервале модельного времени ; 4) У4Тип условия срабатывания 4: Нейросетевой элемент срабатывает, если сработал другой блок данной нейросетевой структуры на данном такте модельного времени Правила : 1) Базовые условия срабатывания блоков нейросетевых структур являются правильно построенными условиями срабатывания; 2) Если У является условием срабатывания блока нейросетевой структуры, то и (¬У) также является условием срабатывания ; 3)Если Уi и Уj –условия срабатывания блока нейросетевой структуры, то и их объединение (Уi U Уj) является условием срабатывания, причем это означает, что для срабатывания блока требуется выполнение одного из условий Уi или Уj; 4) Если Уi и Уj –условия срабатывания блока нейросетевой структуры, то и их пересечение (Уi ∩ Уj) является условием срабатывания, причем это означает, что для срабатывания блока требуется одновременное выполнение обоих условий Уi или Уj; 5)Никакие другие условия не являются правильно построенными условиями срабатывания блоков нейросетевых структур. 2.5 Алгоритм определения последовательности срабатывания элементов нейросетевой структуры при выполнении условий их срабатывания 2.6 Алгоритм выхода из кризиса неактивных условий 2.7 Использование разработанного алгоритма на конкретных примерах 3.Программная реализация и тестирование симулятора нейросетевых структур 3.1 Анализ системных требований 3.2 Программная реализация алгоритма определения последовательности срабатывания элементов нейросетевой структуры в случае выполнения условий срабатывания элементов нейросетевой структуры , описанная средствами языка UML 3.3 Программная реализация алгоритма выхода из кризиса неактивных условий 3.4 Пользовательский интерфейс симулятора нейросетевых структур 3.5 Анализ тестовых требований 3.6 Результаты тестирования симулятора нейросетевых структур на модельных структурах и данных