"Новый нейронный" - проект Open Source движка нейронной сети для платформы MetaTrader 5. - страница 39

 

Радиально-базисные сети будем строить?

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

 
NeuroOpenSource:

Общий курс (с сайта http://www.intuit.ru/department/expert/neuro/ там нужна регистрация, кому влом регится - ник Nic_Touch pas zdraste01 )



Лекции  http://www.softcraft.ru/neuro/ni/p00.shtml



Примеры отображения http://www.statsoft.ru/home/products/version6/snn.htm



Книги по моделям и методам обучения

 
Urain:

u - вход активатора

y - дополнительный степенной коэффициент.

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

double x = -y*u;

double e=exp(-|x|); 

if(x<=0) return(1./(1.+e));

if(x>0) return(e/(1.+e));

 

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

 
Vinin:

Это у тебя какие-то траблы с djvu просмотром. У меня читаются все книги.
 
gpwr:

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

double x = -y*u;

double e=exp(-|x|); 

if(x<=0) return(1./(1.+e));

if(x>0) return(e/(1.+e));

 

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

Как ни странно сам сигмоид работает корректно и при условии больших отрицательных входов, а вот функция гипертангенса сбоит, поэтому я и привёл в довесок к класическим алгоритмам, отсебячину сдвинутый сигмоид. Функция работает в том же пределе что и гипертангенс но быстрее и не имеет проблем с #IND.

Плюс к этому при регулировке угла атаки (на малых значениях коэф y) гипертангенс не достигает -1;1 , у сдвинутого сигмоида таких проблем нет.

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

Мой вывод гипертангенс фтопку, сдвинутый сигмоид рулит.

 
Urain:

Мой вывод гипертангенс фтопку, сдвинутый сигмоид рулит.

поддерживаю.
 
joo:
поддерживаю.

Можно правда сделать более простую реализацию сигмоида в пределе [-1;1]

double sigma(double u,double y=1.)// [-1;1]
  {   
   return(exp(-y*u));
  }

но у этой реализации есть так же проблема с #IND, так что лучше всё же добавить пару простых операций чем писать многочисленные проверки

тут добавлено + - / , итого 3 дополнительных операции против кучи проверок

double sigmah(double u,double y=1.)// [-1;1] сдвинутый сигмоид
  {
   return((2./(1.+exp(-y*u)))-1.);
  }
 
Urain:
double sigmah(double u,double y=1.)// [-1;1] сдвинутый сигмоид
  {
   return((2./(1.+exp(-y*u)))-1.);
  }

Это оптимальный вариант, как в качестве удобства рабочего диапазона [-1;1], так и по скорости работы. Область определения - вся числовая прямая.

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

 

А у мну в эхо сетке вот эта любимая:

class RSDNFunction
{
public:
        static const NeuronType Type = ETYPE_RSDN;
public:
        double F(double x)
        {
                // coeffs were added to adjust this function to bisigmoid for values from -5 to 5
                return 5*x/(5*sqrt(abs(5*x) ) + 5);
        }

        double dF(double x)
        {
                double root = sqrt(5*abs(5*x) ) + 1;

                return (root + 1)/(2*root*root); // derived function 
        }
};
 

Кстати.

Нужна функция сигмоидного типа.

Требования -- нормальный вид самой функции и производной (не сильно сложная в вычислении) и нормальный вид обратной функции и ее производной.