Archive for Август, 2009

Нейротехнологии в фильмах – «Farscape» (Scorpius)

Понедельник, Август 31st, 2009

Сериал «Farscape» http://en.wikipedia.org/wiki/Farscape http://ru.wikipedia.org/wiki/На_краю_Вселенной
Сериал про ГГ – космонавта из недалекого будущего, который в результате человеческого космического эксперимента непонятно как попал в дальний космос и не знает, как выбраться назад. (далее…)

Предварительные оценки русурсоемкости зрения

Суббота, Август 29th, 2009

Пусть поле зрения будет скромные 1000*1000 = миллион пикселей, с учетом трехцветного зрения – 3 млн сенсорных нейронов. Первые 10 нейронных слоев – (далее…)

DARPA + SyNAPSE

Пятница, Август 28th, 2009

http://ko-online.com.ua/node/44421

SyNAPSE – проект небинарной некремниевой (неарсенид-галлиевой, негерманиевой) искусственной нейросистемы, предназначенной для построения обучаемых и самообучаемых машин распознавания образов.

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

Может быть, разработка будет даже устойчива к электрмагнитным импульсам?
http://www.sainc.com/SyNAPSETeaming/SN08-16.pdf

The goals and milestones of the DARPA SyNAPSE program will be specified in an anticipated
Broad Agency Announcement. Briefly, the vision for the anticipated DARPA SyNAPSE
program is to enable electronic neuromorphic machine technology that is scalable to biological
levels. As compared to biological systems, today’s intelligent machines are less efficient by a
factor of one million to one billion in real world, complex environments. The key to achieving
the vision of the SyNAPSE program will be an unprecedented multidisciplinary approach that
coordinates aggressive technology development in the following technical areas: 1) Hardware;
2) Architecture; 3) Simulation; and 4) Environment. Hardware includes neuromorphic
electronics with novel, high density, plastic, synaptic components; Architecture includes
neuromorphic design from microcircuits to complete system; Simulation includes large-scale
digital simulation of neuromorphic circuits and functional neuromorphic systems; and
Environment includes virtual training, testing and benchmarking for neuromorphic systems.

Россию готовят к расчленению

Среда, Август 19th, 2009

Похоже, вслед за СССР, готовится расчленение уже РФ.
Следующие сценарии я оцениваю не один год. Буду предельно краток. (далее…)

Любимая модель Терминатора!

Пятница, Август 14th, 2009

(далее…)

Блогу исполнился год

Четверг, Август 13th, 2009


Измененный стиль Нейролаборатории


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

Ветхий завет – экстремистская литература

Среда, Август 5th, 2009

(далее…)

Упрощение сравнений активаций нейронов

Суббота, Август 1st, 2009

Для примера, возьмем обработку одного из режимов сна:

  1. //Псевдокод, похожий на Мозгокод:
  2. //Для краткости записи, (neuron.activation>const) будет записываться как (neuron>const),
  3. //(neuron.activation>neuron.threshold) будет записываться как (neuron>t)
  4. для всех нейрокластеров
  5. {
  6.         switch(neuroCluster)
  7.         {
  8.                 case (nIn>0 && nEn>0)режим_выделения; break;
  9.                 case (nIn>t && nEn>t) ->VA nOut; break;
  10.                 case (nIn>0 && nEn==0)->V nFd; break;
  11.         }
  12. }

При попытке реализации этого псевдокода на С++, возникает много инструкций сравнения, причем более громоздких. Вместо case (nIn>0 && nEn>0){} нужно будет писать либо if(0 < nIn->activation && nIn->activation < nIn->thrNorm && 0 < nEn->activation){…}, либо предусмотреть, чтобы сценарий с активацией нейрона, превышающей порог, проверялся раньше, чем на превышение только нуля. Можно использовать макросы, например

  1. #define ACTIVATED_BEFORE_THRESHOLD(n) (0 < n->activation && n->activation < n->thrrNorm)

Но тогда к if-ам нужно будет везде ставить else – иначе компилятор может решить, что при исполнении внутренних инструкций активация и порог могли измениться, и начать производить сравнения снова. Кроме того, при изменении названий полей активации и порога у нейронов разных типов, придется применять другие макросы, например, с префиксом типа мозга. Код становится более «мозго-зависимым». Можно использовать inline-функции класса нейрона, называемые одинаково у нейронов разных типов. Но желательно еще и не делать лишних сравнений. Компилятор не знает, что порог всегда будет не меньше нуля, и не сможет оптимизировать исполнение сокращением количества сравнений. Попытка сделать оптимизацию вручную усложнит код. Код теряет наглядность. Решение – явно разбить активацию на отрезки с применением inline-функций, одинаковых в разных мозгах:

  1. //Threshold Type
  2. enum ThrType
  3. {
  4.         EqLess0 = 0,//activation is Equal or Less 0
  5.         Greater0 = 1,//activation is greater than 0 and less than threshold
  6.         GreaterT = 2,//activation is greater or equal to threshold
  7. };
  8.  
  9. class neuronB2: public CommonNeuron
  10. {
  11. public:
  12.         operator ThrType()const
  13.         {
  14.                 const signal_t & a = …;//активация за текущий цикл
  15.                 const signal_t & t = thrNorm;//нормализированный порог
  16.  
  17.                 ThrType ret = EqLess0;
  18.                 if(a>0)
  19.                 {
  20.                         if(a>=t)
  21.                                 ret = GreaterT;
  22.                         else
  23.                                 ret = Greater0;
  24.                 }
  25.                 return ret;
  26.         }
  27.         …
  28. }
  29.  
  30. void BrainB2::someFunc()
  31. {
  32.         for all clusters()
  33.         {
  34.                 …
  35.                 const ThrType tNin = *nIn;
  36.                 const ThrType tNEn = *nEn;
  37.                
  38.                 if(tIn==GreaterT && tEn==GreaterT)      {}
  39.                 if(tIn==Greater0 && tEn==EqLess0)       {}
  40.                 if(tIn==Greater0 && tEn==Greater0)      {}
  41.         }
  42. }

Конечно, код с использованием ThrType целесообразно использовать только в случае нескольких сложных проверок, иначе он становится менее эффективным, чем простой вызов inline-функции типа neuron::isActive() с единственным сравнением порога с активацией.