Вступление
Я занялся разработкой программ комплекса “Искусственный интеллект” потому что ИИ (Искусственный интеллект) – это одна из самых перспективных и быстроразвивающихся областей науки. И в результате работы был создан программный комплекс, в составе которого:
Компонент нейронной сети
Программа распознавания графических образов на основе компонента НС (Нейронная сеть), способная распознавать графические файлы:
Т.О. программный комплекс содержит возможности построения программ на основе компонентов НС и ЭС, однако чтобы не разбрасываться я предпочел остановиться на Нейронной сети в силу ее наглядности, достаточной сложности и реальной возможности применения. Я намеренно уделил так мало внимания экспертным системам, по моему мнению НС являются гораздо более перспективным направлением в области программирования ИИ.
Область применения нейронных сетей
В литературе встречается значительное число признаков, которыми должна обладать задача, чтобы применение НС было оправдано и НС могла бы ее решить:
Таким образом, НС хорошо подходят для распознавания образов и решения задач классификации, оптимизации и прогнозирования. Ниже приведен перечень возможных промышленных применений нейронных сетей, на базе которых либо уже созданы коммерческие продукты, либо реализованы демонстрационные прототипы.
Банки и страховые компании:
Административное обслуживание:
Нефтяная и химическая промышленность:
Военная промышленность и аэронавтика:
Промышленное производство:
Биомедицинская промышленность:
Кроме того, следует добавить, что в последние несколько лет вся информация о нейропрограммах исчезла из средств массовой информации – это говорит об интересах военных в этой области и следовательно перспективности данных проектов.
Нейронные сети - основные понятия и определения
В основу искусственных нейронных сетей положены следующие черты живых нейронных сетей, позволяющие им хорошо справляться с нерегулярными задачами:
Прототипом для создания нейрона послужил биологический нейрон головного мозга. Поведение искусственной нейронной сети зависит как от значения весовых параметров, так и от функции возбуждения нейронов. Известны три основных вида функции возбуждения: пороговая, линейная и сигмоидальная.
Нейронная сеть представляет собой совокупность большого числа сравнительно простых элементов - нейронов, топология соединений которых зависит от типа сети. Чтобы создать нейронную сеть для решения какой-либо конкретной задачи, мы должны выбрать, каким образом следует соединять нейроны друг с другом, и соответствующим образом подобрать значения весовых параметров на этих связях. Может ли влиять один элемент на другой, зависит от установленных соединений. Вес соединения определяет силу влияния.
Модели нейронных сетей
Модель Маккалоха
Нейроны имеют состояния 0, 1 и пороговую логику перехода из состояния в состояние. Пороговый вид функции не предоставляет нейронной сети достаточную гибкость при обучении и настройке на заданную задачу.
Модель Розенблата
Розенблат ввел в модель Маккаллока и Питтса способность связей к модификации, что сделало ее обучаемой. Эта модель была названа персептроном. Первоначально персептрон представлял собой однослойную структуру с жесткой пороговой функцией процессорного элемента и бинарными или многозначными входами. Также слабо формализован метод обучения персептрона.
Модель Хопфилда
Привлекательность подхода Хопфилда состоит в том, что нейронная сеть для конкретной задачи может быть запрограммирована без обучающих итераций. Веса связей вычисляются на основании вида функции энергии, сконструированной для этой задачи.
Модель сети с обратным распространением
Способом обратного распространения (back propogation) называется способ обучения многослойных НС. В таких НС связи между собой имеют только соседние слои, при этом каждый нейрон предыдущего слоя связан со всеми нейронами последующего слоя (рис. на стр. I) . Нейроны обычно имеют сигмоидальную функцию возбуждения. Первый слой нейронов называется входным и содержит число нейронов соответствующее распознаваемому образу. Последний слой нейронов называется выходным и содержит столько нейронов, сколько классов образов распознается. Между входным и выходным слоями располагается один или более скрытых (теневых) слоев. Определение числа скрытых слоев и числа нейронов в каждом слое для конкретной задачи является неформальной задачей.
Принцип обучения такой нейронной сети базируется на вычислении отклонений значений сигналов на выходных процессорных элементах от эталонных и обратном "прогоне" этих отклонений до породивших их элементов с целью коррекции ошибки. Еще в 1974 году Поль Дж. Вербос изобрел значительно более эффективную процедуру для вычисления величины, называемой производной ошибки по весу, когда работал над своей докторской диссертацией в Гарвардском университете. Процедура, известная теперь как алгоритм обратного распространения, стала одним из наиболее важных инструментов в обучении нейронных сетей. Однако этому алгоритму свойственны и недостатки, главный из которых - отсутствие сколько-нибудь приемлемых оценок времени обучения. Понимание, что сеть в конце концов обучится, мало утешает, если на это могут уйти годы. Тем не менее, алгоритм обратного распространения имеет широчайшее применение. Например, успех фирмы NEC в распознавании букв, был достигнут именно благодаря алгоритму обратного распространения. Мой пример и является сетью с обратным распространением. Этот метод является достаточно сложным и очень наглядным, поэтому я остановлюсь на нём подробнее.
Реализация нейросети
Моя нейросеть является программной реализацией, ее параметры зависят от конкретной решаемой задачи и возможностей компьютера. Для моей демонстрационной задачи оказалось вполне достаточно двухслойной (без скрытых слоев) сети, однако вполне допустимо усложнять сеть, подгоняя под текущую работу.
Программа распознавания подписей.
Для своей сети я использовал алгоритм обратного распространения, и подробнее расскажу, как сеть обучается и распознаёт примеры, на основе демонстрационной программы распознавания 10 сканированных росписей.
Программа состоит из двух частей :
Алгоритм подготовки цифрового образа.
Алгоритмы обучения и распознавания этого образа.
На рисунке (рис. на стр. II) представлена матрица с росписью формата 125х85. Образцами послужили росписи некоторых людей, впоследствии отсканированные и приведенные к одинаковому размеру. Преобразование матрицы происходит следующим образом: Предположим во входном слое нейросети 210 нейрона. Тогда необходимо преобразовать двумерную матрицу в одномерную с 210 элементами, которую мы будем называть цифровым образом (Можно наоборот подогнать под пример число нейронов – зависит от вкуса и от возможностей компилятора). Я считаю сумму закрашенных точек по столбцам, умножаю на определяемый коэффициент и записываю получившееся число в нужный элемент массива, затем то же самое проделываю со строками, и записываю в остальные элементы массива. Получаю одномерный массив размером <число строк> + <число столбцов>, т.е. в данном случае – 210. Программа распознаёт пример, записанный в файл SAMPLE.BMP, который преобразуется по ТАКОМУ ЖЕ алгоритму. Вполне допустимо создать какой-либо свой алгоритм преобразования.
Так же есть демонстрация распознавания иконок к различным программам – нейросеть опознаёт пример и выдаёт имя программы. Преобразование матрицы производится по такому же алгоритму, что и для чисел, однако во входном слое нейросети используется уже 64 нейрона (формат иконки – 32х32).
Программа распознавания 10 образов цифр может послужить основой программы распознавания текстов (что-то типа FineReader).
Эти цифровые образы передаются компоненту который обучается на них и становится способным классифицировать подобные образы. Обучение, согласно алгоритму обратного распространения проходит следующим образом: сеть делает попытку распознать данный образ, но если она ещё не достаточно обучена, то результат не будет соответствовать истинному. Программа улавливает эти несоответствия пытается исправить их, прогоняя эталонный образец. Когда подобные несоответствия становятся ниже какого-либо значения можно сказать, что сеть обучилась.
Компонент нейронной сети содержит основные процедуры работы с нейронной сетью, например процедура распознавания, обучения сети: прямого и обратного хода. Все константы открыты для изменения, параметры подобраны для различных видов применений. Компонент оформлен с использованием объектно-ориентированного языка программирования Object Pascal. Компонент может использоваться для Delphi версий 2,3,4 и C++ Builder
Исходный текст находится в каталоге \COMPONEN \ NN \ nnet.pas.
Используемые методы:
Выполнена в HTML формате, содержит описание двух видов ИИ:
В разделе нейронной сети приведено описание принципов функционирования НС, основные алгоритмы реализации, историческая справка. Позволяет запускать демонстрационные программы. Ниже приведены основные темы справки.
Что такое ИИ. Области применения. Основные виды, принципы
Все об экспертных системах
Все о нейронных сетях
Принцип работы нейронных сетей
Концепции экспертных систем
Справочная система оформлена интерактивно, ее можно вызвать практически из любой программы, получить исчерпывающий ответ на любой вопрос.
Программа оболочка
Все программы комплексы “Искусственный интеллект” объединены единой программой оболочкой – из под нее можно вызвать все демонстрационные программы, справку, просмотреть исходные тексты модулей. Для этого необходимо, чтобы на компьютере был установлен Browser HTM файлов и Delphi желательно версии 3. Я использую программу работы с реестром Windows, сканирую программы, сопоставленные с расширениями HTM, PAS, DPR, поэтому для полной и качественной работы необходимо, чтобы на компьютере, в каталоге, доступном по переменной окружения PATH находилась программа Windows – start.exe .
Программа так же использует асинхронное воспроизведение звука WAW.
Практическое применение программного комплекса.
Перспективы использования.
Практически, данную программу можно использовать по назначению – распознавание образов, прогнозирование и т.д., но я вижу ещё несколько возможностей:
Кроме того уже данную программу можно с успехом использовать в реальных условиях.
Рис. 1. Модель сети на основе обратного распространения.
На рисунке изображена простая модель нейронной сети. Данная сеть содержит 5 нейронов во входном слое и 3 в выходном. Т.е. с ее помощью можно по 5 признаком определить один из трех классов.
Рис. 2. Формат подписи. Масштаб 28:1.
Пример подписи, которую распознаёт демонстрационная программа нейронной сети. Увеличена в 28 раз. Пример содержит 10625 точек и является очень большим. Сеть обрабатывает подобные примеры на пределе, с шансом успешного распознавания 60-70%.
Рис. 3. Внешний вид нейрона.
Данный нейрон содержит 11 входов, т.е. может быть нейроном слоя, которому предшествовал слой из 11 нейронов. Каждый из входов имеет свой весовой коэффициент, сам нейрон имеет некоторый порог срабатывания, поэтому на выход подаётся исключительный, характерный лишь для данного нейроны сигнал.
Рис. 4. Зависимость времени обучения НС от размеров образца.