Alternativas à generalização L1, L2 e Dropout

8

Tenho a seguinte configuração para um projeto de pesquisa de Finanças / Aprendizado de Máquina na minha universidade: estou aplicando uma Rede Neural (Profunda) (MLP) com a seguinte estrutura em Keras / Theano para distinguir estoques com desempenho superior (etiqueta 1) dos estoques com desempenho insatisfatório ( etiqueta 0). Em primeiro lugar, apenas uso múltiplos de avaliação reais e histróricos. Por se tratar de dados de estoque, pode-se esperar dados muito barulhentos. Além disso, uma precisão estável fora da amostra acima de 52% já pode ser considerada boa neste domínio.

A estrutura da rede:

  • Camada densa com 30 recursos como entrada
  • Ativação Relu
  • Camada de normalização em lote (sem isso, a rede não está parcialmente convergindo)
  • Camada de desistência opcional
  • Denso
  • Relu
  • Lote
  • Cair fora
  • .... Camadas adicionais, com a mesma estrutura
  • Camada densa com ativação sigmóide

Otimizador: RMSprop

Função de perda: Entropia cruzada binária

A única coisa que faço para o pré-processamento é um redimensionamento dos recursos para o intervalo [0,1].

Agora, estou enfrentando um problema típico de sobreajuste / insuficiência, que normalmente enfrentaria com a desistência ou / e com a regularização de kernel L1 e L2. Porém, nesse caso, a regularização do Dropout e a L1 e L2 têm um impacto ruim no desempenho, como você pode ver nos gráficos a seguir.

Minha configuração básica é: NN de 5 camadas (incluindo camada de entrada e saída), 60 neurônios por camada, taxa de aprendizado de 0,02, sem L1 / L2 e sem interrupção, 100 épocas, normalização de lotes, tamanho de lote 1000. Tudo é treinado 76000 amostras de entrada (classes quase equilibradas de 45% / 55%) e aplicadas a aproximadamente a mesma quantidade de amostras de teste. Para os gráficos, mudei apenas um parâmetro de cada vez. "Perf-Diff" significa a diferença média de desempenho das ações classificadas como 1 e ações classificadas como 0, que é basicamente a principal métrica no final. (Mais alto é melhor)

Regularização No caso l1, a rede está basicamente classificando cada amostra para uma classe. O pico está ocorrendo porque a rede está fazendo isso novamente, mas classifica 25 amostras aleatoriamente corretas. Portanto, esse pico não deve ser interpretado como um bom resultado, mas como um desvio.

Os outros parâmetros têm o seguinte impacto: insira a descrição da imagem aqui

Você tem alguma idéia de como eu poderia melhorar meus resultados? Existe um erro óbvio que estou cometendo ou há uma resposta fácil para os resultados da regularização? Você sugeriria fazer qualquer tipo de seleção de recurso antes do treinamento (por exemplo, PCA)?

Editar : Outros parâmetros: insira a descrição da imagem aqui

SebastianB
fonte
2
Apenas alguns pensamentos desorganizados: o tamanho do seu lote é bastante grande. Outra estratégia de regularização é a norma máxima: limite a norma L2 total dos pesos em uma camada específica com algum valor. Os dados de estoque naturalmente têm uma natureza de série temporal, portanto, talvez uma camada de RNN possa ajudar. Mas configurar uma RNA é mais arte do que ciência - mesmo quando um problema é simples, é necessária a combinação certa de parâmetros para a rede aprender.
Sycorax diz Restabelecer Monica
@ Sycorax: Acabei de editar minha pergunta e incluí a norma máxima e o tamanho do lote: comportamento interessante, mas sem grande efeito nos resultados dos testes, mais nos resultados dos trens. Infelizmente, eu realmente não tenho dados de séries temporais, mas mais dados de captura instantânea no tempo, então acho que uma RNN não é aplicável no meu caso.
SebastianB

Respostas:

2

Dado que são dados financeiros, é provável que as distribuições de recursos em seus conjuntos de trens e validação sejam diferentes - um fenômeno conhecido como deslocamento covariável - e as redes neurais não tendem a jogar bem com isso. Ter distribuições de recursos diferentes pode causar super ajuste, mesmo que a rede seja relativamente pequena.

Dado que l1 e l2 não ajudam as coisas, suspeito que outras medidas de regularização padrão, como adicionar ruído a entradas / pesos / gradientes, provavelmente não ajudarão, mas pode valer a pena tentar.

Eu ficaria tentado a experimentar um algoritmo de classificação que seja menos afetado pelas magnitudes absolutas de características, como um aumento de gradiente nas árvores.

housecat64
fonte