Методика построения системы принятия решений на основе логической нейронной сети
Аннотация: Обобщается опыт построения и исследования конкретных систем принятия решений и строится методика их создания. Методика сопровождается рекомендациями по упрощению систем принятия решений, сведению логических нейронных сетей к однослойным.
Это облегчает верификацию, достижение полноты и непротиворечивости, снижает требования к производительности компьютеров, делает возможным применение универсальных инструментальных программных и аппаратных средств.
Таким образом, моделируемое нейронной сетью ассоциативное мышление становится ясным и исчерпывающим, что свойственно военным людям.
Объединим ряд рекомендаций, рассредоточенных выше.
1. Можно понять Природу, где сначала создаётся необученный мозг, который всю жизнь следует заполнять знаниями. Другое дело наши разработки средств хранения и ассоциативной выборки знаний.
Зачем нам идти таким кружным путём: сначала выбирать нейросеть, а затем заполнять её знаниями – обучать? Разве только для достижения максимального наукоподобия наших исследований?
Занимаясь конкретной задачей распознавания, управления или принятия решений, мы стремимся к максимальному упрощению решения этой задачи искусственного интеллекта. Ведь мы можем сразу построить уже обученную нейронную сеть на основе логического описания задачи! Мы видели, что такая нейросеть допускает любое развитие.
С досадой воспринимается случай, когда исследователь, даже прослушавший курс, не признаёт предлагаемых результатов. Он следует “классическим” путём, упоминаемым выше, и с удивлением выслушивает замечание:
– Смотри, ты в результате обучения методом “обратного распространения ошибки” получил те самые синапсические веса, которые ты мог получить при непосредственном построении обученной логической нейронной сети на основе логического описания твоей системы принятия решений! Но это – слишком просто?!.
2. Мы видим, что в природе нейрон – инструмент выполнения функции активации. Работа “живого” нейрона, обусловленная “мясными” технологиями, сложна. Известно, что для его возбуждения должны свершиться до 240 химических реакций! Но нас интересует только логика его работы, и моделировать эти реакции на логическом уровне нет смысла.
Информационные технологии логических нейронных сетей используют простые функции активации, некоторые виды которых рассмотрены выше. Однако при моделировании нейрон может воспроизводиться как аппаратно – в составе нейрокомпьютера, так и в виде программной процедуры.
Так, в общем, и следует считать: нейрон (нейроподобный элемент) – это инструмент реализации процедуры выполнения функции активации.
3. Корректно построенная система принятия решений при формировании факторного пространства учитывает использование исчерпывающих множеств событий . Например, это означает, что если используются времена года, то должны учитываться все эти времена. Иначе СПР будет не полной.
Отрицание некоторой переменной – события, встречающееся в описании СПР, подразумевает, что имеет место некоторое другое событие из того же исчерпывающего множества. Например, операция отрицания НЕ “зима” означает, что “или весна”, “или лето”, “или осень”.
Записывается: НЕ “зима” = “весна” ИЛИ “лето” ИЛИ “осень”.
Это означает, что в логическом описании СПР в общем случае логическая операция отрицания не участвует, а участвуют только операции конъюнкции и дизъюнкции.
Более того, составив логическое описание, не следует торопиться с его воплощением в виде логической нейронной сети. Описание может быть преобразовано так, чтобы нейросеть получилась наиболее простой и обеспечивала максимальную достоверность выводов.
Тогда, можно представить технологию построения логической нейронной сети для системы принятия решений.
Нейронная сеть готова к употреблению по нечётким данным! Необходимо лишь произвести её верификацию по известным решениям.
Ещё раз отметим (это – настоятельная рекомендация!), что всегда существует возможность так упростить логическую нейронную сеть, что она сделается однослойной. Однослойная сеть, помимо слоя рецепторов, обладает единственным слоем нейронов – носителей функции активации (если отсутствуют обратные связи). Этот слой является и выходным.
Построение однослойной нейронной сети производится на основе представления всех логических функций, образующих описание СПР, в дизъюнктивной нормальной форме .
Далее, если необходимо, производится размножение решений – закрепление одинаковых решений за одной или несколькими конъюнкциями (объединёнными дизъюнкцией) отдельно.
(Отметим, что при построении однослойной сети для дяди Рамзая мы не строили дизъюнкцию конъюнкций, но нейронная сеть работает правильно!) Важно отметить, что размноженные решения не долго остаются одинаковыми. Ведь целесообразно дополнить текст этих решений хотя бы указанием на то, по какой причине они принимаются.
А как строить логические нейронные сети с обратными связями? Не являются ли рекомендации выше ориентированными исключительно на формальный подход? Да, несомненно, доля формализма здесь присутствует, и при введении обратных связей не обойтись без творческого осмысления сути предмета исследования – того реального процесса управления, который предстоит автоматизировать.
Практическая рекомендация здесь может заключаться в следующем:
По указанной методике следует построить логическую нейронную сеть без обратных связей.
Затем, применив известную долю изобретательности, добавить в нейросеть обратные связи, как это было продемонстрировано в “Развитие логической нейронной сети для распознавания объектов по заданному набору признаков” , “Логические нейронные сети с обратными связями” и “Нейросетевые модели пошаговой оптимизации, маршрутизации и тактических игр” . Примеры показывают, что веса обратных связей могут быть как положительными, так и отрицательными, а также – переменными. Вместе с тем и выбор функции активации может представлять творческую, остроумную задачу.
На рис.13.1 представлены основные этапы построения СПР.
увеличить изображение
Рис. 13.1. Этапы разработки СПР
Ассоциативному мышлению адекватны логические нейронные сети, создаваемые на основе логического описания системы управления или принятия решений в терминах алгебры высказываний о принадлежности исходных данных – значениям, объектам, диапазонам изменений.
Если СПР функционально полностью определена и может быть описана в терминах математической логики, то по этому описанию целесообразно строить уже обученную нейронную сеть. Несложность такого построения способствует тому, что при модификации СПР обученная нейросеть может легко развиваться либо быть построена заново.
В то же время правомерен подход, при котором нейросеть заданной структуры обучается для конкретного применения или переобучается. Алгоритмы такого обучения представлены в [6, 7].
Структура обученной логической нейросети полностью совпадает со структурой логической схемы системы управления и принятия решений.
Составление полного и непротиворечивого логического описания – первый этап выполнения методики построения логической нейронной сети для СПР.
Ранее показывалось, что в терминах алгебры высказываний (математической логики) СПР описывается системой логических выражений вида
( 13.1)
где, — логические переменные-высказывания о наступлении событий, принимающие значения ИСТИНА (1), если событие наступило, и ЛОЖЬ (0) в противном случае;, — логические функции указанных переменных-высказываний, значение ИСТИНА которых определяет принимаемое решение.
Для непротиворечивости и полноты СПР необходимо и достаточно, чтобы для каждого набора высказываний не более чем одна логическая функция в (13.1) принимала значение ИСТИНА и чтобы не существовало такого набора переменных-высказываний на основе факторного пространства событий, для которого в системе (13.1) все логические функции имеют значение ЛОЖЬ.
Напоминаем, что при логическом описании СПР используются операции конъюнкции и дизъюнкции, но не используется операция отрицания.
Это объясняется тем, что в интересах корректности и полноты отображения предмета исследований в СПР каждый задействованный фактор должен учитываться в рамках модели исчерпывающего множества событий .
Учитываются все возможные значения или состояния этого фактора. Каждый фактор А представлен множеством состояний (событий, значений, диапазонами значений).
Это множество формируется так, что выполняется условие нормировки, где— предполагаемая пользователем (!) вероятность (достоверность) наступления события.
Например, при построении системы штрафования водителей за превышение скорости V представляется логичным охват всего возможного диапазона предполагаемого превышения, например:
Такое описание учитываемого фактора, в данном случае – скорости, не оставляет открытым вопрос: “Что делать, если скорость принадлежит неучтённому диапазону изменения?”
При рассмотренном способе корректного и полного учёта всех возможных событий отрицание некоторого события означает возможность альтернативного выполнения (в смысле логической операции ИСКЛЮЧАЮЩЕЕ ИЛИ) всех других событий из исчерпывающего множества:
Вторым этапом выполнения методики, в силу специфики дальнейшего перехода от булевых переменных к достоверности событий, является дистрибутивное преобразование логических функций (13.1) к виду, который обеспечивает единственность вхождения всех переменных, участвующих в одном логическом выражении. При этом рассмотрение лишь исчерпывающих множеств событий приводит к отсутствию их отрицаний.
Это преобразование во многом основано на свойстве дистрибутивности конъюнкции по отношению к дизъюнкции и дизъюнкции по отношению к конъюнкции.
Правила эквивалентных преобразований логических выражений широко известны. (В теории математической логики такое преобразование связано с формированием дизъюнктивной или совершенной дизъюнктивной нормальной формs .
) Однако указанная специфика свойства дистрибутивности гарантирует возможность с помощью последовательного вынесения за скобки обеспечить единственность вхождения каждой используемой переменной в отдельное логическое выражение.
Необходимость такого преобразования обусловлена заменой операций конъюнкции и дизъюнкции их приближённым “суррогатом” — функцией активации. Практически такая функция основана на суммировании (взвешенных) сигналов на входе нейрона. Тогда неоднократность вхождения, т.е. суммирования, одних и тех же сигналов становится недопустимой.
Однако не всегда подобное преобразование приводит к успеху. Тогда используется приём размножения решений , основанный на том, что логическое выражение разбивается на составляющие выражения – конъюнкции, объединённые операцией дизъюнкции. (Это и есть дизъюнктивная нормальная форма .) Для всех таких выражений, заменяющих прежнее, определяется одинаковое решение.
В результате преобразований каждое выражение логического описания в общем случае представляет собой скобочную запись с более чем одним уровнями вложенности.
Однако указанное свойство функции активации, сводящей две логические операции к одной – арифметической, порождает возможность существенного упрощения нейросети, а именно, — сведение её к однослойной.
Ранее было показано, что с помощью приёма размножение решений такое сведение всегда возможно. Однако оно приводит к “дроблению” сети, к размножению путей получения одних и тех же решений, к перегрузке сети заданной фиксированной структуры на этапе её обучения.
В то же время многие реальные процессы по самому смыслу своему (экономические системы, управляющие, технологические и др.
) адекватны не просто однослойным логическим нейронным сетям, но даже сетям совершенным.
В их описании левая часть каждого логического выражения является конъюнкцией “представителей” обязательно всех исчерпывающих множеств событий , в совокупности образующих факторное пространство.
Анализ на возможность построения однослойной нейросети целесообразно проводить на этом же этапе выполнения методики до выполнения дистрибутивных преобразований.
Самый простой способ такого анализа заключается в следующем. Для каждого логического выражения в (13.1) выпишем без повторения множества используемых в них переменных (сформируем обобщённые эталоны).
Проведём совместный анализ обобщённых эталонов, составленных по всем логическим выражениям, и установим, отсутствует ли полное вхождение одного из таких эталонов в другой? Если такое вхождение отсутствует (пересечение обобщённых эталонов допустимо), то возможно построение однослойной нейросети, т.е.
непосредственное соединение связями нейронов-рецепторов с нейронами выходного слоя. Более того, если все обобщённые эталоны содержат одинаковое число переменных, возможно построение совершенной нейронной сети.
Если некоторый обобщённый эталон входит в состав другого, а разработка связана какими-то дополнительными условиями (структура сети задана, известная сеть доучивается и др.), необходимо полное воспроизведение структуры логических связей, что приводит к многослойной нейросети.
Мы в этой книге не рассматриваем подробно возникающие при этом трудности [6], но должны предупредить, что при реализации структурированного логического описания возникают проблемы. Они связаны и с более сложным алгоритмом трассировки, и с необходимостью коррекции порогов, а также весов связей – для повышения достоверности результатов.
(При построении нейронов – конъюнкторов и нейронов – дизъюнкторов в Лекциях 2 и 3 мы видели, что веса синапсических связей нейрона для реализации этих функций различны.)
Так что стремитесь построить однослойную, ещё лучше, – совершенную логическую нейронную сеть ! Это всегда возможно, если следовать по пути первоначального накопления базы знаний (БЗ) на основе нахождения связи между исследуемыми ситуациями и принимаемыми по ним правильными решениями. Тем более что такой подход на уровне логического описания приводит к применению только конъюнкций. Следовательно, все нейроны сети используются одинаково. Каждый реализует “суррогат” конъюнкции.
Бум нейросетей: Кто делает нейронные сети, зачем они нужны и сколько денег могут приносить — Будущее на vc.ru
В первой половине 2016 года мир услышал о множестве разработок в области нейронных сетей — свои алгоритмы демонстрировали Google (сеть-игрок в го AlphaGo), Microsoft (ряд сервисов для идентификации изображений), стартапы MSQRD, Prisma и другие.
Редакция vc.ru рассказывает, что из себя представляют нейронные сети, для чего они нужны, почему захватили планету именно сейчас, а не годами раньше или позже, сколько на них можно заработать и кто является основными игроками рынка. Своими мнениями также поделились эксперты из МФТИ, «Яндекса», Mail.Ru Group и Microsoft.
Что собой представляют нейронные сети и какие задачи они могут решать
Нейронные сети — одно из направлений в разработке систем искусственного интеллекта.
Идея заключается в том, чтобы максимально близко смоделировать работу человеческой нервной системы — а именно, её способности к обучению и исправлению ошибок.
В этом состоит главная особенность любой нейронной сети — она способна самостоятельно обучаться и действовать на основании предыдущего опыта, с каждым разом делая всё меньше ошибок.
Нейросеть имитирует не только деятельность, но и структуру нервной системы человека. Такая сеть состоит из большого числа отдельных вычислительных элементов («нейронов»). В большинстве случаев каждый «нейрон» относится к определённому слою сети.
Входные данные последовательно проходят обработку на всех слоях сети. Параметры каждого «нейрона» могут изменяться в зависимости от результатов, полученных на предыдущих наборах входных данных, изменяя таким образом и порядок работы всей системы.
Руководитель направления «Поиск Mail.ru» в Mail.Ru Group Андрей Калинин отмечает, что нейронные сети способны решать такие же задачи, как и другие алгоритмы машинного обучения, разница заключается лишь в подходе к обучению.
Все задачи, которые могут решать нейронные сети, так или иначе связаны с обучением. Среди основных областей применения нейронных сетей — прогнозирование, принятие решений, распознавание образов, оптимизация, анализ данных.
Директор программ технологического сотрудничества Microsoft в России Влад Шершульский замечает, что сейчас нейросети применяются повсеместно: «Например, многие крупные интернет-сайты используют их, чтобы сделать реакцию на поведение пользователей более естественной и полезной своей аудитории.
Нейросети лежат в основе большинства современных систем распознавания и синтеза речи, а также распознавания и обработки изображений. Они применяются в некоторых системах навигации, будь то промышленные роботы или беспилотные автомобили.
Алгоритмы на основе нейросетей защищают информационные системы от атак злоумышленников и помогают выявлять незаконный контент в сети».
В ближайшей перспективе (5-10 лет), полагает Шершульский, нейронные сети будут использоваться ещё шире:
Заведующий лабораторией нейронных систем и глубокого обучения Центра живых систем МФТИ Михаил Бурцев приводит предположительную карту развития нейронных сетей на 2016-2018 годы:
- системы распознавания и классификации объектов на изображениях;
Робот управляемый нейронной сетью
Предисловие:
Цели эксперимента:
1) Установить возможность запуска нейронной сети на контроллере Arduino. 2) Установить пригодность ее работы в поставленных условиях. 3) Определить наилучшую топологию сети. Для решения поставленной задачи были выбраны следующие комплектующие: 1) Контроллер –Arduino 328 2) Колесная платформа – самодельная. 3) Датчик расстояния – HC – SR04 4) Датчик света – фоторезистор. 5) Датчик звука – китайский микрофон с логическим выходом. 6) Нейронная сеть – 2 слоя, 5 нейронов в каждом Так же были сформированы дополнительные требования: 1) Сеть должна обучаться отдельно (На ПК). 2) Параметры сети должны загружаться в контроллер на лету, без перепрашивки. Забегая немного вперед, хочу пояснить третий пункт. С топологией «проиграться» практические не удалось, оперативная память контроллера наложила ограничения. Изначально топология сети была трехслойной (5 – 8 — 5).
Чему и как будем учить?
Из конструкции робота видно, что даже без использования нейронной сети, его возможности ограничены. Максимум что можно «логически» запрограммировать, это обход препятствий с выбором наилучшего направления, включение/выключение робота по звуку или уровню освещенности и. т.
д, одним словом в интернете масса подобных поделок. Но вот какая штука – все это быстро надоедает,… Что если захотелось что- то поменять, например реакцию на свет или звук или получить некоторую непредсказуемость в поведении.
Конечно, можно предусмотреть все это в программе контроллера, данные грузить с SD карточки, а непредсказуемость получить простым рандомом. Но мы не ищем легких путей…:). Делать будем так: пусть все выше перечисленные задачи решает нейронная сеть.
Обучать будем методом обратного распространения ошибки. Кстати о том что такое нейронная сеть и алгоритм обратного распространения можно прочитать и
Коэффициенты сети будут переноситься в контроллер посредством SD карты.
Как же это работает?
Был заложен следующий принцип работы:
На компьютере:
1) Создается обучающая выборка 2) Сеть обучается до тех пор, пока глобальная ошибка на всех выборках не станет равной нулю.(на самом деле будет немного не так) 3) После обучения создается отчет и файл для контроллера. 4) Файл записывается на карточку.
На Arduino:
1) После включения с SD карточки загружаются параметры сети. 2) После загрузки сеть готова к работе. 3) На основании показаний датчиков формируется «вектор данных». 4) Этот вектор подается на вход сети. 5) После просчета, выходной вектор сети подается на дешифратор. 6) Дешифратор, в зависимости от результата работы сети, определяет тип команды и выполняет ее. 7) Цикл повторяется с пункта 3, Вектором данных я буду называть одномерный массив определенной размерности, элементы этого массива – числа. Скажем, что в нулевом элементе будет храниться расстояние до препятствия справа, в первом расстояние в прямой видимости и.т.д. Почему же все-таки вектор? Когда я только начинал разбираться с нейронными сетями я сформировал для себя следующие понятие: «любой набор данных есть точка в N мерном пространстве». В нашем случае пространство будет размерности 5. Да, да такие бывают :). Вот точное расположение данных в массиве: input[0] – расстояние с права. input[1] – расстояние в прямой видимости. input[2] – расстояние слева. input[3] – значение фоторезистора. Input[4] – уровень микрофона (1 или 0) Собственно куда же без картинки 🙂
Железо:
Честно говоря, я не очень сильно хочу уделять сильное внимание этому пункту. Причина этого желания в том, что сам робот в первую очередь не является объектом исследования а его реализация банальна. Единственное о чем я хочу рассказать, это об драйвере двигателей L293D.
Эту замечательную микросхему я использовал в силу отсутствия готового шилда. Честно говоря, в электронике я не селен и подключил ее по первой загугленной схеме. В итоге оказалось, что для управления направлением вращения приходилось переводить ножку в состояние INPUT.
Это было весьма не привычно, и я до сих пор не знаю чем это может аукнуться… Насчет колес…в качестве редукторов были использованы серво — машинки, переделанные на постоянное вращение. Все остальные примочки как датчик расстояния и SD card модуля были подключены по стандартным схемам.
Немного фото:Да, качество сборки на 3 🙂
Часть программная:
Даже не знаю с чего начать. С одной стороны тут нет ни каких велосипедов все стандартно: Начнем с программы для ПК: Написана она, а точнее они на C#. Потому что это достаточно простой язык и я часто использую его в своей работе, но не об этом. В программах нет классов все сделано в «функциональном» стиле для более простого понимания начинающим.
Как Вы успели понять программ две: Первая это простой интерфейс, код которого не заслуживает тут присутствовать ибо та все очень просто. Будет только скриншот:Тут все предельно просто: движками крутим значение на входах, выбираем мысленно реакцию на эти данные из предложенных пяти и ставим галочку. Жмем «добавить».
В результате работы получается файл вот с таким содержанием:Слева двоеточия что подаем на вход, справа то, что хотим получить. После того как мы заполнили этот файл, нажимаем кнопку «Создать» и он автоматически передается другой программе. Собственно та другая программа выполняет две функции: учит сеть на предъявленных данных и формирует отчет.
Начнем с конца: Вот такой отчет хороший:Хороший он потому, что строки Input Res и NET OUT совпадают. Это говорит о том, что при подачи на вход Input data мы хотели бы получить Input Res, а получаем NET OUT. Так что о качестве работы сети мы будем судить из этого отчета. Теория гласит, что при обучении сети образцы стоит предъявлять в случайном порядке.
К чему я это – в моей практике это, на первый взгляд, незначительное утверждение в действительности влияет на скорость сходимости алгоритма. Так же на скорость влияет и первоначально выбранные веса. Бывало что с первой попытки алгоритм не сходился, приходилось по несколько раз запускать обучение для того что бы добиться результата.
Я не знаю стоит ли приводить полный код программы вместе с парсером файлов и созданием выходного файла для контроллера.
Так что приведу на свой взгляд только самые важны моменты в одном листинге: static int InputN = 5, //Входные нейронны OutN = 5; //Выходные нейроны static int InputW = 5, //Веса на входе OutW = 5; //Веса на выходе static Random run = new Random(); //Гениратор случайностей static float[,] INPUT_W = new float[InputN, InputW]; //Входной слой static float[,] OUTPUT_W = new float[OutN,OutW]; //Выходной слой static float[] INPUT_RESULT = new float[InputN]; //Выход первого слоя static float[] OUTPUT_RESULT = new float[OutN]; //Выход последнего слоя static float[] OUTPUT_ERROR = new float[OutN]; //Ошибка на выходе static float[] INPUT_ERROR = new float[InputN]; //Ошибка на входе static float Sig = 0.5f; //Значение порога static float etta = 0.001f; //Значение параметра скорости static List Input_patern = new List(); //Входные данные static List Out_patern = new List(); //Ответы /*Инициализация весов*/ static void init_net() { for (int i = 0; i < InputN; i++){ for (int j = 0; j < InputW; j++){ INPUT_W[i, j] = (float)run.NextDouble() - 0.5f; } } for (int i = 0; i < OutN; i++){ for (int j = 0; j < OutW; j++){ OUTPUT_W[i, j] = (float)run.NextDouble() - 0.5f; } } } /*Прямой проход*/ static void DirectMotion(float[] vector) { if (vector.Length > InputW) { return; } /*Первый слой*/ for (int i = 0; i < InputN; i++){ INPUT_RESULT[i] = 0.0f; for (int j = 0; j < InputW; j++){ INPUT_RESULT[i] += INPUT_W[i, j] * vector[j]; } INPUT_RESULT[i] = Sigma(INPUT_RESULT[i]); } /*Выходной слой*/ for (int i = 0; i < OutN; i++){ OUTPUT_RESULT[i] = 0.0f; for (int j = 0; j < OutW ; j++){ OUTPUT_RESULT[i] += OUTPUT_W[i, j] * INPUT_RESULT[j]; } OUTPUT_RESULT[i] = Sigma(OUTPUT_RESULT[i]); } } static float BackPropagation(float[] vector, float[] target) { /*--------------------------------Прямой проход-------------------------------------------*/ DirectMotion(vector); /*----------------------------------------------------------------------------------------*/ /*--------------------------------Расчет ошибки-------------------------------------------*/ /*Ошибка на выходе*/ for (int i = 0; i < OUTPUT_ERROR.Length; i++) { OUTPUT_ERROR[i] = 0.0f; OUTPUT_ERROR[i] = target[i] - OUTPUT_RESULT[i]; } /*Ошибка на входе*/ for (int neurons = 0; neurons < INPUT_ERROR.Length; neurons++){ INPUT_ERROR[neurons] = 0.0f; for (int out_n = 0; out_n < OutN; out_n++) { INPUT_ERROR[neurons] += OUTPUT_ERROR[out_n] * OUTPUT_W[out_n, neurons]; } } /*-----------------------------------------------------------------------------------------*/ /*---------------------------------Коррекция ошибки----------------------------------------*/ /* Входной слой */ for (int n = 0; n < InputN; n++){ for (int w = 0; w < InputW; w++){ INPUT_W[n, w] += (etta * INPUT_ERROR[n] * vector[w]); } } /*Выходной слой*/ for (int n = 0; n < OutN; n++){ for (int w = 0; w < OutW; w++){ OUTPUT_W[n, w] += (etta * OUTPUT_ERROR[n] * INPUT_RESULT[w]); } } /*------------------------------------------------------------------------------------------*/ /*возвращаем ошибку на текущем наборе...*/ return calculate_global_error(); } static float calculate_global_error() { float error = 0.0f; for (int i = 0; i < OUTPUT_ERROR.Length; i++) { error += Math.Abs(OUTPUT_ERROR[i] * OUTPUT_ERROR[i]); } return error * 0.5f; } static void Learn() { int Iteration = 0; float Error = 0.0f; while (Iteration < 250000) { Error = 0.0f; for (int paterns = 0; paterns < Input_patern.Count; paterns++) { Error += BackPropagation(Input_patern[paterns], Out_patern[paterns]); } Console.WriteLine(Error); Iteration++; } } /*Пороговая функция активации*/ static float Sigma(float value) { if (value >= Sig) { return 1.0f; } return 0.0f; } Собственно ни чего сложного. Как мы видим из кода в качестве функции активации нейронов выбрана пороговая функция с параметром срабатывания 0,5. Это позволяет избавиться от производных при обучении, а на контроллере не тратить время на вычисление значения логистической функции. Хотя при этом мы жертвуем временем сходимости алгоритма (это не научная теория, а лишь мои наблюдения на практике). Да, возможно кто то заметил, что в процессе обучения стоит константное число итераций. Это связанно с тем, что иногда сеть проваливается в локальные минимумы, при этом ошибка равно нулю, а вот качество обучения порой ужасное. Так что пришлось сделать так… Возможно я что то делаю неверно… если кто то заметит, скажите пожалуйста. Собственно код Arduino: #include #include #include #define R_F 5 #define L_F 8 #define R_R 6 #define L_R 9 #define TRIG 4 #define ECHO 7 #define INPUT_W_COUNT 5 // #define INPUT_N_COUNT 5 // #define OUTPUT_W_COUNT 5 // #define OUTPUT_N_COUNT 5 // #define INPUT_VECTOR_SIZE 5 // #define TMP_VECTOR_SIZE 50 // #define START_ANGLE 130 #define RIGHT_ANGLE 55 #define LEFT_ANGLE 180 #define SERVO_PIN 3 #define MIC_PIN 2 #define REZISTOR_PIN 0 /*Для чтения данных с флешки*/ File myFile; /*Датчик растояния*/ Ultrasonic dist(TRIG, ECHO); /*голова :)*/ Servo servo; float input[INPUT_VECTOR_SIZE]; float Wtmp[TMP_VECTOR_SIZE]; /*Веса первого слоя*/ float INPUT_W[INPUT_N_COUNT][INPUT_W_COUNT]; /*Веса выходного слоя*/ float OUTPUT_W[OUTPUT_N_COUNT][OUTPUT_W_COUNT]; float INPUT_OUT[INPUT_N_COUNT]; //Выход первого слоя float NET_OUT[OUTPUT_N_COUNT]; //Выход сети int FileCount = 0, CountW = 0; void setup(){ servo.attach(SERVO_PIN); servo.write(START_ANGLE); delay(1000); ReadDataFromSD(); delay(1000); } void loop(){ /*Получаем данные с датчиков*/ CreateVector(); /*Расчитываем выход сети*/ NeuralNetUpdate(); } /*Пересчет выхода сети*/ void NeuralNetUpdate(){ /*Входной слой*/ for(int N = 0; N < INPUT_N_COUNT; N++){ INPUT_OUT[N] = 0.0; for(int W = 0; W < INPUT_W_COUNT; W++){ INPUT_OUT[N] += input[W] * INPUT_W[N][W]; } INPUT_OUT[N] = Sigmoid(INPUT_OUT[N]); } /*Выходной слой*/ for(int N = 0; N < OUTPUT_N_COUNT; N++){ NET_OUT[N] = 0.0; for(int W = 0; W < OUTPUT_W_COUNT; W++){ NET_OUT[N] += INPUT_OUT[W] * OUTPUT_W[N][W]; } NET_OUT[N] = Sigmoid(NET_OUT[N]); if(NET_OUT[N] == 1.0){ command(N); } } } float Sigmoid(float value){ if(value > 0.50f){return 1.0;} return 0.0f; } void CreateVector(){ input[1] = (float)dist.Ranging(CM); input[3] = analogRead(0); input[4] = digitalRead(2); } void LoadInputW(){ for(int N = 0; N < INPUT_N_COUNT; N++){ for(int W = 0; W < INPUT_W_COUNT; W++){ INPUT_W[N][W] = Wtmp[CountW]; CountW++; } } } void LoadOutputW(){ for(int N = 0; N < OUTPUT_N_COUNT; N++){ for(int W = 0; W < OUTPUT_W_COUNT; W++){ OUTPUT_W[N][W] = Wtmp[CountW]; CountW++; } } } /*Заполняет временный массив коэфиуиентами с SD карты*/ void ReadDataFromSD(){ pinMode(10, OUTPUT); if (!SD.begin(10)) {return; } myFile = SD.open("test.txt"); if (myFile) { int i = 0; char tmp[32]; while (myFile.available()) { tmp[i] = myFile.read(); if(tmp[i] == ';'){ tmp[i] = ' '; Wtmp[FileCount] = atof(tmp); FileCount++; i = 0; } else { i++; } } myFile.close(); } /*Загружаем первый слой*/ LoadInputW(); /*Загружаем второй слой*/ LoadOutputW(); } void command(int value){ if(value == 0){ Run(); delay(2000); Stop(); return;} if(value == 1){ Stop(); delay(2000); return;} if(value == 2){ Revers(); delay(2000); Left(); delay(2000); Stop(); return; } if(value == 3){ Revers(); delay(2000); Right(); delay(2000); Stop(); return;} if(value == 4){ View(); return;} } void Stop(){ pinMode(R_R, OUTPUT); pinMode(L_R, OUTPUT); pinMode(R_F, OUTPUT); pinMode(L_F, OUTPUT); } void Run(){ input[2] = 0.0f; input[0] = 0.0f; pinMode(R_R, OUTPUT); pinMode(L_R, OUTPUT); pinMode(R_F, INPUT); pinMode(L_F, INPUT); } void Revers(){ pinMode(R_R, INPUT); pinMode(L_R, INPUT); pinMode(R_F, OUTPUT); pinMode(L_F, OUTPUT); } void Left(){ input[2] = 0.0f; input[0] = 0.0f; pinMode(R_R, OUTPUT); pinMode(L_F, OUTPUT); pinMode(L_R, INPUT); pinMode(R_F, INPUT); } void Right(){ input[2] = 0.0f; input[0] = 0.0f; pinMode(R_R, INPUT); pinMode(L_F, INPUT); pinMode(L_R, OUTPUT); pinMode(R_F, OUTPUT); } void View(){ input[1] = 0.0f; servo.write(RIGHT_ANGLE); delay(500); input[0] = (float)dist.Ranging(CM); delay(800); servo.write(LEFT_ANGLE); delay(500); input[2] = (float)dist.Ranging(CM); delay(800); servo.write(START_ANGLE); delay(500); } Вот оно видео:
Выводы:
Запустить сеть на Arduino возможно и она даже будет работать. Временами конечно же начинаются глюки. Я думаю они связаны с обучающей выборкой. Я не тратил особо много времени на ее подборку и по этому не могу утверждать точно. Возможно в скором времени будут внесены некоторые коррективы. Ну а сейчас пока вот так. Спасибо за внимание.
Перспективы внедрения нейронных сетей в реализацию систем поддержки принятия решений
Бугаков С. С. Перспективы внедрения нейронных сетей в реализацию систем поддержки принятия решений // Молодой ученый. — 2016. — №4. — С. 343-346. — URL https://moluch.ru/archive/108/26199/ (дата обращения: 11.11.2018).
Перспективы внедрения нейронных сетей вреализацию систем поддержки принятия решений
Бугаков Сергей Сергеевич, магистрант
Кубанский государственный университет
Встатье рассмотрены основы искусственных нейронных сетей; изучена архитектура систем поддержки принятия решений на базе нейронных сетей; выявлены перспективы внедрения нейросетевых технологий в системы поддержки принятия решений.
Ключевые слова: системы поддержки принятия решений, нейронные сети, информационные технологии.
Бурное развитие информационных технологий в последние десятилетия, внедрение их во все сферы жизнедеятельности, привели к тому, что сегодня нельзя представить себе даже малое предприятие, не оснащенное IT инфраструктурой.
При этом возрастает необходимость в разработке новых интеллектуальных систем поддержки принятия управленческих решений, приспосабливающихся к максимально широкому диапазону условий.
Перспективным направлением здесь выступает применение искусственных нейронных сетей.
Искусственные нейронные сети представляют собой сеть искусственных нейронов объединенных между собой синаптической связью [1]. Сетью обрабатывается входная информация и в зависимости от изменений своего состояния во времени формируется совокупность выходных сигналов. Нейронные сети находят широкое применение в направлениях разработки искусственного интеллекта.
Основа нейросетевого подхода заключается в рассмотрении очень простых однотипных объектов, соединенных в сложную и крупную сеть.
Современный уровень развития микроэлектроники создает предпосылки аппаратной поддержки нейросетевых методов [2].
Некоторые исследователи утверждают, что систему поддержки и принятие решений можно целиком реализовать на платформе нейронной сети.
Наряду с традиционным использованием нейронных сетей для типовых задач распознавания и формирования образов, в системе поддержки и принятия решений происходит согласованное решение задач распознавания и формирования образов, извлечения и сохранения знаний, оценки образов и принятия решений.
Для практической адаптации систем управления к изменяющимся условиям существования объекта управления необходимо создание масштабных нейронных сетей, приспособленных для решения задач поддержки принятия решений.
Рассматривая основные аспекты создания систем поддержки принятия решений на базе нейронных сетей важно определиться с терминологией и архитектурой [4].
Управляющей системой здесь выступает система управления, имитирующая нервную систему согласно конкретной методологии поддержки принятия решения. Под объектом управления понимается организм, несущий в себе нервную систему.
Объект управления контролируется при помощи управляющей системы, внедренной внутрь объекта управления и взаимодействующей со своим окружением посредством блока датчиков.
Можно утверждать, что управляющая система контролирует не только объект управления, но и всю систему. Средой в системе выступают различные объединения объектов.
Передача входной информации управляющей системы от блока датчиков происходит в виде двоичного вектора.
Функционирование блока формирования и распознавание образов происходит следующим образом.
На основе информации о возможных функциональных свойствах среды задаются некоторые объекты (нейроны), на которые транслируются некоторые классы явлений, потенциально способных к существованию в системе. Транслирование определяется топологией нейронной сети [7].
В каждом отображаемом на нейрон классе, можно выделить подкласс, воспринимаемый данным нейроном. Каждым нейроном производится статистический анализ воспринимаемого им подкласса.
В процессе накопления статистической информации о воспринимаемом подклассе, у нейрона появляется возможность принятия решения об отнесении подкласса к неслучайному или случайному явлению в системе [8]. При принятии каким-либо нейроном решения о неслучайности события отображаемого на него подкласса, он переходит в некоторое отличимое от исходного состояния.
После того как нейрон «научен», сформированный образ идентифицируется определенным номером данного нейрона.
Воспринятый нейроном подкласс явлений, вызвавший его обучение, т. е. статистически достоверно существующие в системе пространственно-временные явления, называют прообразом образа.
Уже сформированный образ распознается боком формирования и распознавание образов, когда наблюдается его прообраз.
Блок формирования и распознавания образов указывает на распознанные в данный момент сформированные образы [10]. Распознанные образы одновременно участвуют в создании образов более высокого порядка, т. е. происходит абстрагирование и агрегирование образов.
Представление эмпирически найденных знаний о функциональных свойствах системы производится блоком формирования базы знаний.
Интегральная оценка качества состояний вырабатывается блоком оценки состояния.
Процедура принятия решений, основанная на анализе текущей ситуации, целевых функций и базы знаний происходит в блоке принятия решений.
Блоком определения времени принятия решений, в зависимости от текущей оценки совокупности объектов, определяется глубина просмотра базы знаний. Чем больше совокупность объектов, тем большее значение образов (в порядке уменьшения модуля их значимости) способна учесть управляющая система при принятии решения, и тем медленнее скорость принятия решений.
Так в обобщенном виде выглядит алгоритм управления, реализуемый управляющей системой в системе поддержки принятия решений.
Особенностью процесса управления является в том, что накопление управляющей системой эмпирических знаний о свойствах предъявляемого ей объекта управления и принятие решений производится автоматически на основе накопленных знаний.
По мере роста объема накопленных знаний повышается и качество управления [9].
Важным является то, что управление заключается не в том, что управляющая система реагирует на входящую информацию, а в том, что она активно ведет постоянный поиск возможностей в текущих условиях улучшить саму систему. Тем самым в системе присутствует внутренняя активность.
Создание систем поддержки принятия решений на основе нейронных сетей может быть целесообразным лишь в тех областях пространства признаков, в которых раньше используемые методы показали свою неэффективность [6].
Иными словами, необходимо выделить из общего пространства две области — область, для которой существует априорная информация о свойствах объекта управления, и в который имеется возможность применения системы управления, и область, не имеющую информации о свойствах объекта управления, требующую адаптации управления в реальном времени.
С момента введения первой логической модели нейрона Питтсом и Маккалоком в 1948 году было предложено огромное количество различных моделей [3]. Однако все они, как правило, предназначены для решения задач по распознаванию и классификации образов. Можно выделить целый ряд существенных отличий предложенной модели от уже существующих.
Первым отличием выступает то, что в классических моделях всегда имеется в наличии «супервизор», подстраивающий по определенному алгоритму параметры сети. Предлагаемому же нейрону необходимо подстраиваться самостоятельно в зависимости от анализируемой им последовательности входных векторов. То есть, работая, нейрон должен использовать только информацию со своих входов.
Следующим отличием следует назвать то, что в предложенной модели отсутствуют вещественные рычаги и взвешенная суммация по этим весам, что, несомненно, является существенным плюсом при создании нейрочипов [5].
Главное же отличие предложенной модели от классических заключается в целях ее применения. C ее помощью возможно решение всех задач управляющей системы: от формирования и распознавания образов, распознавания и запоминания закономерностей, до анализа информации закономерностей и выбора действий.
Подводя итог можно сказать, что внедрение нейронных сетей в реализацию систем поддержки принятия решений представляется перспективным направлением. Использование подобных систем в экономике не имеет ограничений.
Уже сейчас существуют системы поддержки принятия решений на базе нейросетевых технологий применяемые крупнейшими зарубежными компаниями с целью сокращения рисков в планировании своей финансовой деятельности. К сожалению на российском рынке данные системы пока еще не нашли широкого применения.
Однако изменения происходящие в отечественном бизнесе в последние годы позволяют предположить,что в ближайшее время ситуация изменится в противоположную сторону.
Литература:
Основные термины (генерируются автоматически): управляющая система, система поддержки принятия решений, сеть, принятие решений, распознавание образов, нейрон, предложенная модель, система, управление, входная информация.
Нейроаниматы – роботы принимающие самостоятельные решения
В мире существует несколько центров, занимающихся фундаментальными исследованиями принципов работы мозга на сетевом уровне, то есть нейронных сетей.
Ведущие из них находятся в США, в Технологическом университете Джорджии (руководитель проекта и основоположник идеи создания нейроанимата — доцент и адъюнкт-профессор биомедицинской инженерии Стив Поттер), в Израильском институте технологий (руководитель проекта — Шимон Маром), Итальянском институте технологий (руководитель — Микела Чиаппалоне) и в Департаменте микросистемной инженерии Университета Фрайбурга (руководитель — Ульрих Эгерт). На начальной стадии разработки в Китае и Нидерландах.Ни одна группа исследователей пока что не добилась явного прорыва в понимании механизмов обучения в мозге, и все созданные нейроаниматы (или гиброты — гибридные роботы) уступают логическим, программируемым собратьям. Все проекты идут практически нога в ногу. Российский нейроанимат отличается от остальных систем лишь принципами кодирования сигнала. Самое показательное, чего смогли пока добиться ученые, — подключить к живым клеткам мозга роботизированные руки, которые рисовали изображения. Этот арт-проект сделан под руководством Стива Поттера. При этом нейронная сеть находилась в 19 тысячах километров от механических рук — в Школе анатомии и биологии Университета Западной Австралии. Подключенный к ноутбуку автомобильчик начинает свой путь по письменному столу: робот подъезжает к стопке книг, упирается в нее. На экране компьютера видно, как бегают электрические импульсы — подобно кривой электроэнцефалограммы, только пики выскакивают намного чаще. Через несколько мгновений машинка, вывернув колеса в сторону, ловко объезжает препятствие. Новая стопка встает на пути малыша. И так раз десять. С каждым разом решение, как объехать преграду, робот принимает все быстрее. Это результат работы нейронной сети, искусственно выращенной специалистами кафедры нейродинамики и нейробиологии Нижегородского государственного университета имени Н. И. Лобачевского (ННГУ) и сотрудниками Нижегородской государственной медицинской академии, которые пытаются наделить машинку из пластика и железа разумом.
Мыслящее нечто
Эту нетривиальную задачу сегодня параллельно решают специалисты сразу в нескольких странах мира — они ломают голову над созданием машин, которые будут управляться настоящими живыми клетками мозга. Для роботов, способных думать и обучаться, уже придумали название — нейроаниматы.
В России в этой области дальше всех продвинулись в Нижнем Новгороде, где корреспонденты «Итогов» и наблюдали за «умной» машинкой. Впрочем, играми в машинки эксперимент не заканчивается.
Ученые создавали нейроанимата для того, чтобы, как говорит заведующий лабораторией Института прикладной физики РАН, завкафедрой нейродинамики и нейробиологии ННГУ доктор физико-математических наук Виктор Казанцев, «проводить фундаментальные исследования принципов работы мозга». За этой общей формулировкой кроется настоящий научный прорыв.
Созданный к сегодняшнему дню нейроанимат состоит из двух основных частей. Это собственно робот — пока что простейшая машинка из конструктора с двигателем и набором датчиков и главная часть — нейронная сеть, управляющая роботом. Ее — и это наиболее интересно — ученые выращивают искусственно из живых клеток мозга мышей или крыс.
Клетки извлекают из гиппокампа — отдела мозга, отвечающего у всех живых существ за кратковременную память и ориентацию в пространстве. Затем несколько десятков тысяч нейронов помещают в стеклянную камеру около полутора сантиметров в диаметре. В нее заранее залита специальная питательная среда, схожая с той, что имеется в настоящем мозге.
На дне камеры — мультиэлектродная матрица из 60 электродов размером порядка 30 микронов каждый, вокруг которых и располагаются нейроны.
«Извлечь нейроны из эмбриона животного и посадить их на матрицу с электродами — это еще даже не полдела», — поясняет кандидат физико-математических наук, руководитель экспериментальных работ по проекту нейроанимата, сотрудник кафедры нейродинамики и нейробиологии Алексей Пимашкин.
Из-за того что ученые берут в работу не целый отдел живого мозга, а лишь отдельные нейроны, связи между ними прерываются. Необходимо их выстроить заново, фактически создав новую живую нейронную сеть.
Технологическое решение таково: камеру с мультиэлектродной матрицей помещают в специальный инкубатор, где поддерживаются температура 35,6 градуса, определенная влажность и концентрация углекислого газа и кислорода.
«Через несколько дней между клетками начинают образовываться связи, вырастает живая нейронная сеть, в которой спонтанно генерируются и распространяются электрические импульсы, — рассказывает Алексей Пимашкин. — На появление стабильной сети уходит около 20 дней.
При этом из нескольких десятков тысяч нейронов, посаженных изначально, остается около пяти тысяч (остальные погибают), но и этого хватает для эксперимента, суть которого в исследовании процессов обработки информации в мозге».
Ученые по отдельности стимулируют электроды, подавая на них электрические сигналы, и таким образом возбуждают нейроны, сигнал от которых распространяется по всей сети. Тем самым полностью симулируется ситуация, при которой живой мозг получает сигналы от органов зрения и осязания, то есть от так называемых сенсорных входов.
Когда на нервное окончание, например на сетчатку глаза, у человека или животного поступает некий сигнал, нейроны посылают определенную последовательность импульсов в мозг. Те проходят через нейронные сети и вызывают отклик — именно так мы принимаем то или иное решение, допустим, протягиваем руку, чтобы взять нужный предмет. Эти действия кодируются в мозге после обработки поступающих сигналов. Команду на их выполнение отдают нейроны, посылая последовательности импульсов на соответствующие нервные окончания, которые руководят мышцами. Ученые называют такую цепочку стимул-реакцией. Другими словами, мозг получает какой-то сигнал или стимул извне, обрабатывает его и на выходе выдает уже другой сигнал, реакцию. Подобную цепочку моделируют и разработчики нейроанимата. Помимо электродов, назначенных на роль сенсорных входов и ответственных за стимуляцию нейронной сети, на мультиэлектродной матрице часть электродов может снимать или считывать электрическую активность нейронов. Их назначили выходами нейронной сети. Это аналоги выходов мозга на какие-то моторные функции, по которым сигнал передается мышцам. Проверить, насколько качественно искусственно выращенная нейронная сеть может выполнять элементарные функции настоящего мозга, исследователи решили, подключив к ней робота.
Машинка с секретом
Сам робот элементарный — машинка из детского конструктора. У нее есть колеса с моторчиками, она может ехать влево или вправо, давать задний ход, есть датчики касания — кнопки справа, слева и спереди. Если все эти свойства описывать с позиций живой системы, можно сказать, что у такого робота есть сенсорные каналы и он обладает моторными функциями.
Он может подключаться к компьютеру при помощи кабеля связи через USB-порт или по радиоканалу Bluetooth. Это подключение как раз и связывает его с нейронной сетью — блоком управления.
При этом, как замечает Алексей Пимашкин, «совершенно не важно, где находится нейронная сеть: она может быть в соседнем здании или вообще в другой стране, а сигнал при этом передается по Интернету». Компьютер, к которому подключен робот, не играет абсолютно никакой роли в управлении. Он выполняет лишь функцию передачи и кодирования сигнала от нейронной сети к машинке.
Когда все условия эксперимента выполнены, то есть нейронная сеть сформировалась и готова адекватно воспринимать, обрабатывать и выдавать сигналы, когда назначены входные и выходные электроды на мультиэлектродной матрице, а робот подключен к сети, исследователи приступают к основной части — проверке системы. Тогда и устраивают эксперимент с преодолением препятствий.
Датчик-кнопка при столкновении с преградой выдает электрический сигнал, который отражается на экране компьютера. Сигнал идет на входные электроды мультиэлектродной матрицы, и в нейронной сети возникает электрическая активность. Активность одного сигнала длится 500 миллисекунд, ее можно наблюдать на компьютере в виде спайков — электрических импульсов.
За это время сигнал обрабатывается, и нейронная сеть выдает уже другой сигнал, который отправляется на выходные электроды. В результате робот получает команду повернуть направо или налево в зависимости от того, какой из его датчиков сработал.
Но как нейронная сеть решает, какой конкретно ответ на внешний сигнал ей выдать? Дело в том, что появление входного сигнала сеть рассматривает как возникновение некоей проблемы, которую нужно решать. Сама по себе она совершенно ничего не знает ни о машинке, ни о препятствии, ни о внешнем мире вообще. Все, что у нее есть, — стимуляция, от которой нужно избавиться.
И пока сеть не отдаст нужную команду, стимуляция не исчезнет. Сеть отдает команду лишь потому, что ей нужно что-то сделать, чтобы внешний сигнал пропал. Таково свойство нейронов. В первый раз в своей жизни столкнувшись с препятствием, нейронная сеть не умеет делать ничего. Она не знает, какой сигнал ей выдать в ответ, и начинает генерировать множество различных реакций.
В случайный момент времени одна из реакций оказывается верной, робот сворачивает, и постоянное внешнее возмущение пропадает, потому что кнопка-датчик больше не нажата. Становится хорошо всем: ученым от того, что машинка выполнила разумное действие и увернулась от препятствия, а у нейронной сети исчезло раздражение.
Однако это действие является лишь началом жизнедеятельности нейронной сети во внешнем мире. В следующий раз время от начала возмущения до того момента, как сеть даст правильный ответ, сократится, и с каждым разом оно будет сокращаться все сильнее. Нейронная сеть станет отдавать команду на поворот робота практически сразу после его столкновения с препятствием.
Этот процесс усвоения нужного решения и хотят исследовать ученые во время экспериментов над нейроаниматом. Подобное обучение живого мозга исследователи сравнивают с тем, как, например, в поисках еды животное обходит различные места в пространстве, а когда находит, должно запомнить это место, чтобы вернуться туда в следующий раз.
Изначально у мозга не было решения проблемы, где найти еду. Он не знал, что делать и куда идти. Затем в результате поиска это решение нашлось и запомнилось. При этом схема работы мозга аналогична тому, что происходит в процессе эксперимента с нейроаниматом.
Исследователи хотят добиться, чтобы искусственно выращенная нейронная сеть смогла так же обучаться и самоорганизовываться, как и живой мозг, а потому работают над моделью, в которой робот будет иметь множество сенсорных входов и много различных возможностей для решений.
На него планируется поставить ультразвуковой датчик, чтобы он «видел» препятствия подобно летучей мыши. Что случится тогда? Он сможет поворачивать в разные стороны, ездить с различной скоростью, выполнять другие механические действия, например, нагибаться или делать последовательные движения — не просто сворачивать, а поворачивать налево, потом направо, потом еще раз налево, обходить препятствие. «От обычного робота его станет отличать то, что все решения будет принимать не программируемый компьютер с заранее заложенными решениями, а адаптивный навигатор — живой мозг, находящий и запоминающий новые решения», — объясняет Виктор Казанцев.
Однако возникает вопрос — зачем все это нужно?
Исследователи не скрывают — чтобы заглянуть в глубины мозга: изучить при помощи микроскопов и других исследовательских приборов, что, собственно, происходит внутри нейронной сети в процессе обработки информации и обучения.
Далее, когда они получат схему работы сети, которая самоорганизовалась и научилась что-то делать, можно будет создать математическую модель, которую, в свою очередь, зашить в микрочип.
Он станет самоорганизующейся системой обработки информации, своего рода искусственным интеллектом. Ни больше ни меньше.
Разумная электроника
Применение такой системе ученые видят во всех областях, где требуется электроника, выполняющая сложные функции. Хитрые чипы пригодятся в военной и космической отраслях, в управлении сложными производствами, заводами, конвейерами и в медицине. Например, луноход или марсоход попадут в условия, на которые не были запрограммированы, — окажутся в глубокой яме.
Если обычный запрограммированный аппарат так и останется в этой яме навсегда, то «умный» луноход поймет, что ему нужно, например, раскатываться взад-вперед, а потом сам выпрыгнет из ямы враскачку. «Самое главное, что машина сможет решить неожиданно возникшую проблему, на которую не была запрограммирована, по тому же принципу, как действует мозг животных и людей», — продолжает Виктор Казанцев.
Кроме того, понимание принципов, как происходят поиск и обучение новым функциям в мозге, позволит раздвинуть рамки медицины. Появится новый подход к лечению болезней и отклонений, связанных с обучением и памятью. Возможно даже будет улучшать память и адаптацию к новым функциям в мозге. И, конечно, нас ожидает небывалый прорыв в компьютерной области.
Нейрокомпьютер в отличие от простого программируемого устройства сможет решать множество проблем одновременно, потому что в мозге происходят параллельные вычисления, а в электронике все вычисления делаются хоть и с огромной скоростью, но последовательно.
«Если построить такие модели процессоров, они будут делать вычисления в десятки, в сотни тысяч раз быстрее, чем современные компьютеры», — уверен Пимашкин. Вполне возможно, что для достижения своей цели ученым придется не раз модернизировать нейроанимата.
Например, создать систему, в которой будет задействована не одна нейронная сеть, а несколько, причем состоящих из нейронов, взятых из разных отделов мозга. Может быть, предстоит пересмотреть архитектуру сети, сделав ее трехмерной, увеличив количество электродов. Но это вопрос техники. Главная же задача на перспективу — разобраться, что меняется в мозге при обучении.
Если ученые раскроют его секреты, это будет первым реальным шагом к созданию искусственного интеллекта. Он будет способен не только заменить человека во многих сферах деятельности, связанных с опасностью для жизни и здоровья, но и неимоверно расширит возможности исследования космоса, Земли, океанов, добравшись туда, куда люди по чисто физиологическим причинам попасть не смогут никогда.