He estado a la codificación de una red neuronal paquete para mi propia diversión, y parece que funciona. He estado leyendo acerca de Adán y por lo que he visto es muy difícil de batir.
Bueno, cuando me implementar el Adam algoritmo en mi código lo hace terriblemente - convergen muy lentamente o incluso divergentes para algunos de los problemas que yo he probado. Me parece que se debe haber cometido un error, pero el algoritmo es bastante sencillo.
Para cortar la posibilidad de algún error de programación, he decidido crear una función muy sencilla en Excel y comparar Adán estándar de gradiente de la pendiente. Por lo que puedo ver, estándar de gradiente de la pendiente, funciona mejor en bastante consistente para muchos de los parámetros (al menos relativamente simple, las funciones deterministas). Adam parece converger mucho más fiable, independientemente de lo que se alimentan, pero es consistentemente más lento.
Sin embargo - lo que yo he leído bastante consistente pinturas de Adán como una panacea que converge mucho más rápido que cualquier otro algoritmo en casi todas las situaciones. Entonces, ¿qué da?
Sólo superando a otros algoritmos en lo suficientemente complejos problemas? Hacer el hyperparameters necesita ser sintonizado con más cuidado? Necesito ver mi arquitectura de red más cuidadosamente si yo no estoy de convergencia? Hay ciertas funciones de activación que hacer es realizar especialmente mal? O tal vez sólo he recta hasta implementado el algoritmo de forma incorrecta?
He aquí un ejemplo donde yo comparación con el estándar de gradiente de la pendiente a Adán para x^2 + x^4, utilizando una tasa de aprendizaje de 0.1 (y el uso de 0.9, 0.999 y 1e-8 para el otro Adán parámetros). Acabo trazan el gradiente en cada iteración, a partir de ambos en x=1. Adam es más lento que convergen para esta función simple para pequeñas las tasas de aprendizaje, pero convergen para cada tasa de aprendizaje que he probado (considerando que el estándar de gradiente de la pendiente luchas converger para el aprendizaje de las tasas más de alrededor de 0.3). Se ve a la derecha o a qué se parece tengo algo mal?
He aquí las variables intermedias para un número de iteraciones de Adán:
Yo (tal vez ingenuamente) que se espera que acabo de enchufar el Adam algoritmo en mi código, con un stock conjunto de parámetros, y todo lo que acaba de velocidad. Lo que me estoy perdiendo aquí?
Gracias por la ayuda!