"New Neural" è un progetto di motore di rete neurale Open Source per la piattaforma MetaTrader 5. - pagina 39

 

Vogliamo costruire reti a base radiale?

hanno un forte bug, mentre imparano rapidamente, prevedono male su dati sconosciuti.

 
Urain:

u - ingresso attivatore

y - fattore di potenza supplementare.

Ovunque ci sia un esponente, si dovrebbe evitare di calcolare esponenti di numeri positivi per evitare di ottenere grandi numeri che superano i 32 bit. Per esempio, per calcolare sigma è meglio fare come segue

doppio x = -y*u;

doppio e=exp(-|x|);

se(x<=0) ritorno(1./(1.+e))

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

Queste formule sono derivate abbastanza semplicemente. Se l'argomento esponente è negativo, lasciamo la formula invariata. Se è positivo, moltiplichiamo il numeratore e il denominatore per l'esponente dello stesso argomento, ma con segno negativo.

 
Vinin:

Sei tu che hai il visualizzatore di djvu . Ho tutti i miei libri leggibili.
 
gpwr:

Ovunque ci sia un esponente, si dovrebbe evitare di calcolare esponenti di numeri positivi per evitare di ottenere grandi numeri che superano i 32 bit. Per esempio, il calcolo di sigma è migliore in questo modo

doppio x = -y*u;

doppio e=exp(-|x|);

se(x<=0) ritorno(1./(1.+e))

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

Queste formule sono derivate abbastanza semplicemente. Se l'argomento esponente è negativo, lasciamo la formula invariata. Se è positivo, moltiplichiamo il numeratore e il denominatore per l'esponente dello stesso argomento, ma con segno negativo.

Stranamente la sigmoide stessa funziona correttamente anche con grandi input negativi, ma la funzione ipertangente fallisce, così ho aggiunto una sigmoide spostata in aggiunta agli algoritmi classici. La funzione funziona nello stesso limite dell'ipertangente, ma è più veloce e non ha problemi di #IND.

Allo stesso modo, con la regolazione dell'angolo di attacco (per piccoli valori del coefficiente y) l'ipertangente non raggiunge -1;1, la sigmoide spostata non ha questi problemi.

In generale chi vuole finalizzare l'ipertangente, ma penso che la funzione è poco promettente, non solo che devo salvare il risultato perché l'esponente è usato due volte, quindi ancora bisogno di controlli, più problemi con il mancato raggiungimento dei limiti quando si regola l'attacco.

La mia conclusione è che l'ipertangente è un no-go, la regola del sigmoide spostato.

 
Urain:

La mia conclusione è che l'ipertangente è un no-go, la regola del sigmoide spostato.

distaccato.
 
joo:
distaccato.

È possibile fare un'implementazione più semplice della sigmoide nel limite [-1;1]

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

ma questa implementazione ha anche un problema con #IND, quindi è meglio aggiungere un paio di semplici operazioni che scrivere numerosi controlli

qui aggiungiamo + - / , quindi 3 operazioni extra contro un sacco di controlli

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.);
  }

Questa è l'opzione migliore, sia in termini di facilità del campo di lavoro [-1;1] che di velocità di funzionamento. L'area di definizione è l'intera linea numerica.

Questa è esattamente la funzione di attivazione che sto usando ultimamente, avendo provato molte alternative e testato la loro velocità di esecuzione.

 

E questo è il mio preferito nella griglia dell'eco:

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 
        }
};
 

A proposito.

È necessaria una funzione sigmoidea.

I requisiti sono una forma normale della funzione stessa e della sua derivata (non troppo difficile da calcolare) e una forma normale della funzione inversa e della sua derivata.

Motivazione: