55 votos

¿Cuál debe ser el tamaño del lote para el descenso por gradiente estocástico?

1 votos

79voto

sabalaba Puntos 450

El "tamaño de la muestra" del que hablas se denomina tamaño del lote , $B$ . El parámetro de tamaño de lote es sólo uno de los hiperparámetros que se ajustan cuando se entrena una red neuronal con minilote de Descenso Gradiente Estocástico (SGD) y depende de los datos. El método más básico de búsqueda de hiperparámetros consiste en realizar una búsqueda de cuadrícula sobre la tasa de aprendizaje y el tamaño de lote para encontrar un par que haga converger la red.

Para entender cuál debe ser el tamaño del lote, es importante ver la relación entre el descenso de gradiente por lotes, el SGD en línea y el SGD por minilotes. Esta es la fórmula general para el paso de actualización de pesos en el SGD por lotes pequeños, que es una generalización de los tres tipos. [ 2 ]

$$ \theta_{t+1} \leftarrow \theta_{t} - \epsilon(t) \frac{1}{B} \sum\limits_{b=0}^{B - 1} \dfrac{\partial \mathcal{L}(\theta, \textbf{m}_b)}{\partial \theta} $$

  1. Descenso de gradiente por lotes, $B = |x|$
  2. Descenso de gradiente estocástico en línea: $B = 1$
  3. Descenso de gradiente estocástico en mini lotes: $B > 1$ pero $B < |x|$ .

Nótese que con 1, la función de pérdida ya no es una variable aleatoria y no es una aproximación estocástica.

El SGD converge más rápido que el descenso de gradiente "por lotes" normal porque actualiza los pesos después de analizar un subconjunto seleccionado aleatoriamente del conjunto de entrenamiento. Sea $x$ sea nuestro conjunto de entrenamiento y $m \subset x$ . El tamaño del lote $B$ no es más que la cardinalidad de $m$ : $B = |m|$ .

El descenso de gradiente por lotes actualiza los pesos $\theta$ utilizando los gradientes de todo el conjunto de datos $x$ mientras que SGD actualiza los pesos utilizando una media de los gradientes de un mini lote. $m$ . (El uso de la media en lugar de la suma evita que el algoritmo dé pasos demasiado largos si el conjunto de datos es muy grande. De lo contrario, tendría que ajustar su ritmo de aprendizaje en función del tamaño del conjunto de datos). El valor esperado de esta aproximación estocástica del gradiente utilizado en SGD es igual al gradiente determinista utilizado en el descenso de gradiente por lotes. $\mathbb{E}[\nabla \mathcal{L}_{SGD}(\theta, \textbf{m})] = \nabla \mathcal{L}(\theta, \textbf{x})$ .

Cada vez que tomamos una muestra y actualizamos nuestras ponderaciones se denomina minilotes . Cada vez que recorremos todo el conjunto de datos, se llama un época .

Supongamos que tenemos un vector de datos $\textbf{x} : \mathbb{R}^D$ un vector de pesos inicial que parametriza nuestra red neuronal, $\theta_0 : \mathbb{R}^{S}$ y una función de pérdida $\mathcal{L}(\theta, \textbf{x}) : \mathbb{R}^{S} \rightarrow \mathbb{R}^{D} \rightarrow \mathbb{R}^S$ que intentamos minimizar. Si tenemos $T$ ejemplos de entrenamiento y un tamaño de lote de $B$ entonces podemos dividir esos ejemplos de entrenamiento en C mini-lotes:

$$ C = \lceil T / B \rceil $$

Para simplificar, podemos suponer que T es divisible uniformemente por B. Aunque, cuando no sea así, como a menudo no lo es, debe asignarse un peso adecuado a cada minilote en función de su tamaño.

Un algoritmo iterativo para SGD con $M$ a continuación:

\begin{align*} t &\leftarrow 0 \\ \textrm{while } t &< M \\ \theta_{t+1} &\leftarrow \theta_{t} - \epsilon(t) \frac{1}{B} \sum\limits_{b=0}^{B - 1} \dfrac{\partial \mathcal{L}(\theta, \textbf{m}_b)}{\partial \theta} \\ t &\leftarrow t + 1 \end{align*}

Nota: en la vida real estamos leyendo estos datos de ejemplo de entrenamiento de la memoria y, debido a la precarga de caché y otros trucos de memoria realizados por su ordenador, su algoritmo se ejecutará más rápido si los accesos a la memoria son coalescido es decir, cuando se lee la memoria en orden y no se salta al azar. Así, la mayoría de las implementaciones de SGD barajan el conjunto de datos y luego cargan los ejemplos en la memoria en el orden en que serán leídos.

Los principales parámetros de la SGD vainilla (sin impulso) descrita anteriormente son:

  1. Ritmo de aprendizaje: $\epsilon$

Me gusta pensar en épsilon como una función del recuento de épocas a una tasa de aprendizaje. Esta función se denomina el calendario del ritmo de aprendizaje .

$$ \epsilon(t) : \mathbb{N} \rightarrow \mathbb{R} $$

Si desea que la tasa de aprendizaje sea fija, basta con definir épsilon como una función constante.

  1. Tamaño del lote

El tamaño del lote determina cuántos ejemplos se miran antes de hacer una actualización del peso. Cuanto menor sea, más ruidosa será la señal de entrenamiento; cuanto mayor sea, más tiempo se tardará en calcular el gradiente de cada paso.

Citas y lecturas complementarias:

  1. Introducción al aprendizaje basado en gradientes
  2. Recomendaciones prácticas para el entrenamiento de arquitecturas profundas basado en gradientes
  3. Entrenamiento minilote eficiente para la optimización estocástica

1 votos

For simplicity we can assume that D is evenly divisible by B . ¿No querrás decir que T debe ser divisible por B?

6 votos

Y para responder realmente a la pregunta del OP, puede añadir B is typically chosen between 1 and a few hundreds, e.g. B = 32 is a good default value, with values above 10 taking advantage of the speed-up of matrix-matrix products over matrix-vector products. (del documento de Bengio de 2012)

0 votos

@sabalaba Buena respuesta. Pero no es que en la ecuación "Un algoritmo iterativo para SGD con M épocas se da a continuación" vamos a actualizar el peso después de ejecutar más de cada mini-lote. En otras palabras, ¿no debería haber otro bucle (sobre el C mini lotes) dentro del bucle sobre la época es decir, mientras t < M

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X