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

 
joo:

Pezzo per pezzo - capisco.

Non capisco le altre opzioni. Come posso presentare tutti gli esempi in una volta sola? - O sono stupido?

Beh hai presentato tutti gli esempi in una volta (calcolando il valore totale di FF su tutti gli esempi), gli algoritmi di addestramento sono diversi, bekprops per esempio presenta un esempio alla volta in ordine casuale, ma fa scorrere l'intera lista di esempi più volte, quindi perché non dare all'algoritmo tutti gli esempi in una volta, e già li darà alla griglia secondo la sua logica.

HZ non stupido e solo non so cosa stavo pensando lì, io risolvere tutto con spiegazioni.

ZZZY Proprio ora non è del tutto pronto a spiegare tutto, io stesso vorrei capire :)

 
gpwr:

Rebyata, ya budu seldom syuda zahodit'. Esli est' voprosi o interes k sovmestnim razrabotkami, pishite na moy yahoo email (ukazan v profile).

Buona fortuna con il progetto EngiNeuro!

Grazie Vladimir, mantieni le visite frequenti :)

Urain:

Tutto in una volta

Anch'io pensavo che il pezzo per pezzo fosse il migliore. Ma no. Gli algoritmi di gradiente sono progettati esattamente per l'errore cumulativo, quindi se si alimenta dal pezzo, non è esattamente la discesa a gradiente.

Quindi solo tutti insieme, almeno per il feed-forward

 
TheXpert:

Grazie, Vladimir, torna più spesso :)

Anch'io pensavo che il pezzo per pezzo fosse il migliore. Ma no. Gli algoritmi di gradiente sono progettati esattamente per l'errore totale, quindi se si alimenta dal pezzo, non è esattamente la discesa a gradiente.

Quindi solo tutti insieme, almeno per il feed-forward


Sì, dipende dall'implementazione dell'algoritmo, sto facendo un brainstorming ora se ho dimenticato qualcosa?
 

Note sulla formazione NS

1) Funzione di fitness (funzione di apprendimento)

Qualsiasi processo di apprendimento di NS si riduce a trovare un massimo (minimo) funzionale nello spazio degli argomenti adattivi (nel nostro caso questo è lo spazio dei pesi)

2) MSE

La versione classica del funzionale è MSE(errore quadratico medio)

Per esso, le derivate parziali per ogni parametro adattivo possono essere trovate facilmente, il che permette l'uso del gradiente di adattamento dei pesi.

Per ogni esempio, che è alimentato all'ingresso del NS, otteniamo la risposta della rete - y, e abbiamo una 'risposta corretta' - y'.

Per il metodo di apprendimento incrementale, i pesi sono regolati dopo ogni esempio. In questo caso MSE=MODUL(y-y')

Per il metodo batch, i pesi sono regolati dopo aver eseguito l'intero campione di allenamento. Qui MSE=ROUND((AMOUNT(y-y'))^2)

Lo svantaggio principale di MSE è che bisogna avere la risposta "giusta" per ogni esempio

Questa funzionalità è utile, per esempio, per la ricostruzione di un algoritmo indicatore "sconosciuto", se i suoi valori "corretti" su ogni barra sono noti

3) Funzionalità non standard

Una gamma più ampia di compiti può essere risolta usando funzionalità non standard

Diciamo che possiamo usare le neuronet per la ricerca di strategie di trading sintetiche la cui formazione arriva alla massimizzazione del funzionale F=Profitto/MaxDownload

Qui la stima è fatta dopo l'intero training, perché si può valutare la performance della strategia solo alla fine del periodo

Nota molto bella - non abbiamo bisogno di avere la risposta corretta per ogni barra

C'è uno spiacevole "ma": non c'è la possibilità di trovare la derivata parziale del funzionale per ogni peso, quindi i metodi a gradiente di costruzione dei pesi sono inaccettabili - dovremmo usare metodi stocastici, come GA

È qui che entrano in gioco le GPU - non c'è ancora un'alternativa economica a loro

P.S.

A differenza dell'ottimizzatore di parametri di ogni particolare strategia di trading, le reti neurali permettono di "far crescere" algoritmi completamente sintetici di strategie di trading )))

E il potenziale di un tale approccio è molto grande

 

Sto preparando una funzione per salvare la griglia in un file bin. Tutte le informazioni sono facilmente criptate in un array di ulong, ma cosa fare con i pesi non riesco a capirlo.

Vorrei usare la funzione standard di salvataggio dell'array.

Qualcuno ha un algoritmo per la doppia crittografia ripristinabile in ulong?


Penso che una griglia dovrebbe essere salvata in un formato semplice adatto all'uso in MQL5 (prendendolo come base), e devo usarlo per scrivere convertitori per diversi formati di diversi pacchetti di reti neurali.

 
Urain:

Sto preparando una funzione per salvare la griglia in un file bin. Tutte le informazioni sono facilmente criptate in un array di ulong, ma cosa fare con i pesi non riesco a capirlo.

Vorrei usare la funzione standard di salvataggio dell'array.

Qualcuno ha un algoritmo per la crittografia ripristinabile del doppio in ulong?


Penso che la griglia dovrebbe essere salvata in un formato semplice, adatto all'uso in MQL5 (prendendolo come base), e i convertitori per diversi formati di diversi pacchetti di reti neurali dovrebbero essere scritti a partire da quel formato.


Perché FileWriteArray non va bene? Non capisco il problema. Può farci un esempio?

Comunque, la configurazione della griglia in un file e i pesi in un altro.

Non vedo cosa sia più conveniente per MQL, e non vedo perché sia necessarioripristinare la crittografia, dato che causerà frenate inutili.

 
her.human:

Cosa c'è di sbagliato in FileWriteArray? Non capisco il problema. Può farci un esempio?

In ogni caso, la configurazione della griglia in un file e i pesi in un altro.

Non vedo cosa sia più conveniente per MQL, e non vedo perché devoripristinare la crittografia, visto che causerà frenate inutili.

Sì, sarà lento (secondo le mie stime ci vorranno 5 secondi per codificare 1 miglio di pesi), voglio solo memorizzare sia i pesi che la configurazione della griglia in un unico file, e non mi interessa quanti file ci vorranno, lo troverò comodo.

Per FileWriteArray solo e vuole affinare, ma in presenza di un array ulong formando una descrizione della rete (numero di strati, numero di neuroni, tipi di neuroni, la relazione tra di loro) ed è ancora allegato un array di pesi, ma in duplicati,

come stipare tutto questo in un file bin (supponendo che il partizionamento non sia chiaro, il partizionamento stesso è codificato nei primi numeri della griglia)?

 
Urain:

0. Sto preparando una funzione per salvare la griglia in un file bin. Tutte le informazioni sono facilmente criptate in un array di ulong, ma cosa fare con i pesi non riesco a capirlo.

Vorrei usare la funzione standard dell'array, ma non so cosa fare.

1. qualcuno ha un algoritmo di crittografia doppia recuperabile per ulong?


Penso che una griglia dovrebbe essere salvata in un formato semplice, adatto all'uso in MQL5 (prendendolo come base) e usare questo formato per scrivere convertitori per diversi formati di diversi pacchetti di reti neurali.

0. È estremamente prematuro. Prima bisogna assolutamente chiarire e concordare l'insieme dei dati, mappati senza ambiguità nella struttura e configurazione della griglia, a livello logico. Lo stoccaggio fisico non è assolutamente un problema.

1. È facile. In mql5 c'è un buco speciale per queste conversioni - strutture di tipo diverso possono essere assegnate l'una all'altra senza limitazioni, purché abbiano la stessa dimensione.

// ulong e double sono esattamente la stessa cosa.

Per un esempio perverso guardate qui: https: //www.mql5.com/ru/forum/3775/75737#comment_75743

2. Mmmm... Da un lato sono d'accordo - il formato dovrebbe essere comodo e semplice, dall'altro dovrebbe essere molto universale, come xml. Forse pianifica due opzioni (il più possibile): una testuale, l'altra binaria. E btw -- vedi #0.

---

Ho camminato intorno a questo ramo, ancora indeciso se interferire o meno... Quindi non ho potuto resistere.

Mi viene in mente un pensiero. Uno. // Voglio dire, ho molti pensieri, ma solo uno. :)

L'idea è questa: il codice della griglia deve essere generato dopo una configurazione preliminare nel "grid-editor" (configuratore). // Questa idea è stata suggerita molte volte prima e non ricordo che sia stata rifiutata.

Quindi, lo schema - rappresentazione intermedia obbligatoria (ad esempio, sotto forma di file xml) contenente informazioni complete sulla struttura della rete neuronale.

Una rappresentazione intermedia è attentamente pensata, analizzata per la completezza e altre complessità, convalidata e fissato da.

Solo dopo si può codificare (separatamente): (1) Tutti i tipi di configuratori di griglia, (2) Codogeneratori - traducendo la rappresentazione intermedia in codice mql5.

Ci possono essere diverse implementazioni di entrambi - il che è buono e giusto.

 
Urain:

Sì freni sarà (1 mille pesi per la mia stima sarà crittografare 5 secondi), basta volere e peso e il dispositivo di griglia in un unico file per memorizzare, e poi spargere un mucchio di file e il diavolo stesso si romperà una gamba, in questo vedo la convenienza.

Voglio affinare FileWriteArray, ma ho un array ulong che forma la descrizione della rete (numero di strati, numero di neuroni, tipi di neuroni, connessioni tra loro) e un array di pesi collegato ad esso, ma in duplicati,

come stipare tutto in un file bin (supponendo che il partizionamento non sia chiaro, il partizionamento stesso è criptato nei primi numeri della griglia) ?

Categoricamente contro l'infilare tutto in un file. Descrizione della rete separatamente - pesi separatamente. Altrimenti sorgeranno altri problemi inutili.

 
Perché un bidone? Non sarebbe meglio un file di testo semplice, in modo da poterlo guardare con gli occhi?
Motivazione: