Alternatives à la généralisation L1, L2 et Dropout

8

J'ai la configuration suivante pour un projet de recherche Finance / Machine Learning dans mon université: j'applique un (Deep) Neural Network (MLP) avec la structure suivante dans Keras / Theano pour distinguer les actions surperformantes (étiquette 1) des actions sous-performantes ( étiquette 0). En premier lieu, j'utilise simplement des multiples de valorisation réels et histroriques. Parce que ce sont des données de stock, on peut s'attendre à avoir des données très bruyantes. En outre, une précision stable hors échantillon supérieure à 52% pourrait déjà être considérée comme bonne dans ce domaine.

La structure du réseau:

  • Couche dense avec 30 fonctionnalités en entrée
  • Relu-activation
  • Couche de normalisation par lots (sans cela, le réseau ne converge pas du tout en partie)
  • Couche de suppression facultative
  • Dense
  • Relu
  • Lot
  • Abandonner
  • .... Couches supplémentaires, avec la même structure
  • Couche dense avec activation sigmoïde

Optimiseur: RMSprop

Fonction de perte: entropie croisée binaire

La seule chose que je fais pour le prétraitement est une mise à l'échelle des caractéristiques à la plage [0,1].

Maintenant, je rencontre un problème typique de surajustement / sous-ajustement, que je résoudrais normalement avec Dropout ou / et la régularisation du noyau L1 et L2. Mais dans ce cas, Dropout et la régularisation L1 et L2 ont un mauvais impact sur les performances, comme vous pouvez le voir dans les graphiques suivants.

Ma configuration de base est la suivante: 5 couches NN (couche d'entrée et de sortie incluse), 60 neurones par couche, taux d'apprentissage de 0,02, pas de L1 / L2 et pas d'abandon, 100 époques, normalisation de lot, taille de lot 1000. Tout est formé sur 76000 échantillons d'entrée (classes presque équilibrées 45% / 55%) et appliqués à environ la même quantité d'échantillons de test. Pour les graphiques, je n'ai changé qu'un paramètre à la fois. "Perf-Diff" signifie la différence moyenne de performance des actions des actions classées 1 et des actions classées 0, qui est fondamentalement la métrique de base à la fin. (Plus c'est élevé, mieux c'est)

Régularisation Dans le cas l1, le réseau classe essentiellement chaque échantillon dans une classe. Le pic se produit parce que le réseau recommence, mais classe 25 échantillons correctement au hasard. Ce pic ne doit donc pas être interprété comme un bon résultat, mais comme une valeur aberrante.

Les autres paramètres ont l'impact suivant: entrez la description de l'image ici

Avez-vous des idées pour améliorer mes résultats? Y a-t-il une erreur évidente que je fais ou y a-t-il une réponse simple aux résultats de la régularisation? Souhaitez-vous suggérer de faire tout type de sélection de fonctionnalités avant la formation (par exemple PCA)?

Modifier : Autres paramètres: entrez la description de l'image ici

SebastianB
la source
2
Juste quelques réflexions non organisées: la taille de votre lot est assez grande. Une autre stratégie de régularisation est la norme max: plafonner la norme L2 totale des poids à une couche particulière à une certaine valeur. Les données boursières ont naturellement une nature chronologique, donc peut-être qu'une couche RNN pourrait aider. Mais configurer un ANN est plus de l'art que de la science - même quand un problème est simple, il faut la bonne combinaison de paramètres pour que le réseau apprenne.
Sycorax dit Réintégrer Monica
@Sycorax: Je viens de modifier ma question et j'ai inclus la norme Max et la taille du lot: comportement intéressant, mais pas de gros effet sur les résultats des tests, plus sur les résultats du train. Malheureusement, je n'ai pas vraiment de données de série temporelle mais plus de données instantanées ponctuelles, donc je pense qu'un RNN n'est pas applicable dans mon cas.
SebastianB

Réponses:

2

Étant donné qu'il s'agit de données financières, il est probable que les distributions de fonctionnalités dans votre train et vos ensembles de validation soient différentes - un phénomène connu sous le nom de décalage covariable - et les réseaux de neurones n'ont pas tendance à bien jouer avec cela. Le fait d'avoir des distributions de fonctionnalités différentes peut entraîner un surajustement même si le réseau est relativement petit.

Étant donné que l1 et l2 n'aident pas les choses, je soupçonne que d'autres mesures de régularisation standard comme l'ajout de bruit aux entrées / poids / gradients n'aideront probablement pas, mais cela pourrait valoir la peine d'être essayé.

Je serais tenté d'essayer un algorithme de classification qui est moins affecté par les magnitudes absolues des caractéristiques, comme un arbre boosté par gradient.

housecat64
la source