Нейросетевое программирование. Инструментарий нейрокомпьютинга

Текст
0
Отзывы
Читать фрагмент
Отметить прочитанной
Как читать книгу после покупки
Нейросетевое программирование. Инструментарий нейрокомпьютинга
Шрифт:Меньше АаБольше Аа

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

ISBN 978-5-0051-6327-1

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

Нейроконструкции и модели управления

Структурный подход к моделированию мозга реализуется на нескольких уровнях (этапах). В основах теории искусственных нейронных сетей [3] рассматриваются 4 уровня нейросетевого моделирования:

1. Вначале создается информационная модель отдельной нервной клетки – искусственного нейрона (ИН), что составляет первый уровень нейронного моделирования.

2. Ограниченное число ИН далее могут структурироваться в жесткие необучаемые конфигурации – искусственные нейронные ансамбли (ИНА), что составляет второй уровень нейронного моделирования.

3. Третий уровень нейронного моделирования составляют искусственные нейронные сети (ИНС). Это нейросетевые конструкции, которые с помощью специальной процедуры обучения могут гибко изменять свои параметры.

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

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

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

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

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

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

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

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

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

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

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

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

С 2012 года в России началось активное проведение IТ-исследований в сфере разработки искусственных когнитивных систем, разработана стратегическая программа создания центра прорывных исследований в области информационных технологий «Искусственные когнитивные системы».

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

Доступные программные средства можно получить из Интернет. Наиболее подготовлен к такой работе freeware нейроконструктор MemBrain [1—4].

Искусственные нейросети являются электронными моделями нейронной структуры мозга.

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

· способность к обучению и обобщению

· ассоциативность и адаптивность

· толерантность к ошибкам

· параллельность работы

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

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

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

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

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

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

К области машинного обучения относится большой класс задач на распознавание образов. Например, это распознавание символов, рукописного текста, речи, анализ текстов.

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

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

Отдельно выделяется изучение проблем технического творчества систем искусственного интеллекта. Теория решения изобретательских задач, предложенная в 1946 году российским изобретателем Г. С. Альтшуллером, положила начало таким исследованиям [16].

В процессе работы над искусственным интеллектом (ИИ) появились новые виды информации, алгоритмы работы с ними, новые методы получения и обработки данных.

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

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

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

К ним относятся:

– Экспериментальная хаотическая нейросеть:

– Долгосрочная память «Long short term memory (LSTM)»

– Простые комплексы подсетей, такие, как автоэнкодер:

– Комплекс подсетей для образования Глубоких нейросетей и Глубокого обучения.

– Комплекс подсетей для реализации свёрточных сетей

В демонстрационных примерах нейропакета MemBrain рассматриваются характерные их особенности.

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

Нейропакет должен уметь выполнять такие операции, как создать нейросеть, загрузить в неё набор данных, обучить обработке этого набора, вывести в файл результаты [4].

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

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

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

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

 

Инструментарий нейрокомпьютинга

Используемые в MemBrain инструменты представим в виде перевода на русский язык соответствующих частей Help пакета MemBrain:

– Технология создания скрипта, скрипт таймера

– Программная коррекция свойств нейросетей (экспорт нейросети, структура экспортированного csv-файла, система команд нейропакета)

– Управление проведением нейросетевых иследований c помощью «зажигания нейронов»

– Организация интерфейса пользователя в нейросетевой конструкции

– Группирование нейросетей в нейроконструкции

– Свёрточные нейронные сети (Convolutional Neural Networks)

– Вывод обученной нейросети в виде С-кода

– DLL (Dynamic Link Library) нейроконструктора MemBrain

Технология создания скрипта

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

Например, при подготовке нейропакета к работе необходимо произвести его настройку, которая состоит из нескольких часто повторяющихся команд (рассмотрим содержимое файла «Decoder4To16_.as»):

// Отрегулируйте меню вид (view)

ViewSetting (BLACK_BG, true);

ViewSetting (SHOW_GRID, false);

ViewSetting (UPDATE_TEACH, true);

ViewSetting (UPDATE_THINK, true);

ViewSetting (SHOW_FIRE, false);

ViewSetting (SHOW_ACT_SPIKES, false);

ViewSetting (SHOW_LINKS, true);

/*Такая настройка предусматривает вывод на экран всех чертежей на чёрном фоне. Замена в первой строке true на false позволяет значительно повысить восприимчивость графики.

Во второй строке запрещается использовать в чертежах сетку.

В третьй и четвёртой строках разрешается использовать коррекцию в процессе обучения и исполнения нейросетей.

Следующие две строки запрещают использование таких конструкций, как FIRE и SPIKES.

Последняя строка разрешает высвечивать связи на чертежах. Результат такой настройки можно посмотреть в меню View:

*/

Рис.1 Настройки в меню View


//Открыть на экране нейросеть позволяет команда:

OpenNet («Decoder4To16.mbn»);

//в команде указывается название файла, в котором была сохранена нейросеть.


Рис.2 Нейросеть из файла «Decoder4To16.mbn»


//После того, как сеть будет прорисована на экране, необходимо произвести

//рандомизацию всех весов ссылок и порогов активации:

RandomizeNet (); // Или на графике:


Рис.3 Клавиша рандомизации нейросети


//

//Следующие команды продолжают подготовку нейропакета:

ResetThinkSteps (); // Сброс счетчика шагов (уроков), или в окне:


Рис.4 Сброс счетчика шагов (уроков)


//

SetLessonCount (1); // Установить количество уроков (1)

SetLessonCount (4); // в результате чего появится:


Рис.5 Установка «Number of Lessons»


// Здесь указано, что ожидается 4 урока

/*В данном примере предусмотрено 4 урока:

– training lesson (исходный обучающий урок) – исходные файлы mbn & training lesson. mbl

– validate lesson (исходный контролирующий урок) – исходный файл validate lesson. mbl

– активация выходных нейронов (реакция сети на тренировочные данные 1 к уроку №3) – вывод в файл TrainResult. csv

– результаты урока 2 на данные validate lesson (2 к уроку №3) – вывод в файл ValidateResult. csv

их адреса высвечиваются на экране после входа в Lesson Editor —> Lesson Files —> Урок №1. В скрипт – программе это записывается в виде крманды:

*/

SelectLesson (1); //начинается с меню Lesson Editor:


Рис.6 Загрузка урока 1


//

//Выполняется загрузка необходимых для работы данных, настройка учителя и обучение:

LoadLesson («Decoder4To16_Training. mbl»); // Загрузите обучающий урок

//Чтобы полностью просмотреть сеть (последней командой она была закрыта редактором уроков), уберите с экрана редактор урока, чтобы полностью стала видна сеть.

ShowLessonEditor (false);

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

SelectTeacher («RPROP»); // Используйте учителя с именем «RPROP»

//Настройте учителя (Adjust the teacher) – настройку можно произвести через окно //Teacher Manager:


Рис.7 Настройка учителя


//

//Или с помощью команл:

TeacherSetting (LEARNRATE, 0.1); // Скорость обучения

TeacherSetting (TARGET_ERR, 0.3); // Установка допустимой целевой ошибки

TeacherSetting (LESSON_REPS, 1); // Повторение урока за шаг обучения

TeacherSetting (PATTERN_REPS, 1); // Повторение паттернов за шаг обучения

//Определите метод выбора шаблона:

TeacherSetting (PATTERN_SELECT, RAND_ORDER);

SetTeachSpeed (0); // Установка максимальной скорости обучения

//и так далее

//Запустите просмотрщик ошибок

ShowErrorViewer (true);

//и уберите его с экрана

ResetErrorViewer ();

//Начните обучение и дождитесь остановки после достижения целевой ошибки

StartTeaching ();

SleepExec (); // Ожидание окончания обучения

//Снова скрыть средство просмотра ошибок

ShowErrorViewer (false);

//Сбросить счетчик шагов (уроков)

ResetThinkSteps ();


//Теперь подготовьте урок №3, чтобы записать результаты работы сети при выполнении урока №1.


//Сохраните значения активации выходных нейронов

SetRecordingType (RT_ACT);

//Включите запись данных на занятие №3

StartRecording (3);

//Скрыть редактор урока

ShowLessonEditor (false);

//Установка времени для записи целого урока во внутреннюю память MemBrainSetThinkSpeed (500); //500 мс между этапами обдумывания для анимации


//Запись реакции сети на тренировочные данные к уроку №3

ThinkLesson (); // Выполните каждый шаблон урока №1 (и запишите на №3)

SleepExec (); // Ожидание окончания выполнения урока

//Отключение записи после окончания урока (500 мс)

StopRecording ();

SelectLesson (2); // Загрузка урока №2 с данными для проверки

LoadLesson («Decoder4To16_Validate. mbl»);

//Этот урок только для ввода. Не нужны никакие выходные данные,

EnableLessonOutData (false);

//Запишите значения активации выходных нейронов

SetRecordingType (RT_ACT);


//Включить запись данных на урок №4

StartRecording (4);

ShowLessonEditor (false); // Скрыть редактор урока

ThinkLesson (); // Выполните каждый шаблон урока №2 (и запишите на №4)

SleepExec (); // Ожидание окончания обучения («Think on Lesson)

StopRecording (); // Отключить запись


//Теперь экспортируйте уроки №3 и 4 в CSV

SelectLesson (3);

ExportLessonRaw («Decoder4To16_TrainResult. csv»);

SelectLesson (4);

ExportLessonRaw («Decoder4To16_ValidateResult. csv»);


/*Раскомментируйте следующую строку, если вы хотите, чтобы MemBrain завершал работу после выполнения скрипта*/

// ExitMemBrain ();


/*Описанная здесь последовательность команд может быть представлена в виде скриптового файла с расширением. as – файла ("MemBrainScript1.as».


Для запуска скрипта в основном меню пакета набрать Scripting -> Execute Script:


Рис.8 Запуск скрипта


*/

В открывшемся окне выделить название скрипта:


Рис.9 Имя скрипта


После выполнения скрипта полученные результаты выведены на экран в том порядке, как они были указаны в скрипте:


Рис.10 Результат выполнения скрипта


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

После загрузки сети первым вводился файл Decoder4To16_Training. mbl. Содержимое этого файла можно вывести из MemBrain в файл с расширением csv для дальнейшего просмотра на экране или для вывода на принтер. Номер выводимого из MemBrain файла нужно набрать клавишами Currently Edited (Training) Lesson. После этого активировать Raw CSV Files -> Export Current Lesson (Raw CSV…). В окне Export Lesson As (Raw CSV) … набрать имя создаваемого сsv файла и щёлкнуть по клавише «сохранить».

Необходимая для работы скрипта информация содержится в файлах:

Decoder4To16_Training. mbl

Decoder4To16_TrainResult. csv

Decoder4To16_Validate. mbl

Decoder4To16_ValidateResult. csv

Файлы с расширением mbl содержат двоичный код вводимых данных. Их ввод осуществляется через Lesson Editor:


Рис.11 Загрузка mbl-файла


Lesson Editor -> Lesson Files -> Load Current Lesson.

Скриптовый файл может не содержать пояснений – самое важное – это команды. Редкие пояснения даются в виде комментариев.

Для примера: скрипт таймера SecondsTimer.as

/* – — – — – — – — – — – — – — – — – — – — – — – — —

Этот пример демонстрирует, как функция сценария Now () может использоваться для поддержки произвольного числа таймеров с разрешением 1 с.

Чтобы использовать таймеры в вашем собственном скрипте, просто включите этот файл в ваш скрипт, используя директиву #include.

Затем создайте экземпляр класса «SecondsTimer’ для каждого необходимого вам таймера. Обратите внимание, что функции таймера содержат отладочный код, который печатает сообщения в окне трассировки MemBrain.

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

– — – — – — – — – — – — – — – — – — – — – — – — – —

*/


/* Глобальная переменная для подсчета экземпляров класса. Используется только для генерации отладочных сообщений.

AngelScript пока не поддерживает статические члены класса. Вот почему это должна быть глобальная переменная.

*/

uint gSecondsTimerInstanceCount = 0;


class SecondsTimer

{

// Constructor without arguments

SecondsTimer ()

{

mId = gSecondsTimerInstanceCount++;

mReferenceTime = Now ();

}


// Constructor with initial elapse time [s] (начальное время истечения)

SecondsTimer (uint seconds)

{

mId = gSecondsTimerInstanceCount++;

// Получить текущее время, добавить прошедшие секунды и сохранить полученное время.

int now = Now ();


mReferenceTime = now + seconds;


// Только для целей отладки:

/*

string timeStr;

TimeToString (now, timeStr);

Trace (timeStr);

TimeToString (mReferenceTime, timeStr);

Trace (» Timer " + mId + " started. Will elapse at:" + timeStr + "\n»);

строка timeStr;

TimeToString (now (сейчас), timeStr);

Trace (Трассировка) (timeStr);

 

TimeToString (mReferenceTime, timeStr);

Trace («Таймер» + mId + «запущен. Пройдет по адресу (закончится):" + timeStr + "\ n»);

*/

}


~SecondsTimer ()

{

gSecondsTimerInstanceCount – ;

}


// Проверяем, истек ли таймер

bool IsElapsed ()

{

int now = Now ();

bool elapsed = now> = mReferenceTime;

return elapsed;

}


// Запускаем таймер по истечении заданного времени

void Start (uint seconds)

{

// Получить текущее время, добавить прошедшие секунды и сохранить полученное время.

int now = Now ();

mReferenceTime = now + seconds;

}


// Запускаем таймер для подсчета секунд

void Start ()

{

// Получить текущее время, установить время истечения на то же значение.

int now = Now ();

mReferenceTime = now;

}


// Return the elapsed seconds since the timer was started

int SecondsSinceStart ()

{

// Получить текущее время

return Now () – mReferenceTime;

}


// Контрольное время для этого таймера

int mReferenceTime;

// ID таймера для этого таймера (необходим только для отладочных сообщений)

uint mId;

};

Бесплатный фрагмент закончился. Хотите читать дальше?
Купите 3 книги одновременно и выберите четвёртую в подарок!

Чтобы воспользоваться акцией, добавьте нужные книги в корзину. Сделать это можно на странице каждой книги, либо в общем списке:

  1. Нажмите на многоточие
    рядом с книгой
  2. Выберите пункт
    «Добавить в корзину»