La depuración de redes neuronales generalmente implica ajustar hiperparámetros, visualizar los filtros aprendidos y trazar métricas importantes. ¿Podría compartir qué hiperparámetros ha estado usando?
- ¿Cuál es su tamaño de lote?
- ¿Cuál es tu tasa de aprendizaje?
- ¿Qué tipo de autoencoder estás usando?
- ¿Has intentado usar un autoencoder denoising? (¿Qué valores de corrupción has intentado?)
- ¿Cuántas capas ocultas y de qué tamaño?
- ¿Cuáles son las dimensiones de sus imágenes de entrada?
Analizar los registros de entrenamiento también es útil. Trace un gráfico de su pérdida de reconstrucción (eje Y) en función de la época (eje X). ¿Su pérdida de reconstrucción es convergente o divergente?
Aquí hay un ejemplo de un autoencoder para la clasificación de género humano que era divergente, se detuvo después de 1500 épocas, tenía hiperparámetros sintonizados (en este caso, una reducción en la tasa de aprendizaje) y se reinició con los mismos pesos que fueron divergentes y finalmente convergieron.
Aquí hay uno que converge: (queremos esto)
Vanilla "sin restricciones" puede encontrarse con un problema en el que simplemente aprenden el mapeo de identidad. Esa es una de las razones por las cuales la comunidad ha creado los sabores Denoising, Sparse y Contractive.
¿Podría publicar un pequeño subconjunto de sus datos aquí? Estaría más que dispuesto a mostrarle los resultados de uno de mis codificadores automáticos.
En una nota al margen: es posible que desee preguntarse por qué está utilizando imágenes de gráficos en primer lugar cuando esos gráficos podrían representarse fácilmente como un vector de datos. Es decir,
[0, 13, 15, 11, 2, 9, 6, 5]
Si puede reformular el problema como se indica arriba, esencialmente está haciendo más fácil la vida de su codificador automático. No necesita primero aprender a ver imágenes antes de intentar aprender la distribución generadora.
Respuesta de seguimiento (dada la información).
Aquí están los filtros de una unidad oculta de 1000 unidades, Denoising Autoencoder de una sola capa. Tenga en cuenta que algunos de los filtros son aparentemente aleatorios. Eso es porque dejé de entrenar tan temprano y la red no tuvo tiempo de aprender esos filtros.
Aquí están los hiperparámetros con los que lo entrené:
batch_size = 4
epochs = 100
pretrain_learning_rate = 0.01
finetune_learning_rate = 0.01
corruption_level = 0.2
Paré el pre-entrenamiento después de la 58ª época porque los filtros eran lo suficientemente buenos como para publicar aquí. Si yo fuera usted, entrenaría un Autoencoder de Denoising Apilado de 3 capas completo con una arquitectura 1000x1000x1000 para comenzar.
Aquí están los resultados del paso de ajuste:
validation error 24.15 percent
test error 24.15 percent
Entonces, a primera vista, parece mejor que casualidad, sin embargo, cuando miramos el desglose de datos entre las dos etiquetas, vemos que tiene exactamente el mismo porcentaje (75.85% rentable y 24.15% no rentable). Eso significa que la red ha aprendido a responder simplemente "rentable", independientemente de la señal. Probablemente entrenaría esto por más tiempo con una red más grande para ver qué pasa. Además, parece que estos datos se generan a partir de algún tipo de conjunto de datos financieros subyacentes. Le recomendaría que examine las redes neuronales recurrentes después de reformular su problema en los vectores como se describe anteriormente. Los RNN pueden ayudar a capturar algunas de las dependencias temporales que se encuentran en datos de series de tiempo como este. Espero que esto ayude.