¿Cuál es la diferencia entre la pendiente de gradiente y la pendiente de gradiente estocástica?
No estoy muy familiarizado con estos, ¿puede describir la diferencia con un breve ejemplo?
fuente
¿Cuál es la diferencia entre la pendiente de gradiente y la pendiente de gradiente estocástica?
No estoy muy familiarizado con estos, ¿puede describir la diferencia con un breve ejemplo?
Para una explicación simple y rápida:
Tanto en el descenso de gradiente (GD) como en el descenso de gradiente estocástico (SGD), actualiza un conjunto de parámetros de forma iterativa para minimizar una función de error.
Mientras que en GD, debe ejecutar TODAS las muestras en su conjunto de entrenamiento para hacer una actualización única para un parámetro en una iteración particular, en SGD, por otro lado, usa SOLO UNA o SUBSET de muestra de entrenamiento de su conjunto de entrenamiento hacer la actualización de un parámetro en una iteración particular. Si usa SUBSET, se llama Descenso de gradiente estocástico de Minibatch.
Por lo tanto, si el número de muestras de entrenamiento es grande, de hecho muy grande, entonces usar el descenso de gradiente puede tomar demasiado tiempo porque en cada iteración cuando actualiza los valores de los parámetros, está ejecutando todo el conjunto de entrenamiento. Por otro lado, usar SGD será más rápido porque usa solo una muestra de entrenamiento y comienza a mejorar de inmediato desde la primera muestra.
SGD a menudo converge mucho más rápido en comparación con GD, pero la función de error no se minimiza tan bien como en el caso de GD. A menudo, en la mayoría de los casos, la aproximación cercana que obtiene en SGD para los valores de los parámetros es suficiente porque alcanzan los valores óptimos y siguen oscilando allí.
Si necesita un ejemplo de esto con un caso práctico, consulte las notas de Andrew NG aquí, donde le muestra claramente los pasos involucrados en ambos casos. cs229-notes
Fuente: Hilo Quora
La inclusión de la palabra estocástico simplemente significa que las muestras aleatorias de los datos de entrenamiento se eligen en cada ejecución para actualizar el parámetro durante la optimización, en el marco del descenso de gradiente .
Al hacerlo, no solo se calculan los errores y se actualizan los pesos en iteraciones más rápidas (porque solo procesamos una pequeña selección de muestras de una sola vez), a menudo también ayuda a avanzar hacia un óptimo más rápido. Echa un vistazo a las respuestas aquí. , para obtener más información sobre por qué el uso de minibatches estocásticos para el entrenamiento ofrece ventajas.
Quizás una desventaja es que el camino hacia lo óptimo (suponiendo que siempre sea el mismo óptimo) puede ser mucho más ruidoso. Entonces, en lugar de una agradable curva de pérdida suave, que muestra cómo disminuye el error en cada iteración de descenso de gradiente, puede ver algo como esto:
Claramente vemos que la pérdida disminuye con el tiempo, sin embargo, hay grandes variaciones de una época a otra (lote de entrenamiento a lote de entrenamiento), por lo que la curva es ruidosa.
Esto es simplemente porque calculamos el error medio sobre nuestro subconjunto seleccionado estocásticamente / aleatoriamente, a partir del conjunto de datos completo, en cada iteración. Algunas muestras producirán un error alto, algunas bajas. Por lo tanto, el promedio puede variar, dependiendo de las muestras que usamos al azar para una iteración de descenso de gradiente.
fuente
n=1
En Descenso de gradiente o Descenso de gradiente por lotes, usamos todos los datos de entrenamiento por época, mientras que en Descenso de gradiente estocástico, usamos solo un ejemplo de entrenamiento por época y el Descenso de gradiente de mini lotes se encuentra entre estos dos extremos, en los que podemos usar un mini-lote (pequeña porción) de datos de entrenamiento por época, la regla general para seleccionar el tamaño del mini-lote tiene una potencia de 2 como 32, 64, 128, etc.
Para más detalles: notas de conferencia cs231n
fuente