Главная arrow Робототехника arrow Реализация нейронной сети
Как начинался компьютер
Компьютерная революция
Двоичный код
Разработки военных лет
Интегральные микросхемы
Микрокомпьютер
Персоны
Сеть
Язык компьютера
Развитие ПО
Гибкие системы
Средства разработки
Информатика
Вычислительная наука
Операционные системы
Искусственный интеллект
Предыстория
Поиск
Знания и рассуждения
Логика
Робототехника
 

 
Реализация нейронной сети Печать

Реализация семантической нейронной сети и объектно-сетевой базы знаний

На сегодняшний день существует значительное число разнообразных моделей искусственных нейронных сетей. Все они отличаются алгоритмами поведения отдельных нейронов и принципами построения топологии связей. Несмотря на относительно благополучное состояние в области разработки различных математических моделей нейронных сетей, имеет место дефицит в области реализаций этих моделей, как на параллельных, так и на последовательных вычислительных системах. Большинство моделей нейронных сетей обладают значительным сходством. Нейрон представляет собой некоторый объект, связанный с другими объектами. По связям между нейронами передаются некоторые данные. Нейроны обрабатывают эти данные и передают другим нейронам. С этой точки зрения нейронную сеть можно рассматривать как распределенную вычислительную систему, в которой нейроны соответствуют отдельным процессорам, а связи между нейронами соответствуют каналам передачи данных между этими процессорами. Автор считает целесообразным разработать универсальную виртуальную машину, позволяющую моделировать различные нейронные сети в среде последовательной вычислительной системы. На данный момент широкое распространение получили объектно-ориентированные методы разработки программного обеспечения. В связи с этим представляется рациональным реализовать уровень нейронной сети в виде объектно-ориентированной базы. Нейроны будут реализованы объектами, а связи между нейронами будут реализованы как ссылки между объектами. Необходимо изолировать от виртуальной машины детали реализации поведения отдельных нейронов в различных моделях нейронных сетей.  Это позволит применять разработанную виртуальную машину независимо от применяемой модели нейронной сети. Для обеспечения максимальной гибкости перенастройки системы виртуальную машину следует реализовать в виде нескольких уровней связанных друг с другом через четко определенные интерфейсы.

Уровень ядра VNPI – хранение и управление временем жизни объектов

Ядро системы включает в себя уровень взаимодействия с операционной системой и уровень хранения и управления объектами. Уровень взаимодействия с операционной системой должен обеспечить адаптацию функций операционной системы к нуждам виртуальной машины, реализующей нейронную сеть. Уровень хранения объектов должен обеспечить хранение и быстрый доступ к объектам и их связям, а также управление временем жизни объектов. Совокупность API всех уровней виртуальной машины, для определенности, названа Virtual Neural Programming Interface, далее VNPI.

К эффективности языка реализации ядра виртуальной машины, эмулирующей нейронную сеть со многими миллионами эмулируемых нейронов, предъявляются повышенные требования. В результате, единственным кандидатом в качестве языка программирования для такой системы становится generic C (но уже не C++). Ядро необходимо разработать учитывая современные компонентные технологии. В противном случае будет невозможно реализовать полиморфное взаимодействие различных модулей ядра и динамическое изменение связей между ними. Существующие промышленные реализации компонентной идеологии, например Microsoft COM, слишком громоздки для применения в виртуальной машине, эмулирующей нейронную сеть требуемых размеров. Неэффективность COM в первую очередь связанна с необходимостью выполнять множество команд сравнения GUID при  каждом вызове QueryInterface. В качестве компонентной архитектуры для реализации виртуальной машины семантической нейронной сети предлагается применить оригинальную разработку. Основное отличие предлагаемой архитектуры – отсутствие необходимости вызова QueryInterface и поиска нужного интерфейса по значению GUID. В условиях ядра виртуальной машины можно определить время жизни любого внутреннего объекта на этапе разработки. Поэтому в предлагаемой архитектуре отсутствует подсчет ссылок на объекты. Благодаря отсутствию подсчета ссылок увеличивается производительность ядра. Указатель на объект представляет собой указатель на структуру с данными объекта, а не на интерфейс. Этим обеспечивается отсутствие необходимости приведения указателя на объект к различным типам при множественном наследовании интерфейсов. Для описателя классов применяется специализированный диалект языка XML – IDL. На его основе генерируется прототипы объектов и прототипы методов. Среда разработки виртуальной машины должна обеспечивать максимальный комфорт программисту. Поэтому разбор IDL реализуется на языке C# для платформы Microsoft .NET. В процессе синтаксического разбора анализируется содержимое DOM-XML и на его основе формируется объектная модель IDL путем создания и инициализации объектов. После построения объектной модели IDL на ее основе формируются исходные тексты прототипов функций на языке C. Ядро VNPI предоставляет компоненты базового уровня для реализации объектно-сетевой базы. Оно включает в себя компоненты взаимодействия с операционной системой, управления памятью с подсистемой сборки мусора, управления структурированным хранилищем объектов,  подсистему кэширования объектами и управления их временем жизни в оперативной памяти.

Уровень моста .NET-VNPI

Уровень реализации пользовательских объектов должен быть удобным для использования прикладными программистами. На данный момент этому требованию наиболее полно соответствует Microsoft .NET Framework. Для обеспечения интеграции .NET Framework и ядра VNPI необходим мост VNPI - .NET. Мост VNPI - .NET обеспечивает доступ к VNPI из среды .NET Framework. Он так же позволяет реализовывать объекты в среде .NET управляемые подсистемами ядра VNPI.

Учитывая различные цели и требования, стоящие перед .NET Framework и VNPI, идеология системы сборки мусора кардинально отличается. Так в .NET уничтожение объекта возможно только после того как не останется возможности его использования в текущем процессе. В отличие от этого, в ядре VNPI сборка мусора осуществляется, когда исчерпана память допустимая для размещения объектов. В этом случае ненужные объекты вытесняются на устройство долговременного хранения. Уничтожение объектов является частью модели предметной области и поэтому выполняется только в ручную. Мост осуществляет подсчет ссылок на объекты ядра VNPI используемые .NET и препятствует вытеснению объектов, которые могут быть доступны через обращения из контекста .NET

Система сама следит за временем жизни пользовательских объектов в памяти. Инициировать сохранение объектов в ручную не нужно. Наименее часто используемые объекты автоматически вытесняются на систему долговременного хранения, освобождая оперативную память. Поэтому в любой момент возможно что системе придется произвести вытеснение и разрушение какого то пользовательского объекта. Каждый раз, когда вызывается метод ядра, требующий блокировки Kernel Object, создается новый объект-оболочка. В конструкторе оболочки производится увеличение счетчика ссылок. В Dispose - уменьшение счетчика ссылок. Пока хоть одна оболочка находится в памяти, счетчик ссылок не равен 0 и соответствующий этой оболочке объект заблокирован от разрушения. Если программист забудет вызвать Dispose - это произойдет автоматически в момент сбора мусора .NET Garbage collector. Директивы языка C# using нужны, чтобы гарантировать удержание объекта в памяти во время вызова его методов, а затем гарантировать вызов Dispose после окончания работы с объектом. По выходу из using автоматически вызывается Dispose объекта оболочки и уменьшается счетчик ссылок Kernel Object.

Уровень сетевой объектно-ориентированной базы

Уровень сетевой объектно-ориентированной базы отвечает за создание экземпляров пользовательских объектов, а так же за работу с атрибутами объектов. Каждый объект сетевой  объектно-ориентированной базы может иметь несколько атрибутов. В качестве значений атрибутов могут выступать другие объекты или простейшие (скалярные) типы данных. Для создания объектов необходимо иметь информацию об их типах. Средствами сетевой объектно-ориентированной базы можно реализовать табличную структуру, близкую к структуре реляционной базы данных. Поэтому, для унификации информации о типах объектов, используемая этим уровнем, организованна в виде связанных друг с другом таблиц.

Информация об объектах зарегистрированных в системе организована в виде нескольких таблиц Types, Attributes, Tables. Это позволяет определять в БД типы объектов .NET в унифицированном виде. Однако, свойства таблиц, строк и колонок в ОО базе отличаются от свойств, принятых в реляционных базах данных. Объектно-ориентированная база позволяет хранить не строки таблиц, как это принято в табличных базах данных, а экземпляры объектов. Так колонка таблицы представляет собой сущность, отдельную и независимую от таблицы. Одна и та же колонка может принадлежать разным таблицам. Колонка представляет некоторый атрибут объекта. Таблица Attributes содержит информацию об атрибутах объектов, находящихся в сетевой объектно-ориентированной базе. Если в базе находится несколько объектов, которые имеют атрибут имя, то значениями для этого атрибута (колонки) являются имена этих объектов. Атрибуты (колонки) так же являются объектами ОО базы. Например, объект-атрибут "Имя Объекта" так же имеет имя, как объект, имеющий имя. Очевидно что, значением атрибута "Имя объекта" для "атрибута имя объекта" является строка "Имя объекта". Таким образом, применение тавтологий может оказаться более чем оправданным и полезным.

Таблица Types содержит описание типов данных (включая пользовательские), которые известны системе и на основе которых система создает экземпляры объектов, помещаемые в сетевую базу. Атрибут Qualified Type Name этой таблицы содержит имя .NET класса на основе которого создаются пользовательские объекты.

Таблица Tables содержит описание всех таблиц, содержащихся в объектной базе данных. Таблицы это тоже объекты. Имя таблицы - значение атрибута "имя объекта" у объекта таблицы. Каждая таблица имеет две коллекции объектов. Коллекцию атрибутов (колонок) и коллекцию компонентов (строк). Каждая строка любой таблицы это тоже объект. А значениями для колонок таблицы являются значения атрибутов объектов находящихся в строках таблицы. Таблица Tables содержит сама себя в качестве строки. А значением ее колонки "Коллекция колонок" является коллекция колонок этой же таблицы. Хотя желательно держать в одной и той же таблице объекты одного и того же типа - это вовсе не обязательно. Главное чтоб у этих объектов были атрибуты, хотя бы частично совпадающие с колонками данной таблицы. Я рекомендую держать в одной таблице объекты, классы которых унаследованы от некоторого, базового класса, который содержит все колонки данной таблицы в качестве собственных атрибутов. Например колонка "Имя объекта" имеет смыл практически в любой таблице. Объекты могут входить одновременно в разные таблицы как их строки. Дескрипторы атрибутов объектов сами являются объектами и зарегистрированы в таблице атрибутов.

Таким образом, каждая таблица содержит не некоторые абстрактные строки с данными, а конкретные экземпляры .NET объектов. Колонки таблиц представляют собой атрибуты (custom properties), поддерживаемые этими объектами. Сами типы, атрибуты и таблицы так же являются объектами и представлены строками в соответствующих таблицах. Каждая строка некоторой таблицы представляет собой экземпляр объекта, содержащийся в базе данных. Каждая колонка некоторой таблицы представляет собой атрибут, описанный в таблице Atributes. Экземпляр класса (объект) не зависит от таблицы. Не обязательно создав объект помещать его строкой в какую то таблицу. Будучи созданным, объект будет продолжать существовать либо в оперативной памяти системы либо в качестве потока в файловом хранилище до тех пор, пока не будет удален принудительно. Созданный экземпляр будет сохранять свою идентичность и значения атрибутов через различные циклы запуска и останова системы.

Пользователь имеет возможность создавать новые таблицы путем добавления новых записей в таблицу Tables. Созданные экземпляры таблиц, атрибутов и других объектов так же не обязательно регистрировать в соответствующих таблицах. Однако практика регистрации таких объектов в соответствующих таблицах является рекомендуемой, так как позволяет изменять их атрибуты через унифицированный интерфейс пользователя. Обязательным требованием является регистрация пользовательского типа в таблице Types.

В ОО БД поддерживаются полноценные C# объекты, у объектов поддерживаются методы, свойства, поля и события. Рекомендуется создавать свойства для поддерживаемых классом атрибутов. Механизм делегатов и событий не будет поддерживаться, в случае если связь реализуется между объектами, хранящимися в БД. Это связанно с ограничениями по времени жизни экземпляров. Во время, когда БД остановлена, все объекты хранятся в сериализированном виде. Если время жизни у приемников или источников сообщений может быть изолированно от времени жизни объектов БД, то механизмы делегатов - сообщений работают в пределах подсети объектов развернутых в памяти .NET Framework. Система разрабатывается в первую очередь для поддержки нейронных сетей со свободной топологией и числом нейронов до 2 млрд в одном хранилище. Поэтому только часть ОО БД находится в данный момент в оперативной памяти. Большая часть объектов заморожена в файловом хранилище и десериализируется по мере необходимости. Учитывая, что у каждого объекта в такой базе имеется поведение, реализованное в виде методов этого объекта, логично называть такую базу активной. Используя данную разработку программист полностью свободен создавать собственные таблицы, содержащие объекты-строки собственных типов. Так как классы можно разрабатывать самостоятельно, то строки могут иметь методы, свойства, события и все другие достижения современных ОО методов программирования.

Уровень семантической нейронной сети

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

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

Уровень экспертной системы и базы знаний

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

Так как в реальном мире редко можно утверждать что либо с полной уверенностью, то в процессе рассуждений экспертная система использует нечеткую логику. Для определения степени определенности утверждения в нечеткой логике используется фактор уверенности - число, обычно находящееся в интервале от 0 до 240 (похоже на теорию вероятностей). Но, в отличие от теории вероятности, фактор уверенности выражает не вероятность  возникновения события, а субъективную уверенность в этом.

Правила помещаются в базу знаний. Также в базу знаний, в виде фактов, помещаются входные данные, и результаты срабатывания правил. Если ситуация, анализируемая экспертной системой, удовлетворяет условиям срабатывания правила, то его следствия считаются верными для данной ситуации. Условия правила содержат операции конъюнкции, дизъюнкции и инверсии. Если условия у двух или более правил выполняются одновременно, то необходимо выбрать следствия для дальнейшей обработки. Выбор может быть осуществлен различными способами: 1- выбирается следствие у первого попавшегося правила; 2- из множества допустимых правил одно следствие выбирается случайно; 3- выбирается следствие у правила с наиболее жесткими условиями; 4- все следствия у допустимых правил выбираются одновременно. Для обеспечения обработки многозначных лексем текста будем считать истинными все следствия у всех правил, у которых выполняются условия. При этом одинаковые элементы, являющиеся следствиями разных правил, объединяются операцией дизъюнкции. Следовательно, продукционная экспертная система представляет собой сеть правил. Все правила выполняются одновременно. Отдельные правила представляют собой отдельные узлы, а переменные, входящие в условия и следствия правил, представляют собой связи между узлами этой сети. Отдельные операции над обрабатываемыми элементами текста представляются в этой сети как отдельные правила в базе знаний экспертной системы. Такая экспертная система может содержать имитационную модель предметной области и служить для проведения семантического анализа текста.

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