Конструирование искусственных нейронных ансамблей (ИНА)
Александр Кириченко

© Александр Кириченко, 2020

ISBN 978-5-4498-9907-1

Создано в интеллектуальной издательской системе Ridero

Введение

Зачем нужны искусственные нейросети?

Искусственные нейронные сети – один из разделов науки «Искусственный интеллект». К этой науке приковано пристальное внимание с 1980 года, когда Япония объявила о создании вычислительных систем 5 поколения. Предполагалось, что создаваемые вычислительные системы кроме обычных компьютеров будут содержать машины логического вывода, базу знаний, систему общения на естественном языке. Иными словами – что создаваемые вычислительные системы будут оснащаться интеллектуальными блоками – аналогами человеческого интеллекта, человеческой интуиции. Эти блоки необходимы для распознавания образов, чтения рукописных текстов, подготовки аналитических прогнозов, перевода с одного языка на другой и т. п. Именно для таких задач обычно трудно составить явный алгоритм, без которого не могут работать электронные вычислительные машины.

Такие аналоги человеческого интеллекта могут быть реализованы с помощью искусственных нейросетей – нейросетевых моделей биологических систем.

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

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

Интеллект связан со знаниями: приобретением знаний, хранением знаний, поиском, извлечением и преобразованием знаний.

Последовательность приобретения новых знаний в теории познания философами определена в виде таких операций, как: созерцание – накопление – кластеризация – классификация – узнавание – предсказание – прогнозирование.

Для хранения знаний разработаны специальные средства – системы управления базами знаний (СУБЗ). В отличие от систем управления базами данных (СУБД), базы знаний содержат специальные добавки, обеспечивающие непротиворечивость хранящихся знаний (проверка, устранение).

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

Нейросети способны обучаться на примерах. Умение обучаться на примерах – это интеллектуальная задача.

Распознавание – это ещё одна интеллектуальная задача. У неё есть несколько разновидностей – узнавание, предсказание, прогнозирование, идентификация.

Кластеризация – разделение объектов на группы похожих. Это тоже интеллектуальная задача.

В настоящее время усиливается интерес к использованию искусственных нейронных сетей при получении новых знаний – ещё одной интеллектуальной задачи.

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

Для поиска алгоритмов решения таких задач и способов использования нейросетей для их решения приходится использовать нейросетевые интеллектуальные модели и создавать нейросетевые технологии.

Реализация мыслительной деятельности происходит с помощью нейронных конструкций. Для создания и исследования нейросетевых конструкций создаются специальные программные средства.

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

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

Меняются и цели, с которыми проводятся нейросетевые исследования, и методы их проведения: смысловой поиск информации, анализ тематической структуры музыкальных произведений, текстов, рисунков и т. д.

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

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

Получается, что нейросетевые технологии связаны с использованием знаний и процессов высокой сложности. Очень высокой.

Облегчить преодоление сложностей освоения нейросетевых технологий можно за счёт

– концентрации внимания на изучении нейропакета, в качестве которого предлагается пакет MemBrain [1],

– реализации мыслительной деятельности с помощью нейронных конструкций [2].

– ознакомления с основами теории нейронных сетей [3],

– изучения алгоритмов и приёмов нейроконструирования [4, данная книга].

Изучение нейросетевых технологий необходимо как для обучения конструкторов нейроЭВМ, так и для обучения специалистов по созданию и использованию программного обеспечения нейрокомпьютеров, и для подготовки специалистов по использованию нейросетевых технологий в их практической деятельности.

С 2012 года в России началось активное проведение ИТ-исследований в сфере разработки искусственных когнитивных систем, разработана «Стратегическая программа создания Центра прорывных исследований» в области информационных технологий «Искусственные когнитивные системы». Повышение интереса к тематике искусственного интеллекта требует появления достаточного количества публикаций о структуре и возможностях нейросистем, о типах искусственных нейросетей и открываемых ими возможностях автоматизации мыслительных процессов. Для удовлетворения возникающих потребностей необходимы с одной стороны – новые информационные материалы, и с другой стороны – программные средства, которые позволяют без особых усилий и затрат проверить новую информацию на практике, создавать свои нейросетевые системы разных типов, модели нейросетевых устройств и даже узлы нейрокомпьютеров на своём ноутбуке (так называемые «нейропакеты» и «нейроконструкторы»).

Необходимую информацию даёт эта книга, а доступные программные средства можно получить из Интернет [5, 6]. Большинство примеров в книге выполнено на freeware пакете MemBrain [7].

Основными зарубежными проектами создания подобных ИКС являются:

– европейские проекты BBP/HBP,

– американская инициатива BRAIN,

– проект IBM Deep QA«Watson»,

– проект «Siri» корпорации Apple,

– проект нейросетевого искусственного интеллекта и использующих его роботов компании Google,

– японские проекты JST,

– канадский проект «Spaun» и др.

Нейропакеты и нейроконструкторы

При изучении нейросетевых технологий используются различные программные инструменты. Обычно такими инструментами являются нейропакеты, реже – нейроконструкторы.

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

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

Программный комплекс MemBrain удачно сочетает в себе свойства как нейропакета, так и нейроконструктора. Этот программный комплекс разработан Thomas Jetter в виде свободнораспространяемого (freeware) и размещён по адресу http://www.membrain-nn.de/.

Описание программного комплекса, как нейропакета приведено в монографии [Универсальный нейропакет] и охватывает различные стороны процесса создания нейросетевой модели, например, определяет 5 функциональных узлов для создания нейросети требуемого типа, загрузки в эту нейросеть исходных данных, обучения нейросети, и промышленного решения задач на обученной нейросети:

1. Нейроны и действия с ними (Neurons in MemBrain):

– Группировка нейронов, их выравнивание (Aligning Neurons),

– Экстренный выбор нейронов (Neuron Extra Selection),

– Быстрая Активация (Quick Activation),

– Автоматическое присваивание имён нейронам (Neuron Auto Naming))

– Основные виды нейронов:

– перемещаемые нейроны (Moving Neurons)

– нейроны задержки (Adding Delay Neurons),

– дифференциальные нейроны (Add Differential Neuron),

– интегрирующие нейроны (Adding Integrator Neurons),

– нейроны контекста

– функции активации нейронов (Activation Functions)

– логистический закон (LOGISTIC)

– линейный закон (IDENTICAL)

– линейный в интервале от 0 до 1 (IDENTICAL 0 TO 1)

– гипертангенс (TAN HYP)

– бинарный, или единичная функция Хэвисайда (BINARY)

– минимальное Евклидово расстояние (MINIMUM EUCLIDEAN DISTANCE)

2. Соединение нейронов в нейросети (Полная связь, Случайная связь, связь «один к одному» (1:1), связь слоёв нейросети на основе Матрицы).

3. Моделирование связей и особенности их эксплуатации.

В MemBrain cвязи между нейронами выполняются с помощью ссылок. Ссылки имеют два основных свойства, которые определяют их функциональность (вес и логическую длину).

Вес ссылки определяет, какая величина сигнала передается на вход целевого (target) нейрона. Для этого сигнал умножается на вес ссылки. Это значение появится на входе целевого нейрона на другом конце связи. Вес ссылки не ограничен определенным диапазоном и может быть даже отрицательным.

Логическая длина характеризует продолжительность прохождения ссылки по каналу (от одного нейрона к другому). Ссылки визуализируются в MemBrain с помощью «пиков или шипов активации» (Activation Spikes), которые появляются во время каждого «шага моделирования» (<Think Step>) на схеме нейросети при активированной опции <Вид> <Показать пики активации в ссылках>.

Логическая длина ссылки определяет, сколько шагов вычисления (Think Steps) требуется, чтобы распространить сигнал от входного конца ссылки к ее выходному концу (т.е. между двумя соседними нейронами). Логическую длину (Length) можно определить в диалоге «Select net characteristics to be exported» из основного меню пакета Neural Networks -> Net Analysis -> Exporting a Net.

Для примера: канал с (логической) длиной 1 (минимально допустимое значение) распространяет сигналы так, что задержка не возникает.

4. Основные характеристики нейронов – диапазоны активаций нейронов, которые обычно имеют величину, отличную от -1 до 1 или от 0 до 1, обычно устанавливаются при настройке функций активации нейронов. При нормализации нейронов они могут быть изменены (MemBrain_Help. pdf -> Normalize I/O Data).

5. Управление данными в MemBrain (Managing I/O Data)

Для управления данными в MemBrain служит Редактор уроков или разделов (The Lesson Editor).

С Редактором Разделов можно выполнить следующие функции:

– Добавить-Удалить раздел;

– Выбрать активный раздел/образец;

– Редактировать имя раздела/образца;

– Добавить комментарий;

– Отредактировать данные;

– Синхронизировать раздел с сетью;

– Исполнить текущий/следующий входной образец или весь раздел;

– Сохранить раздел в виде CSV файла;

– Загрузить раздел из CSV файла;

– Разделить текущий раздел;

– И др.

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

В MemBrain имеются такие разделы, которые могут рассматриваться как дополнительные:

1. Работа с нейронными сетями (Neural Networks):

2. Экспорт нейросети (Exporting a Net)

3. Объединение обученных нейросетей в единую конструкцию

4. Выбор наилучшей нейросети

5. Автоматизация управления программным пакетом

6. Генерация C-кода текущей нейронной сети

7. Организация динамической библиотеки

8. Соединение различных нейросетей с использованием TCP

9. Управление произвольно большим количеством нейронных сетей

В нейроконструкторе NeuroPro в отличие от MemBrain добавлены такие разделы, как упрощение нейронной сети и вербализация нейронной сети, с помощью которых удаётся преобразовать полученные при обучении нейронной сети знания в правила продукции.

Работа с нейронными сетями (Neural Networks) предусматривает выполнение таких операций:

– Провести «Анализ сети» (Net Analysis)

– Проверить Архитектурную целостность (Architectural Integrity)

– Провести послойный Анализ (Layer Analysis)

– Отобразить информацию о слоях (Displaying Layer Information)

– Вычислить активацию и выходные сигналы нейронной сети (Calculating the Output)

– Обновить нейросеть (Resetting the Net)

– Экспортировать нейросеть (Exporting a Net)

– Провести анализ структуры экспортируемого CSV файла (Net CSV File)

– Отторгнуть обученную нейросеть от нейропакета

– Объединить обученные нейросети (Merging Nets)

Экспорт нейросети (Exporting a Net) может быть выполнен по-разному. В MemBrain есть возможность экспортировать сетевой список характеристик текущей нейронной сети через файл csv (содержащий значения, разделенные запятыми). Этот файл можно использовать для импорта нейронной сети, созданной и, возможно, обученной с помощью MemBrain, в другое прикладное программное обеспечение. При этом можно выбрать уровень детализации, который вы хотите включить в файл экспорта.

Чтобы экспортировать сеть, выберите <File> <Export …>. Появится следующий диалог.

Выбор экспортируемых характеристик

Этот диалог позволяет выбрать свойства нейронов и ссылок, которые вы хотите экспортировать в файл. Когда вы сделали свой выбор, нажмите ОК – будет предложено выбрать местоположение и имя файла для сохранения экспортированного файла.

Нейроконструкторы предусматривают выполнение весьма специфических операций. Поэтому в нейропакетах приходится производить установку настроек пакета (Getting Started ›› Short Beginner’s Tutorial ››), позволящую:

– Настроить экран

– Разрешить:

– Использование сетки при работе с графическими объектами

– Выбор объектов

– Удаление объектов

– Копировать / Вставить Активации

– Симуляция запуска / остановки (Auto Think)

Некоторые нейроконструкторы имеют оперативную память нейросетей «Neural Net Stock», которая во время работы позволяет управлять произвольно большим количеством нейронных сетей. Отредактированная нейронная сеть может быть отправлена в хранилище (Stock) или извлечена из него в любой момент во время работы.

Наиболее мощной функцией «Neural Net Stock» (системы управления произвольно большим количеством нейронных сетей) является возможность автоматически использовать наиболее эффективную нейронную сеть из запаса нейронных сетей MemBrain: всякий раз, когда учитель обнаруживает новый минимум сетевой ошибки, он обновляет копию нейронной сети в хранилище, представляя её как более эффективную. Такая функция Neural Net Stok называется акцией и производится под воздействием диспетчера акций (Neural Net Stok Manager). Список сетей в диспетчере всегда представлен в хронологическом порядке, т.е. новая сеть всегда находится в верхней части списка. Neural Net Stok Manager позволяет выполнить следующие функции:

– Добавить текущую сеть

– Заменить текущую сеть (загрузка нетто)

– Очистить контент (запас нейросетей)

– Загрузить контент или его часть из файла

– Сохранить контент в файл.

При объединении обученных нейросетей (Merging Nets, создание единой нейросети) можно объединить различные обученные подсети в одну большую сеть, например в следующем порядке:

a. Открывается первая сеть в MemBrain

b. Добавляется вторая сеть к первой, используя команду меню <Файл> <Добавить сеть в текущую сеть …>

c. Переназначаются уже обученные выходные ссылки входных нейронов нижней сети на выходные нейроны верхней сети (Extra Selection (Выберите) выходные нейроны верхней сети. Выберите входные нейроны нижней сети. Затем выберите <Extras> <Re-назначить выходные ссылки из Selection To Extra Selection>.

d. Удаляются старые входные нейроны нижней сети (которые больше не связаны) и изменяется тип старых выходных нейронов верхней сети на <HIDDEN> – произошло объединение двух сетей в одну единую сеть.

Для автоматизации управления нейроконструктором в MemBrain используется язык сценариев (Scripting).

Для ознакомления с возможностями по управлению пакетом с помощью сценариев, в описании пакета MemBrain предусматриваются следующее файлы сценариев:

– Папка «Simple’: ScriptExample.as

– Папка «NetEditor»: Использование NetEditorExample.as

– Папка «TrainValidate»: TrainValidate.as

– Папка «Дополнительно»: MackeyGlass.as

– Папка «SecondsTimer’: UsingSecondsTimerExample.as

– Папка «VoiceRecognition»: VoiceRecognition.as

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

– Выполнение сценариев вручную (Executing Scripts Manually)

– Прерывание или приостановка выполнения скрипта (Aborting or Suspending Script Execution)

– Обработка нейронных сетей в скриптах (Handling Neural Nets)

– Компиляция и выполнение сценария командной строки (Command Line Script Execution)

– Синтаксис скрипта (Script Syntax)

– Справочник по командам (Command Reference)

Каждая обученная сеть может быть отторгнута от родительской нейросети процедурой генерации C-кода сформированной нейронной сети.

Чтобы сгенерировать исходный код C из текущей загруженной сети, нужно выполнить команду <Code-Generation> <C-Code> <Generate Code>.

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

NeuralNetDef. h

NeuralNetDef. c

которые генерируются в каталоге, настроенном как часть конфигурации сгенерированного C-кода (C-Code Generation Configuration).

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

Библиотека генерации C-кода (MemBrain C-Code Generation Library), состоит из следующих файлов, которые находятся в подкаталоге C_CODE установочного каталога MemBrain:

NN_Types. h

NeuralNet. c

NeuralNet. h

Neuron. c

Neuron. h

NeuralLink. c

NeuralLink. h

Random. c

Random. h

Отечественный нейроконструктор «NeuroPro» умеет строить многослойные нейронные сети с сигмоидной функцией активации. В отличие от многих других нейропрограмм, NeuroPro умеет показывать структуру используемой нейросети в текстовом виде. Это набор формул, последовательно описывающих все преобразования, происходящие с данными, поступающими на вход сети до самого выхода из сети. Формулы включают в себя каждый слой, каждый нейрон, каждую связь, с уже подставленными (обученными) значениями весов каждой связи. По сути, набор этих формул можно рассматривать как исходный код программы на некоем абстрактном языке программирования. Такое описание позволяет: