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
- ¿Es razonable excluir valores atípicos en su conjunto de datos de entrenamiento para su clasificador?
- ¿Cuáles son algunos buenos libros para principiantes y avanzados sobre redes neuronales e inteligencia artificial?
- Support Vector Machines: ¿Cómo elijo un parámetro de escala de kernel?
- ¿Qué significan las hipótesis finita e infinita en el aprendizaje automático? Cuáles son las diferencias entre ellos?
- ¿Hay una buena lista de ejemplos de cómo los problemas genéricos se convierten a MapReduce?
[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.