¿Qué problemas o conjuntos de datos existen cuando usar el impulso da mejores resultados que usar un SGD simple?

Antes de hablar sobre conjuntos de datos (grandes), veamos funciones “simples” que exhiben la propiedad del barranco. Quizás el más popular es la función banana (función Rosenbrock – Wikipedia) de Rosenbrock (RBF) en dos dimensiones, [math] (x, y) [/ math]:

[matemáticas] f (x, y) = (ax) ^ 2 + b (yx ^ 2) ^ 2 [/ matemáticas]

Cuya imagen se muestra a continuación, con el barranco en forma de plátano claramente visible.

Hay generalizaciones del RBF para dimensiones superiores, como

[matemáticas] f (\ mathbf {x}) = f (x_1, x_2, \ dots, x_N) = \ sum_ {i = 1} ^ {N / 2} \ left [100 (x_ {2i-1} ^ 2 – x_ {2i}) ^ 2+ (x_ {2i-1} – 1) ^ 2 \ right] [/ math]

(Consulte la página de Wikipedia anterior para obtener más detalles y otras variantes del RBF).

Ahora hablemos de datos reales y problemas …

Un problema común de LD es la regresión. Queremos ajustar (o “aprender”) los [math] N + 1 [/ math] pesos en un vector [math] \ mathbf {\ theta} = [\ theta_0, \ theta_1, \ cdots, \ theta_N] [/ matemáticas] para minimizar la función de costo

[matemáticas] J (\ mathbf {\ theta}) = \ frac {1} {2} \ sum \ limits_ {i = 1} ^ {m} (h_ \ theta (\ mathbf {x} ^ {(i)} ) – y ^ {(i)}) ^ 2 [/ math]

donde la hipótesis [math] h_ \ theta (\ mathbf {x} ^ {(i)}) [/ math] puede ser lineal o no lineal; en caso de que sea lineal, se puede escribir como

[matemáticas] h_ \ theta (\ mathbf {x} ^ {(i)}) = \ theta_0 + \ mathbf {\ theta}. \ mathbf {x} [/ math]

(producto de punto más un término de sesgo).

Al comparar el RBF con [math] J (\ mathbf {\ theta}) [/ math] podemos concluir que ambos presentan términos cuadráticos. Si el RBF 2D simple puede tener un barranco (su forma específica depende de los valores de los parámetros [matemática] a [/ matemática] y [matemática] b [/ matemática]), ciertamente la [matemática] J (\ mathbf { multidimensional ] \ theta}) [/ math] tendrá barrancos N-dimensionales mucho más complejos.

En la optimización clásica, al navegar a través de funciones con barrancos, en lugar de usar el descenso de gradiente simple, se usaban métodos de segundo orden (o de segundo orden) a menudo basados ​​en la matriz de Hesse (las derivadas parciales de segundo orden de la función de optimización) o sus aproximaciones . Algunos de estos métodos son el gradiente conjugado, Gauss-Newton, Levenberg – Marquardt, Davidon – Fletcher – Powell, Broyden – Fletcher – Goldfarb – Shanno (BFGS) y algunos más.

En estas últimas técnicas, el Hessian se aproxima para acelerar la optimización. Pero estos eran algoritmos lentos incluso con solo unos pocos cientos de variables de optimización. No olvide que la matriz de Hesse tuvo que calcularse o aproximarse, y tiene elementos [matemáticos] N ^ 2 [/ matemáticos], mientras que el gradiente solo tiene elementos [matemáticos] N [/ matemáticos].

Cuando la complejidad de los datos aumenta a millones o más, esos algoritmos de segundo orden no son factibles, dada su lentitud. La información de segundo orden sobre la concavidad (barranco) es difícil de obtener.

Recuerde que en problemas de grandes dimensiones y gran cantidad de datos, incluso el descenso de gradiente simple con elementos [matemáticos] N [/ matemáticos] tiene que ser “degradado” para el descenso de gradiente estocástico de aproximación (SGD) que se estima mucho más rápidamente.

Varios métodos que son variaciones del SGD intentan superar la falta de información de segundo orden en el gradiente de la iteración actual mediante el uso de la memoria de desvanecimiento de los gradientes utilizados en los pasos de iteración recientes, en forma de impulso . Es decir, intentan obtener información de segundo orden, pero lo hacen utilizando algoritmos rápidos (dado el tamaño de los datos) …

Escribí una respuesta sobre ADAM, uno de los métodos modernos de impulso, en la respuesta de José Soares Augusto a ¿Puedes explicar la intuición básica detrás de ADAM: un método para la optimización estocástica? Puede leerlo para obtener más información sobre eso y sobre algunos de los métodos relacionados. (Disculpe la autopromoción de otra respuesta).

Mi primer instinto fue sugerir no prestar demasiada atención a estas justificaciones. Momentum es solo uno de los muchos hacks que ayudan a optimizar las NN profundas sin importar el conjunto de datos que use. Al igual que muchos otros aspectos de la optimización de la red neuronal, nadie sabe realmente por qué o cómo funciona, excepto por esta cruda intuición detrás de esto. De todos modos, para la mayoría de los problemas estamos trabajando en dimensiones tan extremadamente altas, que tales intuiciones están destinadas a romperse.

Pero luego noté un nuevo blog de Distill explícitamente en Momentum. Aquí hay un enlace a lo mismo. No lo he leído completamente, pero aún así lo tomaría con una pizca de sal.

Por qué Momentum realmente funciona

More Interesting

Cómo llamar a clasificadores y conjuntos de datos de WEKA a Netbeans IDE 7.1

¿Cómo calcula Google los sinónimos de los términos en una consulta de búsqueda?

En la clasificación binaria, ¿es una buena práctica siempre sobre / submuestrear su conjunto de datos para tener un número idéntico de muestras de las dos clases?

¿Cuál es el beneficio de utilizar la agrupación promedio en lugar de la agrupación máxima?

¿Cuáles son algunos avances interesantes sobre las matemáticas del aprendizaje profundo?

¿Dónde puedo comprar TPU para aprender el aprendizaje profundo?

¿Por qué los lars y glmnet dan diferentes soluciones? ¿Cuál es mejor?

¿Cómo funciona el muestreo negativo en los modelos de Word2vec?

¿Cómo se hace el cambio de C ++ a Python? Me siento más cómodo con C ++ y lo he estado usando para hacer la mayor parte de mi programación; Me parece que lleva mucho tiempo y Python hace las cosas rápidamente. ¿Cuál es la mejor manera de hacer el cambio?

Cómo hacer clustering para datos categóricos

¿Cómo funciona el algoritmo de recomendación de filtrado basado en contenido?

¿Por qué Quora eligió a HackerRank como plataforma para organizar sus competiciones de ML en lugar de algún sitio más familiar como Kaggle?

¿Cómo se elige una función de activación? He notado que las funciones más utilizadas se parecen, especialmente cerca de 0. ¿Tienen que ajustarse a algún comportamiento específico? ¿Es este un tema de investigación abierto? ¿Hace una gran diferencia en los resultados?

¿Cuál es la diferencia entre el curso de aprendizaje automático de Andrew Ng en Coursera y el curso AZ ML en Python y R en Udemy?

¿Cuál es la forma correcta de verificar si mi fórmula de gradiente es correcta o no?