Найти тему
radiophysics

Процесс Пуассона (Poisson Input)

Оглавление

При моделировании нейронных сетей и обучении их на внешние сигналы разных классов для моделирования этих сигналов полезно использовать процесс Пуассона, особенно при использовании методов обучения без учителя [1, 2]. Здесь есть целый обзор на тему процессов Пуассона. Если попросту говорить, при моделировании нейронных сетей процесс Пуассона хорош тем, что все сигналы получаются разделенными во времени. Это помогает уменьшить количество причинно-следственных связей, возникающих одновременно, и увеличить эффективность процесса обучения.

В статистике процесс Пуассона отвечает нескольким требованиям. Во-первых, в каждый промежуток времени dt вероятность наступления события (импульса) должна быть равна произведению частоты событий f на величину интервала времени dt (p = f * dt). При этом важно, чтобы величины вероятностей появления каждых новых событий не были коррелированы с предыдущими. Во-вторых, времена между событиями должны быть распределены по убывающему экспоненциальному закону.

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

Рисунок 1. Процесс Пуассона с частотой f=0.02. В окне T=10000 должно быть примерно 200 импульсов.
Рисунок 1. Процесс Пуассона с частотой f=0.02. В окне T=10000 должно быть примерно 200 импульсов.

На рисунке 1 приведена реализация процесса Пуассона, полученного следующим образом: на каждом шаге генерировалось случайное число некоррелированным источником с равномерным распределением в интевале от 0 до 1; если сгенерированное число попадало в интервал от 0.49 до 0.51 (ширина интервала проверки равна частоте событий f = 0.02), происходило событие (импульс). Импульсы интересно распределяются в рассматриваемом окне: то становятся сильно кучнее, то иногда пропадают совсем. Но давайте вычислим распределение вероятностей для времен между импульсами (рисунок 2).

Рисунок 2. Распределение вероятностей величин времени между импульсами для процесса Пуассона с частотой 0.02.
Рисунок 2. Распределение вероятностей величин времени между импульсами для процесса Пуассона с частотой 0.02.

Распределение вероятностей величин времени между импульсами для нашего процесса Пуассона с частотой 0.02 (фиолетовые точки на рисунке 2) очень хорошо совпадает с модельной кривой 0.02*exp(-0.02*t), что подтверждает применимость используемого здесь нами алгоритма получения процесса Пуассона.

1. Jeanson F., Chartier S. Memory Control in a FitzHugh-Nagumo Network via STDP.
2. Medhi J. Stochastic models in queueing theory. – Elsevier, 2002.

Программа для генерации равномерно распределенных случайных чисел.

long idum = -3421;
//Uniform noise generator////////////////////////
float ran (long *idum) {
static long MBIG = 1000000000;
static long MSEED = 161803398;
static long MZ = 0;
static float FAC = (1.0/MBIG);
static int inext,inextp;
static long ma[56];
static int iff=0;
long mj,mk;
int i,ii,k;
/*Инициализация*/
if (*idum < 0 || iff == 0) {
iff=1;
mj=labs(MSEED-labs(*idum));
mj %= MBIG;
ma[55]=mj;
mk=1;
for (i=1;i<=54;i++) {
ii=(21*i) % 55;
ma[ii]=mk;
mk=mj-mk;
if (mk < MZ) mk += MBIG;
mj=ma[ii];
}
for (k=1;k<=4;k++)
for (i=1;i<=55;i++) {
ma[i] -= ma[1+(i+30) % 55];
if (ma[i] < MZ) ma[i] += MBIG;
}
inext=0;
inextp=31;
*idum=1;
}
if (++inext == 56) inext=1;
if (++inextp == 56) inextp=1;
mj=ma[inext]-ma[inextp];
if (mj < MZ) mj += MBIG;
ma[inext]=mj;
return mj*FAC;
}
//Uniform noise generator////////////////////////

Программа для генерации процесса Пуассона.

int main () {
int prob[1000];
std::ofstream TSf("TS.dat");
int iprev = 0;
int counter = 0;
for (int k=1;k<1000;k++) {
prob[k] = 0;
}
for (int i=0;i<1e7;i++) {
double check = ran(&idum);
if ((check>0.49)&&(check<0.51)) {
TSf << i << " " << i-iprev << " 1.0\n";
if ((i-iprev)<1000) prob[i-iprev]++;
iprev = i;
counter++;
}
}
TSf.close();
std::ofstream Pf("Prob.dat");
for (int k=1;k<1000;k++) {
Pf << k << " " << (1.0/counter)*prob[k] << "\n";
}
Pf.close();
return 0;
}

Наука
7 млн интересуются