¿Por qué necesitamos barajar entradas para el descenso de gradiente estocástico?

Buena pregunta. Lo he estado contemplando por un tiempo. Al igual que muchas otras preguntas en el campo del aprendizaje automático, esta no tiene una respuesta final concreta. Esto es lo que pienso actualmente.

TL; DR: Para obtener una estimación menos sesgada del gradiente verdadero.

¿Qué significa esta basura? Para ver la imagen completa, comencemos con su función de pérdida [matemática] \ matemática {L} (\ theta; x) [/ matemática] donde [matemática] \ theta [/ matemática] son ​​sus parámetros y [matemática] x [/ matemáticas] es un punto de datos. En muchas tareas de aprendizaje automático, intenta minimizar la pérdida en el conjunto de datos de entrenamiento, es decir

[matemáticas] J (\ theta) = \ sum_ {x \ in \ text {conjunto de entrenamiento}} \ mathcal {L} (\ theta; x) [/ math].

Como estamos discutiendo las permutaciones de los datos de entrenamiento, supongamos que su conjunto de entrenamiento es [math] \ {x_1, x_2, …, x_N \} [/ math]. Si no permutas los datos de entrenamiento alimentados al descenso de gradiente estocástico, entonces tu gradiente en cualquier paso particular es el gradiente de una función fija. Son

[matemáticas] g_1 = \ nabla_ \ theta \ left [\ frac {1} {M} \ sum_ {i = 1} ^ {M} \ mathcal {L} (\ theta; x_i) \ right] [/ math]

[matemáticas] g_2 = \ nabla_ \ theta \ left [\ frac {1} {M} \ sum_ {i = M + 1} ^ {2M} \ mathcal {L} (\ theta; x_i) \ right] [/ math ]

[matemáticas] g_3 = \ nabla_ \ theta \ left [\ frac {1} {M} \ sum_ {i = 2M + 1} ^ {3M} \ mathcal {L} (\ theta; x_i) \ right] [/ math ]

Cada uno de estos [math] g_j [/ math] es una estimación sesgada de [math] \ nabla_ \ theta J [/ math] [math] (\ theta) [/ math]. ¿Porque? Tomemos, por ejemplo, [math] \ mathbb {E} [g_2] [/ math], tenemos

[math] \ mathbb {E} _ {x_i} [g_2] = \ mathbb {E} _ {x_i} \ left [\ nabla_ \ theta \ left [\ frac {1} {M} \ sum_ {i = M + 1} ^ {2M} \ mathcal {L} (\ theta; x_i) \ right] \ right] = \ nabla_ \ theta \ left [\ frac {1} {M} \ sum_ {i = M + 1} ^ { 2M} \ mathcal {L} (\ theta; x_i) \ right] [/ math]

Sí. [matemáticas] g_2 [/ matemáticas] es una constante. No hay nada al azar al respecto. Si conoce su conjunto de datos de entrenamiento y no permuta los datos de entrenamiento, entonces [math] g_2 [/ math], así como [math] g_1 [/ math], [math] g_3 [/ math], [ matemáticas] g_4 [/ matemáticas], etc. son todos conocidos. Son fijos. Sus valores son sus propias expectativas. No más incertidumbre. Y lo peor: estos valores no son los valores verdaderos del gradiente que desea calcular. Este fenómeno se denomina estimación sesgada y , por lo general, no se prefiere (hay casos en los que el sesgo es aceptable, por ejemplo, compensaciones de variación de sesgo, pero esa es otra historia).

Ahora veamos qué sucede si permutas los datos de entrenamiento [math] x_i [/ ​​math]. Primero, tenga en cuenta que ninguno de los gradientes [matemática] g_i [/ ​​matemática] se determina más. Todos tienen el valor esperado.

[math] \ mathbb {E} _ {i \ sim \ text {Uniform} \ {1, 2, …, N \}} [g] [/ math]

[math] = \ mathbb {E} _ {i \ sim \ text {Uniform} \ {1, 2,…, N \}} \ left [\ nabla_ \ theta \ left [\ frac {1} {M} \ sum_ {i = 1} ^ {M} \ mathcal {L} (\ theta; x_i) \ right] \ right] [/ math]

[matemáticas] = \ nabla_ \ theta \ frac {1} {M} \ sum_ {i = 1} ^ {M} \ mathbb {E} _ {i \ sim \ text {Uniform} \ {1, 2,…, N \}} [\ mathcal {L} (\ theta; x_i)] [/ math]

[matemáticas] = \ nabla_ \ theta \ frac {1} {M} \ cdot M \ cdot \ frac {1} {N} \ sum_ {i = 1} ^ {N} \ mathcal {L} (\ theta; x_i )[/matemáticas]

[matemáticas] = \ nabla_ \ theta \ frac {1} {N} \ sum_ {i = 1} ^ {N} \ mathcal {L} (\ theta; x_i) [/ math]

Ah, ja, este es el gradiente medio calculado en todos sus datos de entrenamiento. Si [math] M [/ math] es grande, las leyes de gran número dicen que se acerca a su media teórica, es decir, el verdadero gradiente que desea estimar. Más importante aún, en cualquier caso, el gradiente empírico que utiliza para actualizar sus parámetros tiene un valor esperado igual al gradiente verdadero.

Esta simple historia de estimación imparcial de gradientes es crucial para las pruebas de convergencia del descenso de gradiente estocástico, por ejemplo. los que se basan en supermartingales. Eso es para otra historia. Para esta pregunta, el mensaje final es que la permutación de los datos de entrenamiento proporciona una estimación imparcial del gradiente verdadero, lo que conduce a mejores actualizaciones, que mejoran el proceso de entrenamiento.

Una razón para hacer esto es que los datos reales a menudo tienen alguna estructura. Por ejemplo, en un problema de predicción de clics, los datos pueden almacenarse en orden cronológico. Para obtener una estimación imparcial del gradiente verdadero, le gustaría que su mini lote sea una verdadera muestra aleatoria en lugar de ejemplos que estén altamente correlacionados (que puede ser cómo se le presentan los datos)