¿Cuáles son algunos algoritmos rápidos de descenso de gradiente?

El tutorial de NIPS 2010 sobre optimización para el aprendizaje automático de Stephen Wright es una excelente descripción general del estado del arte:

http://videolectures.net/nips201…

Por ejemplo, los métodos acelerados de Nesterov y FISTA parecen muy interesantes (pero son métodos por lotes y podrían no escalar como lo hace la aproximación estocástica en conjuntos de datos con una gran cantidad de muestras). Sin embargo, podría ser posible adaptar los métodos acelerados a una configuración en línea (ver Métodos de promedio dual para el aprendizaje estocástico regularizado y la optimización en línea por Lin Xiao).

Editar : desarrollos recientes con variantes de descenso de gradiente estocástico que se benefician de tasas de convergencia aceleradas, por ejemplo:

SAG: minimizar las sumas finitas con el gradiente promedio estocástico
Acelerando el descenso de gradiente estocástico usando la reducción de la variación predictiva

Para problemas lineales regularizados L1 muy amplios (con n_features >> n_samples), el Descenso coordinado cuidadosamente implementado parece ser más rápido que los métodos de gradiente acelerado:

http://www-stat.stanford.edu/~ti…

Sin embargo, tenga cuidado: los métodos de optimización rápidos / avanzados no siempre son necesarios para el aprendizaje automático en una configuración a gran escala, ya que el error de generalización puede hacer que el error de optimización sea irrelevante en la práctica:

http://leon.bottou.org/talks/lar…

Estos son algunos de los algoritmos que he encontrado:

En un solo sistema:

Descenso de degradado: procese grandes conjuntos de datos y calcule un degradado. Actualice los parámetros en la dirección del gradiente. Haga múltiples pases sobre los datos hasta la convergencia.
Descenso de gradiente estocástico : procese un ejemplo de datos a la vez y calcule un gradiente. Actualizar parámetros Repetir. Memoria eficiente para grandes conjuntos de datos.
Multiproceso: HogWild (NIPS ’11): calcule los gradientes en paralelo y actualice los parámetros sin ningún bloqueo entre los subprocesos: funciona solo para escaso, incluso puede no dar una alta precisión en muchos casos)
Mini- procesamiento por lotes : realice actualizaciones de peso después de procesar pocos (un lote de) ejemplos a la vez en lugar de uno. Necesita una buena función de fusión de todos los gradientes para una buena convergencia.
Descenso de gradiente promedio (ASGD) (Ruppert 1988, Xu 2010): Parámetros promedio de iteraciones de entrenamiento anteriores mientras se entrena simultáneamente sobre nuevos datos. Da convergencia súper lineal con algunos conjuntos de datos.

En un sistema distribuido: ejecute múltiples SGD en paralelo. Combine las actualizaciones del modelo utilizando un servidor de parámetros o un marco de reducción total como MPI. Correr sincrónicamente da buena convergencia pero es lento. La ejecución asíncrona (imprescindible para grandes conjuntos de datos) es rápida pero ofrece poca convergencia. Algunos trucos:

AdaGrad : Cambia adaptativamente los valores de aprendizaje para cada parámetro.
Bounded-Staleness (USENIX ATC’14): ejecute réplicas paralelas de SGD de forma asincrónica. Detén a los precursores si las actualizaciones llegan demasiado lentamente.
Delay-Tolerant (NIPS’14): ejecute réplicas SGD de forma asincrónica. Informe a las réplicas paralelas de SGD si su actualización fue útil. Funciona sorprendentemente bien en la práctica.
Downpour SGD (NIPS’12): ejecute réplicas paralelas de SGD de forma asincrónica entre los trabajadores y mantenga un servidor de parámetros. Divida los modelos haciendo que cada máquina sea responsable solo del x% de los parámetros. Comunicación cero con los trabajadores: todos los trabajadores envían sus actualizaciones al servidor. Funciona bastante mal ya que ningún trabajador tiene o entrena sobre todo el modelo. De uso general como línea de base en trabajos recientes.

El límite limitado distribuido funciona bien para la mayoría de los problemas.

More Interesting

¿Qué es un algoritmo hash?

¿A qué año de pregrado está destinado MIT 6.006 Introducción a Algoritmos (primer año, segundo año, etc.)?

¿Cuáles son algunos algoritmos para el comercio de acciones automatizado?

Cómo usar el 'mapa combinatorio' de una triangulación de un polígono 2D para probar si un borde dado de la triangulación es un borde límite

¿Cuál es la complejidad temporal del algoritmo babilónico para encontrar la raíz cuadrada?

¿Cómo resolver el problema de los genéricos?

Dada una matriz con 100 elementos (números del 0 al 99), si saco un elemento aleatorio, ¿cómo encontrarías el que saqué? ¿Cómo resolvería esto si 1: la matriz está ordenada o 2: la matriz no está ordenada?

Cómo contar el número de enteros palindrómicos dentro de un rango [A, B] donde A y B pueden ser de hasta 10 ^ 17

¿Qué es mejor para la programación competitiva, la introducción del MIT a los algoritmos o los tutoriales de TopCoder?

¿Qué algoritmos se utilizan para el proceso de aprendizaje automático de Yandex?

¿Cuál es el mejor algoritmo para calcular la cantidad de números primos?

¿Cuál de estos me dará la mejor oportunidad para usar los algoritmos y las estructuras de datos que se enseñan en el desarrollo web de la escuela o el desarrollo móvil?

Si hipotéticamente encontré un algoritmo que genera rendimientos comerciales al 100% anualmente, ¿qué debo hacer con él?

¿El algoritmo codicioso siempre resuelve el problema de cobertura de subconjunto?

¿Cuál es la estructura de algoritmo / datos utilizada por Lucene para calcular el término frecuencia de los documentos?