L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 609

 
Sergey Chalyshev:


Butta la tua rete nella spazzatura se reagisce a valori gpsh come questo. Una rete normale funziona e impara a qualsiasi valore iniziale, anche a zero.


Sciocchezze.
 

  • Determinazione degli iperparametri DNN ottimali

Tipicamente, gli iperparametri per una rete neurale includono il numero di strati nascosti, il numero di neuroni in ogni strato nascosto, le funzioni di attivazione, inizializzazione e regolarizzazione applicate, e il livello di allenamento. La struttura dell'ottimizzazione degli iperparametri è mostrata nella figura seguente.

optimHP

Fig. 1. Struttura degli iperparametri in una rete neurale e modi per ottimizzarla

Ci sono tre modi per ottimizzare gli iperparametri:

  1. Ricerca a griglia
  2. Ottimizzazione genetica
  3. Ricerca a griglia Ricerca genetica Ottimizzazione bayesiana

Nel primo caso per ogni iperparametro definiamo un vettore con diversi valori fissi. Poi, usando caret::train() o il nostro script, addestriamo il modello su tutte le combinazioni di valori degli iperparametri. Dopo di che il modello con la migliore metrica di qualità di classificazione viene selezionato e i suoi parametri saranno accettati come ottimali. Lo svantaggio di questo metodo è che impostando una griglia di valori, è probabile che si perda l'optimum.

Il secondo metodo utilizza la possibilità di ricerca stocastica dei migliori parametri con l'uso di algoritmi genetici. Abbiamo già discusso in dettaglio diversi algoritmi di ottimizzazione genetica inquesto articolo. Perciò non li ripeteremo.

Nel terzo caso viene utilizzato l'approccio bayesiano (processi gaussiani e IMS), che testeremo in questo articolo. Useremo il pacchettorBayesianOptimization(versione 1.1.0). Per la teoria dei metodi utilizzati, vedereJasper Snoek, Hugo Larochelle, Ryan P. Adams (2012) Practical Bayesian Optimization of Machine Learning Algorithms

Gli iperparametri nelle reti neurali in generale possono essere divisi in due gruppi: globali e locali (nodo). Quelli globali includono il numero di strati nascosti, il numero di neuroni in ogni strato, il livello di formazione e di coppia, i pesi di inizializzazione dei neuroni. Quelli locali includono il tipo di strato, la funzione di attivazione, il dropout/dropconect e altri parametri di regolarizzazione.

 

In generale, si raccomanda ancora una volta di allenarsi molto sugli stessi dati.

Ho fatto qualche allenamento manuale qui e sono un po' confuso. Mi aspettavo che la riduzione degli errori fosse stabile, ma salta.

Anche l'addestramento ripetuto sulla stessa struttura di rete può dare risultati con una differenza del 3-5%, che può anche interferire con la scelta corretta della struttura.

 

Potete suggerirmi qualche altro trader che possa addestrarmi? Un mio amico mi ha raccomandato la formazione (da Polikarp Brekhunov - cambiato da Artyom Trishkin), chissà, forse ci sono altri commercianti che forniscono corsi di formazione?

 
elibrario:

In generale, si raccomanda ancora una volta di allenarsi molto sugli stessi dati.

Ho fatto qualche allenamento manuale qui e sono un po' confuso. Mi aspettavo che la riduzione degli errori fosse stabile, ma salta.

Anche l'addestramento ripetuto sulla stessa struttura di rete può dare risultati con il 3-5% di differenza, il che può anche interferire con la scelta corretta della struttura.

È così che dovrebbe essere. L'inizializzazione iniziale delle scale è fatta con piccoli valori di numeri casuali (dipende dal tipo di inizializzazione). Per ottenere risultati riproducibili, è necessario impostare il GSF sullo stesso stato prima di ogni sessione di allenamento. Questo è ciò a cui serve set.seed().

Buona fortuna

 
Vladimir Perervenko:

Questo è il modo in cui dovrebbe essere. L'inizializzazione iniziale dei pesi è fatta con piccoli valori di numeri casuali (dipende dal tipo di inizializzazione). Per ottenere risultati riproducibili, è necessario impostare il GSF sullo stesso stato prima di ogni sessione di allenamento. Questo è ciò a cui serve set.seed().

Buona fortuna,

Ah, bene, stavo pre-addestrando in Darch RBM in 2 epoche con learnRate = 0.3.

 
Vladimir Perervenko:

  • Determinazione degli iperparametri DNN ottimali

Nel secondo caso uso la possibilità di ricerca stocastica dei migliori parametri, usando algoritmi genetici.

Per il trading, l'idea dell'ottimizzazione del modello (TS) è altamente discutibile, perché qualsiasi ottimizzazione cerca picchi / depressioni, e noi non ne abbiamo bisogno. Abbiamo bisogno, idealmente, di plateau piatti che siano il più grandi possibile. Questi plateau dovrebbero avere una proprietà notevole: i cambiamenti nei parametri del modello NON dovrebbero portare all'evasione del plateau.

Si tratta di ottimizzazione.

In effetti, qui dovremmo aggiungere anche il problema della stabilità dei parametri del modello che, se cambiano, sono all'interno di un intervallo di confidenza piuttosto stretto (5%). Mi sembra che la stabilità dei parametri del modello risulti nella situazione in cui la performance del modello è ad un certo plateau e se improvvisamente otteniamo un ottimo risultato mentre testiamo il modello significa che abbiamo raggiunto il punto di minimax, abbiamo ottenuto una condizione instabile che non si verificherà mai nella pratica, inoltre uno stop-out sarà situato intorno a questo punto ottimale.

PS.

A proposito, nel tester gli sviluppatori hanno fornito la possibilità di cercare un altopiano per colore. Personalmente, uso il tester come strumento di rifinitura e prendo i parametri che si riferiscono a un quadrato con quadrati dello stesso colore intorno. Questa è una chiara espressione del mio concetto di plateau.

 
elibrario:

Ah, bene, ho fatto 2 epoche di preapprendimento in Darch RBM con learnRate = 0.3.

All'interno di darch() c'è un parametro seed = NULL per impostazione predefinita. impostatelo su qualche stato, per esempio seed = 12345.

Questo è un piccolo valore di learnRate. Inizia con learnRate = 0.7, numEpochs = 10 per RBM e NN. Ma questi sono dati del soffitto. È necessario ottimizzare per un set di dati specifico.

Buona fortuna

 
Vladimir Perervenko:
C'è un parametro seed = NULL all'interno di darch() per default. Impostatelo su qualche stato, per esempio seed = 12345.

Questo è un piccolo valore di learnRate. Inizia con learnRate = 0.7, numEpochs = 10 per RBM e NN. Ma questi sono dati del soffitto. È necessario ottimizzare per un set di dati specifico.

Buona fortuna

Grazie! Lo proverò.
 
SanSanych Fomenko:

Per il trading, l'idea dell'ottimizzazione del modello (TS) sembra altamente discutibile, perché qualsiasi ottimizzazione è alla ricerca di picchi / depressioni, e noi non ne abbiamo bisogno. Abbiamo bisogno, idealmente, di plateau piatti, il più grande possibile. Questi plateau dovrebbero avere una proprietà notevole: i cambiamenti nei parametri del modello NON dovrebbero portare all'evasione del plateau.

Si tratta di ottimizzazione.

In effetti, qui dovremmo aggiungere anche il problema della stabilità dei parametri del modello che, se cambiano, sono all'interno di un intervallo di confidenza piuttosto stretto (5%). Mi sembra che la stabilità dei parametri del modello risulti nella situazione in cui la performance del modello è ad un certo plateau e se improvvisamente otteniamo un ottimo risultato mentre testiamo il modello significa che abbiamo raggiunto il punto di minimax, abbiamo ottenuto una condizione instabile che non si verificherà mai nella pratica, inoltre uno stop-out sarà situato intorno a questo punto ottimale.

PS.

A proposito, nel tester gli sviluppatori hanno fornito la possibilità di cercare un altopiano per colore. Personalmente, uso il tester come strumento di rifinitura e prendo i parametri che si riferiscono a un quadrato con quadrati dello stesso colore intorno. Questa è una chiara espressione del mio concetto di "plateau".

1. Di quale ottimizzazione stai parlando? Quale altopiano? Quale modello? Se state parlando di una rete neurale, sarebbe strano non addestrare (ottimizzare i parmetri) la DNN prima di utilizzarla.

2. Quali parametri del modello(?) dovrebbero essere stabili?

Non capisco i vostri pensieri.

Stavo parlando dell'ottimizzazione degli iperparametri di DNN, che deve essere fatta necessariamente e non nel tester.