В статье рассматриваются принципы построения искусственных нейронных сетей с применением языка программирования Spider, методы упрощения и оптимизации, нестандартные искусственные нейроны.
Ключевые слова: искусственная нейронная сеть, алгоритм нейронной сети, искусственные нейроны, нестандартные искусственные нейроны, язык программирования Spider.
В современной IT-индустрии под понятием «искусственная нейронная сеть» принято считать некий «черный» ящик, на вход которого подается какая-то информация, внутри него происходят какие-то недоступные к пониманию процессы, так как нейронная сеть «самостоятельно» формирует связи и приходит к каким-либо выводам, на основе полученной ранее информации и/или в процессе многократного «обучения». Возможно, что это эффективно в процессе принятия решений, либо для обработки графической информации, но ни в коей мере не приближает к пониманию функционирования искусственной нейронной сети, ни тем более, ни коим образом не описывает как работают биологические нейронные сети. В данной статье мы хотим рассмотреть нейронную сеть, основанную на искусственных нейронах, сформированных на базе операций компьютерной бинарной логики, рассмотреть возможности для оптимизации и создание нестандартных операций. Да, мы так же, не приходим к тому как именно функционирует биологическая нейронная сеть, но основным постулатом и стимулом развития является тот факт, что в природе нет ничего случайного, всё сбалансировано и нет ничего лишнего в биологическом организме, так как известно, что в процессе обучения и развития естественная нейронная сеть только лишь «отключает» неиспользуемые в процессе жизнедеятельности связи и даже нейроны.
Язык программирования искусственных нейронных сетей Spider представляет собой описание нейронов их типов и связей в символической форме.
Исследуемые нейроны делятся на несколько групп: только выход, только вход, два входа с одним выходом и нестандартные. Данная классификация позволяет описать все виды операций. Все нейроны могут находится в трёх состояниях: «0», «1» и «Ф» (неопределенно) — это состояние возникает, когда нейрон не может однозначно интерпретировать свои входы и принять состояние «0» или «1». Нейроны обмениваются сигналами посредством двух видов синапсов: прямой и инвертирующий. Синапс принимает выходное значение нейрона и переносит его на вход другого нейрона, прямой синапс передает сигнал как есть, инвертирующий преобразует «0» в «1» и наоборот, если нейрон находится в неопределённом состоянии, то инвертирующий синапс передает неопределённое состояние. Ко входу нейрона может быть присоединен только один синапс, к выходу может быть присоединено сколько угодно, в том числе и ноль синапсов.
Первая группа, только с выходом, представлена двумя нейронами:
- входной нейрон inp — ввод информации в сеть из управляющей программы;
- константный нейрон con — принимает фиксированное значение «0» или «1», не может быть в неопределённом состоянии и не может измениться в процессе работы нейронной сети.
Вторая группа, только с одним выходом, представлена одним нейроном: out — результат работы или выход результата из нейронной сети.
Третья группа нейронов, описывает стандартные бинарные операции, такие как:
- and — бинарное И;
- or — бинарное ИЛИ;
- xor — бинарное Исключающее ИЛИ.
Таблица 1
Таблица результатов and
Входы |
0 |
1 |
Ф |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
Ф |
Ф |
0 |
Ф |
Ф |
Из таблицы 1 следует что, если хотя бы один вход нейрона and принял значение «0», то нейрон and переходит в состояние «0».
Таблица 2
Таблица результатов or
Входы |
0 |
1 |
Ф |
0 |
0 |
1 |
Ф |
1 |
1 |
1 |
1 |
Ф |
Ф |
1 |
Ф |
Из таблицы 2 следует, что если хотя бы один вход нейрона or принял значение «1», то нейрон or переходит в состояние «1».
Таблица 3
Таблица результатов xor
Входы |
0 |
1 |
Ф |
0 |
0 |
1 |
Ф |
1 |
1 |
0 |
Ф |
Ф |
Ф |
Ф |
Ф |
Из таблицы 3 следует, что для нейрона xor все входы должны быть в определенном состоянии.
Исходя из описания нейронов, определим ключевые слова языка программирования Spider: inp , out , and , or , xor , а также зарезервированные символические ссылки con 0 и con 1 определяющие две константы «0» и «1».
Синтаксис языка определим следующим образом:
- одна строка — один нейрон;
- разделитель пробел;
- символическая ссылка — имя нейрона, может состоять из символов латинского алфавита, цифр и символа подчеркивания, но не может начинаться с цифры;
- строка начинается с зарезервированного слова, описывающего нейрон, после разделителя символическая ссылка — имя нейрона для последующей связи, при необходимости символические ссылки входных нейронов формируются через разделители, сформировать связь можно только с объявленным выше нейроном;
- для описания инвертированной связи перед символической ссылкой входного нейрона ставится знак ~ «тильда»;
- при переопределении символического имени, для нижних нейронов используется последний определенный нейрон;
- после символа # «решетка» и до конца строки — комментарий.
К примеру:
inp x0 #объявили входной нейрон с именем x0
inp y0 #объявили входной нейрон с именем y0
and m1 x0 y0 # m1 = x0 & y0; (на языке Си)
xor m1 m1 con 1 # m1 ^= 1; (на языке Си)
out z0 m1 # результат вычислений в выходном нейроне
Хотя язык программирования Spider напоминает ассемблер, всё же есть существенные отличия:
- Нет регистров, так как каждый нейрон хранит в себе один бит информации;
- Нет операций, так как каждый нейрон и есть операция;
- Нейрон может выдать результат, если достаточно входных данных (согласно таблицам 1–2), поэтому последовательный поток выполнения может измениться, рассмотрим рис. 1.
Рис. 1. Пример непоследовательного потока выполнения
На рис. 1, если хотя бы один из входных нейронов заштрихованного нейрона and будет равен «0», то результат, т. е. состояние нейрона out будет равно «0», без вычисления всей сети, а только в результате вычисления двух нейронов and, согласно таблице 1.
Рассмотрим правила преобразования нейронов, когда одним из входных является константа «0» или «1», таблица 4 иллюстрирует правила замены нейрона, когда одним из аргументов является константный нейрон.
Таблица 4
Правила преобразования нейронов
con0 |
con1 |
|
and n A con |
con0 |
A |
or n A con |
A |
con1 |
xor n A con |
A |
~A |
Таблица 4 формирует представление о правилах упрощения искусственной нейронной сети, также одним из правил следует отметить следующее, если выход нейрона не связан ни с одним входом другого нейрона, такой нейрон можно исключить из нейронной сети. Рассмотрим следующий пример:
and n x0 con1 and m n y0 and h ~m n out z0 m |
# замена and m x0 y0 # можно исключить out z0 m |
В данном примере, мы преобразовали and n x 0 con 1 и заменили все ссылки n на x0, по правилам преобразования, приведенным в таблице 4. Строку and h ~ m n можно исключить, так как символическая ссылка h не используется.
Перейдем к группе нестандартных нейронов, прежде всего — это нейроны с одним выходом и с более чем двумя входами, рассмотрим пример участка нейронной сети приведенной на рис. 2:
Рис. 2. Обычные нейроны
Как видно из рис. 2, преобразуемая группа состоит из нейронов одного типа xor, поэтому их можно преобразовать в нейрон bxor (big xor) представленном, на рис. 3:
Рис. 3. Нейрон bxor
Можно выделить три нейрона данного вида — это bxor, band, bor. Со следующими свойствами:
- bor — если хотя бы один входной нейрон в состоянии «1», то нейрон bor принимает состояние «1», в состояние «0» он переходит когда все входные нейроны находятся в состоянии «0»;
- band — если хотя бы один входной нейрон в состоянии «0», то нейрон band принимает состояние «0», в состояние «1» он переходит когда все входные нейроны находятся в состоянии «1»;
- bxor — если количество входных нейронов в состоянии «1» нечетно, а остальные в состоянии «0», то нейрон bxor принимает состояние «1». Если же количество входных нейронов в состоянии «1» четно, а остальные в состоянии «0», то нейрон bxor принимает состояние «0».
Рассмотрим еще один нестандартный нейрон add — суммирование, данный нейрон имеет три входа и два выхода, рис. 4.
Рис. 4. Нейрон add
Нейрон add представляет собой довольно сложную структуру, поэтому есть смысл преобразовать его в группу обычных нейронов, как показано на рис. 5:
Рис. 5. Группа простых нейронов, описывающая операцию add
Описанный язык программирования искусственных нейронных сетей «Spider» не является полным. В нем нет циклов, ветвлений, операций перехода, функций и многого другого присущего языкам высокого уровня, но все же данная исследовательская среда позволяет описывать и анализировать некоторые сложные алгоритмы. Описывая алгоритмы с помощью этого языка появляется новый взгляд на исследуемую проблему, так как промежуточные результаты, которые в обычном программировании мы рассчитали и забыли, в контексте искусственной нейронной сети присутствуют всегда, если есть результат на нижнем уровне, значит, нейроны верхнего уровня смогли сообщить свое однозначное состояние, следовательно, весь поток вычисления предстает перед нами в связанном графе, подчиненном простой и однозначной логике.
Литература:
- Хайкин С. Нейронные сети: полный курс. — Вильямс, 2006
- Hebb D. O. The Organization of Behavior: A Neuropsychological Theory. -New York: Wiley, 1949
- А. Н. Горбань, В. Л. Дунин-Барковский, А. Н. Кирдин, Е. М. Миркес, А. Ю. Новоходько, Д. А. Россиев, С. А. Терехов, М. Ю. Сенашова, В. Г. Царегородцев Нейроинформатика. — Новосибирск: Наука, 1998.