Pull to refresh

Вариант синхронной импульсной нейронной сети с обратными связями

Reading time 6 min
Views 12K

Предупреждение


Предупреждаю, рассуждения на данный момент чисто теоретические. Но уж очень красивая теория получается. Или я схожу с ума. Интересно ваше мнение о моих рассуждениях — стоит ли затевать практическую реализацию?
Скажу честно, причина по которой родились все дальнейшие рассуждения в том, что мне не удалась одна моя дурная затея — научить нейронную сеть самостоятельно играть в тетрис. Обучать сеть с учителем нереально долго, т.к. учитель — это я, да и однозначно правильных вариантов движения фигурок в тетрисе нет. Был применён генетический алгоритм обучения сети. Максимум чему обучилась моя популяция за сутки виртуального процесса эволюции и естественного отбора — раскладывать падающие фигурки в три столбика (на самом деле она ещё научилась поворачивать фигурки так, чтоб они были скорее «горизонтальны», чем «вертикальны», но вот научиться делать поворот фигурок так чтоб линии убирались — оказалось не по силам).

Что мне не нравится в классических нейронных сетях (а-ля персептроны)


Как правило, когда рассматривают те или иные варианты применения нейронных сетей — подразумевают использование аналоговых нейронных сетей, наподобие персептронов и т.п.
Такие нейронные сети взяли от реальных, живых, организмов только самую поверхностную форму и суть. Вроде как самолёты взяли идею крыльев от птиц. Хотя используют их совершенно по разному (но с одной и той же целью). Фактически, различные вариации персептронов являются нелинейной функцией от суммы таких же нелинейных функций y=k1*f(k2*f(...)+k3*f(....)+...), и алгоритмы обучения просто подбирают значения коэффициентов k.
По причине слишком большого отличия реальных нейронных сетей от искусственных приходится изобретать различные суррогатные методы обучения сети. Естественно нигде в природе нет обучения сети «методом обратного распространения ошибки», как и нет «обучения без учителя» в чистом виде.
Хотелось бы реализовать более правдоподобную нейронную сеть и поэкспериментировать с ней.

Основные принципы функционирования «моей» нейронной сети



В соответствии с моими познаниями о том, что на данный момент знают нейробиологи о функционировании реальных нейронных сетей, основные принципы должны быть такими:
  1. Передача информации в виде импульсов
  2. Кодирование информации — частотное (возможно модулированное по амплитуде)
  3. Способность к самоорганизации за счёт создания новых синаптических связей
  4. Способность к самообучению по заданным критериям
  5. Возможность использования некоторых параметров сети для оптимизации генетическими алгоритмами
  6. Возможность реализации всех трёх известных видов памяти реальных сетей — краткосрочная, среднесрочная, долговременная


Поясню по пунктам.
1. Передача информации в виде импульсов

Это, думаю, знают все — сигналы между живыми нейронами передаются в виде импульсов.
2. Частотное кодирование информации

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

Известно, что в живых организмах постоянно создаются новые синаптические связи. Число нейронов у нас — сколько дано от природы и «больше не вырастет», а вот число синаптических связей мозг умеет наращивать. Причём заранее не задано откуда и куда эти связи появляются. В частности, это один из механизмов памяти.
4. Способность к самообучению по заданным критериям

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

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

Тут надо сказать, что существует ещё и мгновенная память, длительностью до секунды. Но мгновенная память это память рецепторных нейронов, и к проектируемой сети особого отношения не имеет.
А вот три основных вида памяти должны реализовываться.
Краткосрочная память (у человека — десятки секунд) — за счёт наличия в сети обратных связей, и образования замкнутого цикла нейронов, в котором импульсы двигаются «по кругу».
Среднесрочная память (у человека — несколько дней) — за счёт усиления синаптических связей при неоднократном прохождении импульса. Этот вид памяти реализуется и в классических искусственных нейронных сетях, при различных видах обучения.
Долговременная память (у человека — долго, может даже на всю жизнь) — за счёт образования новых синаптических связей и вовлечения в работу ранее неиспользуемых нейронов.
Существует ещё теория, что есть супердолговременная «нестираемая» память, эдакое ПЗУ. Т.е. воспоминания которые вообще не забудутся никогда. Предположительно её механизм связан с изменением внутренней структуры нейрона, когда он некоторой синаптической связи отдаёт большее предпочтение, т.е. подключает к ней «дополнительный усилитель», который никогда больше не удаляется. Для упрощения, пока обойдёмся без супердолговременной памяти.

Общая схема функционирования сети


Общий алгоритм работы сети таков:
1. Инициализация. Есть только нейроны. Связей нет.
2. Выбираем некоторые (любые) нейроны в качестве входных. На них постоянно подаём входные сигналы (закодированные частотно).
3. Выбираем некоторые (любые) нейроны в качестве выходных. С них постоянно снимаем выходную информацию.
4. В цикле:
4.1. Очередной такт работы сети (передача импульсов).
4.2. Проверка необходимости создания новых связей и их создание если это необходимо.
4.3. Проверка необходимости удаления неиспользуемых связей и их удаление (для уменьшения используемых ресурсов).

Постепенно появятся новые синаптические связи и на выход станет поступать какая-то информация.

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

Обучение импульсной нейронной сети



И вот запустили мы созданную на предыдущем этапе сеть. Стала она выдавать какую-то сумбурную информацию. И никак мы пока не можем сказать — что же мы от неё хотим. Как обучать такую нейронную сеть?
Мне здесь видится три пути, являющиеся некоторыми аналогами обучения с учителем, обучения без учителя, и комбинированный — «сам себе учитель».
Надо отметить, что внутренне самообучение сети происходит автоматически и постоянно, за счёт подстройки параметров связей и появления новых связей.
Итак, способы обучения такой сети.
Обучение с учителем

Учитель может давать понять сети — хорошо или плохо она себя ведёт, т.е. выдаёт ли те выходные данные, которые мы от неё желаем получать. Реализовать можно в виде некоторой функции, примерный алгоритм работы которой очень прост.
Параметр — ЭМОЦИЯ_УЧИТЕЛЯ. Диапазон параметра от -1 до 1, где -1 = очень плохо, 1 = очень хорошо, 0 = нет оценки.
Для всех связей установить вес связи W=W+W*ЭМОЦИЯ_УЧИТЕЛЯ*k, где k — коэффициент обучаемости (может подстраиваться, например, генетически).
Всё.
image
Таким образом, при положительном значении параметра ЭМОЦИЯ_УЧИТЕЛЯ мы усиливаем связи, причём сильные связи (приводящие к правильному результату) усиливаются сильнее. При отрицательном значении параметра ЭМОЦИЯ_УЧИТЕЛЯ, мы ослабляем связи, причём сильные связи (приводящие к неправильному результату) ослабляются сильнее.
Обучение без учителя

Здесь концепция пока не до конца проработана, но намётки имеются. Если будет интересно — расскажу в следующих статьях.
Сам себе учитель

Такой способ самообучения возможен после того как мы некоторое время обучали сеть с учителем. Реализуется просто.
Делаем некоторый дополнительный выход сети, назовём его ВНУТРЕННЯЯ_ЭМОЦИЯ, подаём его на тот же вход, куда подаётся ЭМОЦИЯ_УЧИТЕЛЯ (суммируем их). И в процессе обучения с учителем следим за внутренней эмоцией сети. Допустим учитель даёт сигнал +0,5 (положительная эмоция), если сеть выполнила правильное действие и у неё не было внутренних эмоций. Учитель даёт сигнал 0, если сеть выполнила правильное действие, но у неё была отрицательная эмоция, и учитель даёт сигнал 1 (очень хорошо), если сеть выполнила правильное действие и у неё была при этом положительная эмоция. Т.е. мы дополнительно обучаем сеть на правило «правильное действие — хорошая внутренняя эмоция».
Поскольку мы соединили выход ВНУТРЕННЯЯ_ЭМОЦИЯ с тем же входом, куда подавалась ЭМОЦИЯ_УЧИТЕЛЯ, и при этом обучили «что такое хорошо, и что такое плохо», то теоретически сеть будет сама управлять своим дальнейшим обучением, даже без участия учителя.
image

На этом завершаю вступительную часть.
Подробности далее, в случае если эти размышления хоть кого-нибудь заинтересуют.
Tags:
Hubs:
+51
Comments 154
Comments Comments 154

Articles