A depuração de redes neurais geralmente envolve o ajuste de hiperparâmetros, visualização dos filtros aprendidos e plotagem de métricas importantes. Você poderia compartilhar quais hiperparâmetros você está usando?
- Qual é o tamanho do seu lote?
- Qual é a sua taxa de aprendizado?
- Que tipo de autoencoder você está usando?
- Você já tentou usar um Autoencoder Denoising? (Que valores de corrupção você já tentou?)
- Quantas camadas ocultas e de que tamanho?
- Quais são as dimensões das suas imagens de entrada?
Analisar os logs de treinamento também é útil. Traçar um gráfico da sua perda de reconstrução (eixo Y) em função da época (eixo X). Sua perda de reconstrução é convergente ou divergente?
Aqui está um exemplo de um auto-codificador para a classificação de gênero humano que foi divergente, foi interrompido após 1500 épocas, tinha hiperparâmetros ajustados (neste caso, uma redução na taxa de aprendizado) e reiniciado com os mesmos pesos divergentes e eventualmente convergentes.
Aqui está um que está convergindo: (queremos isso)
A baunilha "sem restrições" pode encontrar um problema em que eles simplesmente aprendem o mapeamento de identidade. Essa é uma das razões pelas quais a comunidade criou os sabores Denoising, Sparse e Contractive.
Você poderia postar um pequeno subconjunto de seus dados aqui? Eu estaria mais do que disposto a mostrar os resultados de um dos meus auto-codificadores.
Em uma nota lateral: você pode se perguntar por que está usando imagens de gráficos em primeiro lugar, quando esses gráficos podem ser facilmente representados como um vetor de dados. Ou seja,
[0, 13, 15, 11, 2, 9, 6, 5]
Se você é capaz de reformular o problema como acima, está essencialmente facilitando a vida do seu codificador automático. Primeiro, ele não precisa aprender a ver imagens antes de tentar aprender a distribuição gerada.
Resposta de acompanhamento (dados os dados).
Aqui estão os filtros de uma unidade oculta de 1000 unidades, Autoencoder Denoising de camada única. Observe que alguns dos filtros são aparentemente aleatórios. Isso porque parei de treinar tão cedo e a rede não teve tempo de aprender esses filtros.
Aqui estão os hiperparâmetros com os quais eu o treinei:
batch_size = 4
epochs = 100
pretrain_learning_rate = 0.01
finetune_learning_rate = 0.01
corruption_level = 0.2
Parei o pré-treinamento após a 58ª época, porque os filtros eram suficientemente bons para serem postados aqui. Se eu fosse você, treinaria um Autoencoder Stacked Denoising completo de 3 camadas com uma arquitetura 1000x1000x1000 para começar.
Aqui estão os resultados da etapa de ajuste fino:
validation error 24.15 percent
test error 24.15 percent
Portanto, à primeira vista, parece melhor que o acaso, no entanto, quando analisamos a divisão de dados entre os dois rótulos, vemos que ele tem exatamente o mesmo percentual (75,85% rentável e 24,15% não rentável). Isso significa que a rede aprendeu a simplesmente responder "rentável", independentemente do sinal. Provavelmente treinaria isso por mais tempo com uma rede maior para ver o que acontece. Além disso, parece que esses dados são gerados a partir de algum tipo de conjunto de dados financeiros subjacentes. Eu recomendo que você analise as Redes Neurais Recorrentes depois de reformular seu problema nos vetores, conforme descrito acima. RNNs podem ajudar a capturar algumas das dependências temporais encontradas em dados de séries temporais como esta. Espero que isto ajude.