¿Cuál es la diferencia entre Gradient Descent y Stochastic Gradient Descent?
No estoy muy familiarizado con estos, ¿puede describir la diferencia con un breve ejemplo?
Respuesta
Para una explicación rápida y sencilla:
Tanto en el descenso de gradiente (GD) como en el descenso de gradiente estocástico (SGD), actualiza un conjunto de parámetros de manera iterativa para minimizar una función de error.
Mientras está en GD, debe ejecutar TODAS las muestras en su conjunto de entrenamiento para hacer una sola actualización para un parámetro en una iteración particular, en SGD, por otro lado, usa SOLO UNO o SUBSETE de la muestra de entrenamiento de su entrenamiento configurado para realizar 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 llevar demasiado tiempo porque en cada iteración está actualizando los valores de los parámetros, está ejecutando el conjunto de entrenamiento completo. 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 es tan minimizado 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: Tema de Quora
Comentarios
- gracias, ¿Brevemente así? Hay tres variantes del Descenso de gradiente: lote, estocástico y minibatch: el lote actualiza los pesos después de que se hayan evaluado todas las muestras de entrenamiento. Estocástico, los pesos se actualizan después de cada muestra de entrenamiento. El minibatch combina lo mejor de ambos mundos. No usamos el conjunto de datos completo no usamos el punto de datos único. Usamos un conjunto de datos seleccionados al azar de nuestro conjunto de datos. De esta manera, reducimos el costo de cálculo y logramos una varianza menor que la versión estocástica.
- Tenga en cuenta que el enlace anterior a cs229-notes no está disponible. Sin embargo, Wayback Machine, alineado con la fecha de publicación, entrega, ¡yay! web.archive.org/web/20180618211933/http://cs229.stanford.edu/…
Respuesta
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, dentro del marco de descenso de gradiente .
Hacer esto no solo calcula los errores y actualiza los pesos en iteraciones más rápidas (porque solo procesamos una pequeña selección de muestras de una vez), también a menudo ayuda a avanzar hacia una óptimo más rápidamente. Haga que mire las respuestas aquí , para obtener más información sobre por qué el uso de minibatches estocásticos para entrenar ofrece ventajas.
Una desventaja quizás es que el camino hacia el óptimo (asumiendo que siempre sería el mismo óptimo) puede ser mucho más ruidoso. Entonces, en lugar de una curva de pérdida suave y agradable, que muestra cómo disminuye el error en cada iteración del descenso del gradiente, es posible que vea algo como esto:
Vemos claramente 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 se debe simplemente a que calculamos el error medio sobre nuestro subconjunto seleccionado estocásticamente / aleatoriamente, de todo el conjunto de datos, en cada iteración. Algunas muestras producirán un error alto, otras bajo. Entonces, el promedio puede variar, dependiendo de las muestras que usamos aleatoriamente para una iteración de descenso de gradiente.
Comentarios
- gracias, ¿Brevemente así? Hay tres variantes de Gradient Descent: Batch, Stochastic y Minibatch: Batch actualiza los pesos después de que se hayan evaluado todas las muestras de entrenamiento. Estocástico, los pesos se actualizan después de cada muestra de entrenamiento. El Minibatch combina lo mejor de ambos mundos. No usamos el conjunto de datos completo, pero no usamos el punto de datos único. Usamos un conjunto de datos seleccionados al azar de nuestro conjunto de datos. De esta forma, reducimos el coste de cálculo y conseguimos una varianza menor que la versión estocástica.
- Yo ‘ digo que hay un lote, donde un lote es el conjunto de entrenamiento completo (básicamente una época), luego hay un mini-lote, donde un se utiliza un subconjunto (por lo que cualquier número menor que el conjunto completo $ N $) – este subconjunto se elige al azar, por lo que es estocástico. El uso de una sola muestra se denominaría aprendizaje en línea y es un subconjunto de mini-lote … o simplemente mini-lote con
n=1
. - ¡tks, esto está claro!
Responder
En Gradient Descent o Batch Gradient Descent , usamos todos los datos de entrenamiento por época, mientras que, en el descenso de gradiente estocástico, usamos solo un ejemplo de entrenamiento por época y el descenso de gradiente de mini-lote 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 del pulgar para seleccionar el tamaño del mini-lote está en potencia de 2 como 32, 64, 128, etc.
Para más detalles: cs231n notas de la conferencia
Comentarios
- gracias, ¿Brevemente así? Hay tres variantes de Gradient Descent: Batch, Stochastic y Minibatch: Batch actualiza los pesos después de que se hayan evaluado todas las muestras de entrenamiento. Estocástico, los pesos se actualizan después de cada muestra de entrenamiento. El Minibatch combina lo mejor de ambos mundos. No usamos el conjunto de datos completo, pero no usamos el punto de datos único. Usamos un conjunto de datos seleccionados al azar de nuestro conjunto de datos. De esta manera, reducimos el costo de cálculo y logramos una varianza menor que la versión estocástica.
Respuesta
Gradient Descent es un algoritmo para minimizar el $ J (\ Theta) $ !
Idea: Para el valor actual de theta, calcule $ J (\ Theta) $ , luego da un pequeño paso en la dirección del gradiente negativo. Repita.
Algoritmo:
while True: theta_grad = evaluate_gradient(J,corpus,theta) theta = theta - alpha * theta_grad
Pero el problema es que $ J (\ Theta) $ es la función de todo el corpus en Windows, por lo que es muy costoso de calcular.
Descenso de gradiente estocástico muestrea repetidamente la ventana y actualiza después de cada una
Algoritmo de descenso de gradiente estocástico:
while True: window = sample_window(corpus) theta_grad = evaluate_gradient(J,window,theta) theta = theta - alpha * theta_grad
Por lo general, el tamaño de la ventana de muestra es la potencia de 2, digamos 32, 64 como mini lote.
Respuesta
Ambos algoritmos son bastante similares. La única diferencia viene al iterar. En Gradient Descent, consideramos todos los puntos al calcular la pérdida y la derivada, mientras que en el descenso de gradiente estocástico, usamos la función de punto único en la pérdida y su derivada al azar. Consulte estos dos artículos, ambos están interrelacionados y bien explicados. Espero que te ayude.