10 октября 2007 г.

Эволюционный эксперимент - Часть 2. Модель организма

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

Можно предварительно прочитать вступление.


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



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


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


Жизненное состояние организма
Для контроля организма введем понятие "запаса сил". Это будет некая величина, которая будет уменьшаться со временем. Запас сил будет быстрее уменьшаться при интенсивном движении. А пополняться запас сил будет при приеме пищи. Важно чтобы запас сил был ограничен сверху. Ну, а если запас сил иссякает, то организм погибает.
А для того чтобы организм не смог жить вечно, кроме запаса сил будем исчислять его возраст и ограничим его. Напомню, показателем "разумности" организма будет служить длительность его жизни.


Нервная система организма
Вот мы и подобрались к самому интересному, ведь именно мутации нервной системы будут обеспечивать эволюцию.
Ощущения. Для восприятия мира нашему организму потребуется всего 4 рецептора - 3 для зрения и 1 для восприятия запаса сил.
Моторика. Мы определили что нервная система организма будет управлять всего лишь двумя органами движения. А значит два нейрона должны выдавать управляющие сигналы для этих органов.
Естественно, что между сенсорами и управляющими нейронами должны быть интернейроны (в нейронных сетях их называют скрытыми нейронами). Сложно сказать какое количество и какая структура внутренних взаимосвязей должны быть. Но, так как организм мы постоянно упрощаем, то упростим и этот момент - пусть их будет всего 5 и пусть они не будут связаны друг с другом.
Казалось бы осталось связать все сенсоры с интернейронами, а интернейроны с управляющими и структура нервной системы организма готова. Но мы ведь должны опираться на существующую нейрофизиологическую информацию. Сейчас абсолютно очевидно, что модель дуги совершенно неверна и что необходимо использовать хотя бы модель кольца (когда управляющие нейроны также воздействуют на интернейроны). Так что прибавим еще обратные связи от управляющих нейронов к интернейронам.
Итак, нервная система нашего организма, которая будет состоять из искусственных нейронов:

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


Дальше...

28 сентября 2007 г.

Эволюционный эксперимент

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


Но давайте все по порядку :)


Постановка задачи


Нашим главным героем будет некое виртуальное "существо" или, как их называют, интеллектуальный агент. Давайте для простоты называть его - организм.
Главной задачей, конечно же, будет "разумное" поведение организма. Самым "разумным" поведением будем считать то, которое приводит к более продолжительной жизни организма. Т.е. "умнее" тот, кто сумел выжить дольше :)


Наш организм будет примитивен, да и мир в котором он будет обитать будет тоже весьма примитивным. Организм будет обладать одним сенсорным органом - зрением. Это зрение будет фиксировать расстояние к еде (каким точно образом решим позже). Также организм будет иметь возможность двигаться с определенной скоростью и поворачивать. А в самом мире организм будет одинок, но там будет пища для него. При чем, пища будет периодически появляться в случайном месте. Ну и мир будет ограниченным пространством.
Вот такие вот лабораторные условия :)


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


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


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





Продолжение будет.

Дальше...

27 июля 2007 г.

Интеллект и размер головного мозга

Недавно, со ссылкой на журнал "The Lancet", NewScientist.com опубликовал любопытную статью о французе со сравнительно миниатюрным мозгом. У этого человека все "основные" части мозга - лобные, затылочные, теменные, височные доли обоих полушарий - уменьшены на 50%-75%.

Головной мозг уникального француза (слева) и мозг обычного человека (справа)


Но самое интересно в том, что никаких проблем с умственным развитием и интеллектом у этого человека нет. Доктора при помощи тестов определили его IQ - 75. Хоть это и ниже нормы, но в пределах нормального развития.
Мне кажется, что более важным доказательством его умственного здоровья есть социальная адекватность. Указанный француз женат и имеет двух детей. И все его знакомые считают его обычным человеком.


Означает ли этот факт, что кора головного мозга не имеет никакого значения в мыслительной активности? Вряд-ли. Макс Муенке(Max Muenke) утверждает что это прекрасное доказательство пластичности нервной ткани в целом и головного мозга в частности. При повреждении человек не потерял возможность видеть, ощущать, разговаривать, управлять телом и т.д. (а именно так должно было бы произойти по мнению многих нейрофизиологов, т.к. указанные доли головного мозга "отвечают" за все эти функции). Скорее всего спасло француза продолжительность процесса разрушения - у мозга была возможность реорганизоваться и создать необходимую структуру, которая будет выполнять все функции нормального головного мозга.
Думаю это еще одно подтверждение того что каждая частица мозга участвует во всех процессах, а не отвечает за одну единственную функцию.

Дальше...

2 июля 2007 г.

Фрактальная имитация рельефов

При попытке перечислить природные объекты с фрактальной структурой, большинство ограничивается лишь деревьями. Некоторые вспоминают еще облака. Но ведь этот список можно расширять до бесконечности.
Я считаю, что все созданное природой имеет фрактальную структуру. Это верно как для живой природы так и для неживой.
А раз нечто имеет фрактальную структуру тогда и моделировать его надо через фракталы. Начнем с того что под ногами - рельефа :) Тут конечно же необходимо использовать стохастические фракталы. Тут можно выделить два основных подхода:

  • рекурсивное разделение и изменение высот (Кроновер Р.М. Фракталы и хаос);

  • наращивание фрактальных структур на плоской поверхности (авторство мне неизвестно).


Рекурсивное разделение участка территории и изменение высот.
Это чрезвычайно простой способ в реализации. На вход мы получаем прямоугольный участок поверхности для которой заданы высоты вершин (1-4):

1----2
| |
3----4

Разделяем этот участок на 4 части просто поделив стороны пополам:
1----5----2
| | |
6----9----7
| | |
3----8----4

Высоты на серединах сторон (точки 5-8) вычисляют как среднее арифметическое соответствующих вершин.
А вот высота центральной точки 9 приравнивается среднему арифметическому всех вершин плюс некая случайная величина. Важно, что случайная величина может быть и положительной и отрицательной, а максимальный модуль этого значения характеризует тип получаемого рельефа. Иногда случайную величину делают зависимой от глубины рекурсии.
Далее процедура повторяется для прямоугольников 1-5-9-6, 5-2-7-9, 6-9-8-3 и 9-7-4-8.
Главное не забудьте об условии остановки рекурсии.


Наращивание фрактальных структур на плоской поверхности.
При этом подходе так же строиться карта высот по которой потом уже генерируется поверхность рельефа. Изначально карта высот инициализируется нулями. После фиксированное количество раз к ней прибавляется карта рандомизированного фрактального объекта с центром в случайном месте. Накладываясь друг на друга эти объекта создают весьма неожиданные эффекты.
Как создается указанный рандомизированный фрактальный объект? Конечно же рекурсивно. За основу береться геометрический примитив случайных размеров (в заданных рамках). Таким примитивом может быть конус, полусфера, колокол Гаусса или еще что-нибудь.
Далее объект порождает некое количество (либо фиксированное либо в определенных пределах) "потомков". Потомки - такие же примитивы, но уменьшенные в n раз. И располагаются они в пределах примитива-родителя. Потом эти потомки порождают своих потомков и т.д.
Результаты построения сильно зависят от количества порождаемых примитивов, от коэффициента уменьшения и от стартовой высоты примитива.
Вот примеры небольших участков сгенерированных таким методом:






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

Дальше...

17 июня 2007 г.

Школьные мифы о нервной системе

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


Нервная ткань не восстанавливается. Конечно факт, что нервные клетки не делятся. Но на самом деле нервая ткань чрезвычайно пластична. Ее развитие происходит на протяжении всей жизни человека. Каждый нейрон растет при этом создавая новые соединения, часть дендритов наоборот отсоединяется от созданных ранее синаптических соединений. Процесс роста нервной клетки чрезвычайно похож на процесс развития тканей в эмбрионе (об этом можно детально почитать у Прибрама).


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


Воспоминания сохраняются локально в виде "следов памяти". Данное утверждение перекликается с предыдущим, хотя у локальных энграмм (локальных следов памяти) до сих пор много приверженцев. Еще в 60-х годах прошлого века было проведено множество экспериментов, которые показали что в процессе сохранения памяти задействовано: рост нейронов, выработка специфических макромолекул, видоизменение РНК, изменение олигодендроглии (ткани окружающие нервную ткань). Очевидно что память очень сложный процесс и сводить его к изменениям потенциалов в височных долях мозга никак нельзя (а именно здесь ищут локальные энграммы). Действительно мозг изменяется при получении новой информации, но это происходит со всем мозгом и всегда.


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


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


Дальше...

12 июня 2007 г.

WTL. Первые шаги.

WTL (Windows Template Library) - тонкая обертка для управления визуальными контролами в виде отдельных классов, а также набор дополнительных классов тем или иным способом связанных с GUI. Данная библиотека является надстройкой над ATL. Удобна в использовании для пользователей MFC, так как имеет сходный интерфейс взаимодействия, но намного эффективней в плане быстройдействия. Также рекомендуется тем, кто только собирается осваивать Visual C++ (не .NET естественно или как это по ихнему - unmanaged) и желает получить быстродействующее и компактное windows-приложение.


Немного истории. Все началось с ATL (Active Template Library). Несмотря на название, ничего "активного" в этой библиотеке не было. Просто мода была такая все называть Active (период увлечения ActiveX), так же как в 1999 было модна приставка 2000 и так же как сейчас модна приставка .NET. Так вот, ATL вызвала ажиотаж среди разработчиков. Но вскоре они охладели, так как поняли, что обертки для всех контролов приходиться писать самим. В качестве набора таких оберток и был создан WTL. Но, к сожалению, Microsoft не очень жаловала этот проект, даже документация написана не была. Далее WTL развивался силами энтузиастов (вероятно действующими и прошлыми работниками Microsoft, а может и не только). После выпуска WTL 7.1 библиотека становиться очень популярной, каковой и остается по сей час.


Как установить. Для начала скачайте саму библиотеки с сайта Microsoft или с wtl.sourceforge.net. Далее распакуйте содержимое архиве в любой каталог по вашему усмотрению. Там находим каталог AppWiz и запускаем один из файлов setup70.js, setup71.js или setup80.js, в зависимости от того какая студия у вас установлена. Кстати для корректного использования WTL необходима ATL, в связи с чем использование WTL с ExpressEdition не возможно.
Еще рекомендую установить WTL Helper. Скачать можно здесь. По этой же ссылке можно почитать об том инструменте можно почитать детальней. Если в двух словах, то это надстройка для студии позволяющая быстрее работать с message handlers.
Далее вам лишь надо будет добавлять в include path путь к WTL для своих проектов.


Насколько он эффективен? Для того чтобы не быть голословным просто приведу пример. Вот приложение созданное при помощи визарда:

А теперь внимание. Занимает это приложение - 77 824 байт! Меня, после использования C++Builder, это сильно впечатлило :)

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


Недостатки. Было бы несправедливо не упомянуть о недостатках WTL. Главным недостатком является отсутствии документации - приходиться разбираться в коде. Из этого вытекает много других недостатков (частое неиспользование имеющихся возможностей, неэффективное использование и т.д.). Второй важный недостаток является спорным, так как многие считают это преимуществом, но я отнесу это к недостаткам - небольшая коллекция базовых классов. Хотя в большинстве случаев имеющихся классов более чем достаточно, а если нет, то всегда есть интернет. Большие запасы готовых классов на основе WTL можно найти на codeproject.com.


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

Дальше...

8 июня 2007 г.

Специфика первичной обработки информации человеком

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


Мне всегда казалось, что для человека важнее изменения внешней среды чем текущее состояние, что мы обрабатываем изменения, а не конкретные значения.
Самый элементарный пример нам знаком с детства. Положите себе на руку небольшой предмет (скажем, монетку) - вы сразу ощутите его на руке. А теперь посидите так продолжительное время. Теперь предмет уже и не мешает. А если снять? Моментально ощущается изменение.
Еще один пример. Мешает ли вам звук вашего системника (гудение, жужжание или рев - это уже кому как повезло)? Большинство ответит, что не мешает. А вот когда вы выключаете компьютер вы моментально ощущаете "звенящую тишину". Кстати, само словосочетание "звенящая тишина" означает лишь исчезновение звука, а не постоянное отсутствие.
О таком свойстве звука есть замечательный факт. В Нью-Йорке на третьей авеню проходила надземная железная дорога, которая естественно была не тихим явлением. Потом эту дорогу снесли. после этого люди жившие в домах вдоль железной дороги просыпались и звонили в полицию, чтобы сообщить что происходит нечто странное. Что именно странного происходит они объяснить не могли. Самое любопытное, что звонки совершались именно в тот момент когда мимо должен был проехать поезд по расписанию.
Таких примеров уйма и все с ними сталкивались и называется это адаптацией. Но остается главный сложный момент - зрение. Ведь когда мы долго смотрим на неподвижный предмет у нас не темнеет в глазах :) Мы продолжаем видеть тот же предмет, хотя картинка не изменяется.
Оказывается причина в постоянном движении глаз. Глаза колеблются даже тогда, когда мы фиксируем точку. Именно это движение препятствует тому, что определенный сенсор будет получать одинаковую информацию. Лучшей иллюстрацией этого факта является опыт описанный Прибрамом.
На белой части глазного яблока, не обладающей чувствительностью, укрепляют зеркало. Изображение проецируется на зеркало, отражается через призму на гладкую поверхность экрана, на которую смотрит наблюдатель. Призма корректирует отклонения рассматриваемого объекта , соответствующие отклонениям глазного яблока. Благодаря этому, изображение всегда падает на одно и то же место сетчатки и образ стабилизируется.
Схема эксперимента
Самое поразительное, что глаз настолько адаптируется что изображение всего через несколько секунд полностью пропадает.


Все эти чудеса происходят благодаря связке "сенсорные нейроны >> интернейроны", которая присуща всем органам восприятия. Интернейроны отличаются тем, что находятся в сильной связи друг с другом и слабой связью как с сенсорами, так и с последующими передаточными нейронами. Слой интернейронов еще называют горизонтальные нейроны. Все в совокупности интернейроны каким-то образом хранят предыдущие состояния сенсоров и посылают импульсы дальше лишь при изменениях.
Таким образом следует более внимательно отнестись к предварительной обработке информации, ведь природа делает такую обработку (и это дает результаты).

Дальше...