Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


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




СОДЕРЖАНИЕ

1.Введение

2.Модели нейронных сетей

3.Строение нейронных сетей

4.Реализация нейронных сетей

5.Примеры применения нейротехнологий

6.Использование нейронных сетей для решения практических задач

7.Модели нейронных сетей

8.Заключение

9.Литература

ВВЕДЕНИЕ

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

Теория нейронных сетей зародилась в 40-х годах 20-го века, а затем развивалась в рамках такой фундаментальной научной дисциплины как искусственный интеллект – моделирование.

Имеется, по крайней мере, две точки зрения на то, что следовало бы называть искусственным интеллектом.

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

Вторая точка зрения — нейробиологическая, это изучение мозга, создание технических средств для повторения биологических структур и протекающих в них процессов. Теория нейронных сетей относится, естественно, к этому второму направлению развития искусственного интеллекта.

Рассмотрим далее вкратце строение и функционирование мозга (рис.1). Нейрон, или нервная ячейка, это фундаментальная функциональная единица всей нервной ткани, включая мозг. Каждый нейрон содержит ячеистое тело, или сому, которое, в свою очередь, состоит из ячеистых ядер. Из тела выходят многочисленные ответвления, называемые дендритами, и одно длинное ветвление, которое называется аксоном. Таким образом, кусты дендритов располагаются вокруг сомы, а аксон распространяется на большее расстояние - обычно, 1 см. (в 100 раз больше, чем ячеистое тело), а в некоторых случаях - до 1 м. Аксон разделяется на пряди и подпряди, которые соединяются с дендритами и телами других нейронов. Соединитель называется синапсом. Каждый нейрон образует множество синапсов с другими нейронами (от дюжины до сотни тысяч) [2].

 


Рисунок 1 – Строение нейрона

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

Модели нейронных сетей

Первые формальные модели нейронов были предложены Мак–Калоком и Питсом, а наиболее простое нейробионическое устройство (нейронная сеть) — Ф.Розенблатом.

Рассмотрим далее простую разновидность нейронных сетей — прямосвязные сети. Основными элементами в модели являются вычислительные элементы (аналоги нейронов) и связи между элементами, снабженные числовыми весами (аналоги синапсов). Таким образом, нейронная сеть, как компьютерная модель, состоит из множества элементов, или нейронов, связанных между собой, и каждая связь имеет числовой вес (рис.2). Некоторые нейроны связаны с внешней средой и могут быть определены как входные или выходные элементы. На рис.2 слева изображены 3 входных, а справа — 2 выходных элемента. Промежуточных слоев может быть несколько, и они называются скрытыми. На рис.2 — два скрытых слоя. Каждый элемент получает несколько значений на входе, соответственно количеству связей, и производит вычисления. Результат распространяется на выходные связи, которые, в свою очередь, передают это значение дальше на входы связанных нейронов.


Рисунок 2 – Структура нейронной сети

Рассмотрим, как производит вычисления нейрон (вычислительный элемент). Во-первых, вычисляется взвешенная сумма входных элементов (сумма произведений входных значений Aj на веса соответствующих связей Wj); во-вторых, вычисляется так называемая активационная нелинейная функция g (она определяет порог нейрона), которая и формирует выход элемента Ai (рис.3). Чаще всего в качестве функции g используют step, sign или sigmoid.

Рисунок 3 – Модель нейрона

Вспомним, что мы рассматриваем самую простую модель нейронной сети — прямосвязную. Существуют и более сложные модели.

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

Такого рода задачи называют интеллектуальным анализом данных, в ходе которого решается задача комплексного моделирования объекта исследования путем выявления функциональных и логических закономерностей в накопленной информации [4]. Необходимо отметить, что такие проблемы решаются не только с помощью нейронных сетей. В [4] рассматриваются и анализируются несколько основных методов восстановления количественных зависимостей: линейная и квазилинейная регрессия, сплайн – методы и нейронные сети. Использование каждого из этих методов состоит из 2-х этапов: структурный синтез (выявление общего вида функциональной зависимости или структуры), параметрический синтез (определение параметров, или коэффициентов, зависимости).

Рассмотрим нейронную сеть как математический формализм для решения задач интеллектуального анализа данных.

Технология обучения и прогнозирования на основе нейронных сетей представлена на рис. 4. Чтобы построить сеть, нужно определить количество элементов, их тип, и как они должны быть соединены в сеть (структурный синтез). Самой сложной и до конца нерешенной задачей является проектирование топологии сети, которая при обучении на некотором множестве примеров наилучшим образом решит поставленную задачу. Топология определяет количество и тип элементов на скрытых слоях, а также связи между элементами. Количество нейронов на входе и выходе соответствуют количеству входных и выходных параметров соответственно. Это структурный синтез модели, который в настоящее время, в основном, возлагается на человека. Однако предложены методы, позволяющие облегчить эту задачу [2].

Затем сеть инициализируется произвольным заданием весов связей, и производится обучение на основе некоторого алгоритма, который применяется к обучающим примерам. Веса в процессе обучения изменяются так, чтобы поведение сети (вход/выход) соответствовало множеству примеров. По сути, обучающие примеры представляют собой функцию, заданную численно. По окончании обучения эта функция распознается, но не в виде аналитического выражения, а в виде нейронной сети. Другими словами, образ, который должна «запомнить» сеть, фиксируется на некотором множестве нейронов, объединенных между собой с помощью значений весов. Причем, значения этих весов в процессе обучения подбираются так, чтобы при подаче входных параметров на сеть выходные значения были наиболее близки выходным значениям из примеров. Затем с помощью обученной сети можно производить прогнозирование для новых входных параметров.

Для лучшего понимания излагаемых идей представим себе, что необходимо научить нейронную сеть распознавать двух людей по их фотографиям. На вход подаем фотографии каждого человека, а на выход — их имена. Желательно, чтобы фотографий было как можно больше. Структура сети: на входе столько нейронов, сколько пикселей в фотографиях, на выходе — один показатель, принимающий значения 0 или 1 в зависимости от владельца фотографии. Скрытые слои (их количество и объем) определяются подбором. Проводим обучение, в результате автоматически модифицируются веса связей и определяется точность обучения. Если она нас устраивает, то сеть обучена, иначе изменяем топологию сети и повторяем обучение. Хорошо обученная сеть сможет определять, кто из двух человек изображен на новой фотографии.

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

Для обучения сети с заданной топологией придумано несколько специальных алгоритмов. Одним из простейших и наиболее известных является метод обратного распространения неопределенности (back-propagation) [2].

 

3 Реализация нейронных сетей

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

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

3.1 Уровень ядра 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 предоставляет компоненты базового уровня для реализации объектно-сетевой базы. Оно включает в себя компоненты взаимодействия с операционной системой, управления памятью с подсистемой сборки мусора, управления структурированным хранилищем объектов, подсистему кэширования объектами и управления их временем жизни в оперативной памяти.

3.2 Уровень моста .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.

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

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

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

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

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

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

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

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

 


Поделиться:

Дата добавления: 2015-08-05; просмотров: 143; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.007 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты