Эволюция произвольных графов

Mar 26, 2011 17:34


Персептрон - частный случай графа. Возможно существуют другие виды графов, способные к обучению.

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

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

Почему я считаю важным введение логарифмирующих звеньев


Персептрон довольно тяжело обучить умножению, а ведь умножение очень важно, потому что повсеместно в мире проглядывает принцип Анны Карениной: «Все счастливые семьи похожи друг на друга, каждая несчастливая семья несчастлива по-своему». Для того чтобы некий субъект ухватил такие моменты, где нужно одновременное сочетание нескольких условий, нечто в этом субъекте должно уметь умножать, причём быстро учиться умножать там, где это приводит к успешному выживанию и развитию.

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




Вот моё множество обучающих примеров:



x1
x2
d1

0
0
0

0
1
0

1
0
0

1
1
1

0,5
0,5
0,25

0,5
1
0,5

1
0,5
0,5

0
0,5
0

0,5
0
0

0,2
0,5
0,1

0,5
0,2
0,1

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

Обучение выглядело так:




Результат обучения соответствует погрешности приведённой к диапазону (к единице) равной 4%:



x1
x2
d1
y1
d1-y1

0
0
0
0
0

0
1
0
0,0002
-0,0002

1
0
0
-0,0001
0,0001

1
1
1
1,0001
-1E-04

0,5
0,5
0,25
0,2497
0,0003

0,5
1
0,5
0,4997
0,0003

1
0,5
0,5
0,4999
1E-04

0
0,5
0
-0,0009
0,0009

0,5
0
0
0
0

0,2
0,5
0,1
0,1006
-0,0006

0,5
0,2
0,1
0,0998
0,0002

0,75
0,25
0,1875
0,1525
0,035

0,25
0,75
0,1875
0,1463
0,0412

0,75
0,75
0,5625
0,5992
-0,0367

максимальная погрешность
0,0412

Можно убедиться, что обученный на диапазоне [0,1] персептрон совершенно не адекватен вне этого диапазона: x1 = 8, x2 = 9 ->d1 = 1,36

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




Однако мы знаем, что операция умножения, если у нас есть логарифм, сложение и экспонента должна выглядеть так:




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

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

Проект добавлен в список «не обязательных дел». На выходных читаю книги по теории графов.

Previous post Next post
Up