L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 609

 
Sergey Chalyshev:


Jetez votre réseau à la poubelle s'il réagit aux valeurs gpsh de cette manière. Un réseau normal fonctionne et apprend à n'importe quelle valeur initiale, même à zéro.


C'est absurde.
 

  • Détermination des hyperparamètres optimaux du DNN

Généralement, les hyperparamètres d'un réseau neuronal comprennent le nombre de couches cachées, le nombre de neurones dans chaque couche cachée, les fonctions d'activation, d'initialisation et de régularisation appliquées, et le niveau d'apprentissage. La structure de l'optimisation des hyperparamètres est présentée dans la figure ci-dessous.

OptimHP

Fig. 1. Structure des hyperparamètres dans un réseau neuronal et moyens de l'optimiser

Il existe trois façons d'optimiser les hyperparamètres :

  1. Recherche dans la grille
  2. Optimisation génétique
  3. Recherche sur grille Recherche génétique Optimisation bayésienne

Dans le premier cas, pour chaque hyperparamètre, nous définissons un vecteur avec plusieurs valeurs fixes. Ensuite, en utilisant caret::train() ou notre propre script, nous entraînons le modèle sur toutes les combinaisons de valeurs d'hyperparamètres. Ensuite, le modèle présentant les meilleures mesures de qualité de classification est sélectionné et ses paramètres seront acceptés comme optimaux. L'inconvénient de cette méthode est qu'en fixant une grille de valeurs, nous risquons de manquer l'optimum.

La deuxième méthode utilise la possibilité de recherche stochastique des meilleurs paramètres à l'aide d'algorithmes génétiques. Nous avons déjà abordé en détail plusieurs algorithmes d'optimisation génétique danscet article. Nous ne les répéterons donc pas.

Dans le troisième cas, on utilise l'approche bayésienne (processus gaussiens et IMS), que nous allons tester dans cet article. Nous utiliserons le paquetrBayesianOptimization(version 1.1.0). Pour la théorie des méthodes utilisées, voirJasper Snoek, Hugo Larochelle, Ryan P. Adams (2012) Practical Bayesian Optimization of Machine Learning Algorithms.

Les hyperparamètres des réseaux neuronaux en général peuvent être divisés en deux groupes : globaux et locaux (nœuds). Les globaux comprennent le nombre de couches cachées, le nombre de neurones dans chaque couche, le niveau de formation et de couple, les poids d'initialisation des neurones. Les paramètres locaux comprennent le type de couche, la fonction d'activation, le dropout/dropconect et d'autres paramètres de régularisation.

 

En général, il est recommandé d'effectuer de nombreux entraînements sur les mêmes données.

J'ai fait quelques formations manuelles ici et je suis un peu perdu. Je m'attendais à ce que la réduction des erreurs soit stable, mais elle saute.

Même un entraînement répété sur la même structure de réseau peut donner des résultats présentant une différence de 3 à 5 %, ce qui peut également interférer avec le choix correct de la structure.

 

Pouvez-vous me suggérer d'autres traders qui pourraient me former ? Une connaissance m'a conseillé de me former (de Polikarp Brekhunov - modifié par Artyom Trishkin), qui sait, peut-être y a-t-il d'autres commerçants qui proposent des formations ?

 
elibrarius:

En général, il est recommandé d'effectuer de nombreux entraînements sur les mêmes données.

J'ai fait quelques formations manuelles ici et je suis un peu perdu. Je m'attendais à ce que la réduction des erreurs soit stable, mais elle saute.

Même un entraînement répété sur la même structure de réseau peut donner des résultats présentant une différence de 3 à 5 %, ce qui peut également interférer avec le choix correct de la structure.

C'est comme ça que ça doit être. L'initialisation des balances se fait avec de petites valeurs de nombres aléatoires (dépend du type d'initialisation). Afin d'obtenir des résultats reproductibles, il est nécessaire de mettre le GSF dans le même état avant chaque entraînement. C'est à cela que sert set.seed().

Bonne chance

 
Vladimir Perervenko:

C'est comme ça que ça doit être. L'initialisation des poids se fait avec de petites valeurs de nombres aléatoires (dépend du type d'initialisation). Afin d'obtenir des résultats reproductibles, il est nécessaire de mettre le GSF dans le même état avant chaque entraînement. C'est à cela que sert set.seed().

Bonne chance,

Ah, bien, j'étais en pré-entraînement dans Darch RBM en 2 époques avec learnRate = 0.3.

 
Vladimir Perervenko:

  • Détermination des hyperparamètres optimaux du DNN

Dans le second cas, j'utilise la possibilité de recherche stochastique des meilleurs paramètres, en utilisant des algorithmes génétiques.

Pour le trading, l'idée d'une optimisation du modèle (TS) est très discutable, car toute optimisation recherche des pics / creux, et nous n'en avons pas besoin. Nous avons besoin, idéalement, de plateaux plats aussi larges que possible. Ces plateaux devraient avoir une propriété remarquable : les modifications des paramètres du modèle ne devraient PAS conduire à l'évasion du plateau.

Il s'agit d'optimisation.

En fait, il faut ajouter ici le problème de la stabilité des paramètres du modèle qui, s'ils changent, se situent dans un intervalle de confiance assez étroit (5%). Il me semble que la stabilité des paramètres du modèle résulte de la situation où la performance du modèle est à un certain plateau et si nous obtenons soudainement un très bon résultat en testant le modèle, cela signifie que nous avons atteint le point minimax, nous avons une condition instable qui ne se produira jamais dans la pratique, de plus un stop-out sera situé autour de ce point optimal.

PS.

D'ailleurs, dans le testeur, les développeurs ont prévu une telle possibilité de rechercher un plateau par couleur. Personnellement, j'utilise le testeur comme un outil de finition et je prends des paramètres qui font référence à un carré avec des carrés de la même couleur autour. C'est une expression claire de mon concept de plateau.

 
elibrarius:

Ah, bien, j'ai fait 2 époques de pré-apprentissage dans le RBM de Darch avec learnRate = 0.3.

Dans darch(), il y a un paramètre seed = NULL par défaut. Donnez-lui une valeur quelconque, par exemple seed = 12345.

Il s'agit d'une petite valeur de learnRate. Commencez avec learnRate = 0.7, numEpochs = 10 pour RBM et NN. Mais ce sont des données de plafond. Vous devez optimiser pour un ensemble de données spécifique.

Bonne chance

 
Vladimir Perervenko:
Il y a un paramètre seed = NULL par défaut dans darch(). Définissez-le à un état quelconque, par exemple seed = 12345.

Il s'agit d'une petite valeur de learnRate. Commencez avec learnRate = 0.7, numEpochs = 10 pour RBM et NN. Mais ce sont des données de plafond. Vous devez optimiser pour un ensemble de données spécifique.

Bonne chance

Merci ! Je vais l'essayer.
 
SanSanych Fomenko:

Pour le trading, l'idée d'une optimisation du modèle (TS) semble très discutable, car toute optimisation recherche des pics / creux, et nous n'en avons pas besoin. Nous avons besoin, idéalement, de plateaux plats, aussi larges que possible. Ces plateaux devraient avoir une propriété remarquable : les modifications des paramètres du modèle ne devraient PAS conduire à l'évasion du plateau.

Il s'agit d'optimisation.

En fait, il faut ajouter ici le problème de la stabilité des paramètres du modèle qui, s'ils changent, se situent dans un intervalle de confiance assez étroit (5%). Il me semble que la stabilité des paramètres du modèle résulte de la situation où la performance du modèle est à un certain plateau et si nous obtenons soudainement un très bon résultat en testant le modèle, cela signifie que nous avons atteint le point minimax, nous avons une condition instable qui ne se produira jamais dans la pratique, de plus un stop-out sera situé autour de ce point optimal.

PS.

D'ailleurs, dans le testeur, les développeurs ont prévu une telle possibilité de rechercher un plateau par couleur. Personnellement, j'utilise le testeur comme un outil de finition et je prends des paramètres qui font référence à un carré avec des carrés de la même couleur autour. C'est une expression claire de mon concept de "plateau".

1. De quelle optimisation parlez-vous ? Quel plateau ? Quel modèle ? Si vous parlez d'un réseau neuronal, il serait étrange de ne pas entraîner (optimiser les paramètres) le DNN avant de l'utiliser.

2. Quels paramètres du modèle ( ?) doivent être stables ?

Je ne comprends pas vos pensées.

Je parlais de l'optimisation des hyperparamètres de DNN, qui doit être faite nécessairement et non dans le testeur.

Raison: