A ordem dos dados de treinamento é importante quando se treina redes neurais?
O processo de treinamento de uma rede neural é encontrar o valor mínimo de uma função de perda [matemática]ℒX(W)[/math], onde [matemática]W[/math] representa uma matriz (ou várias matrizes) de pesos entre neurônios e [matemática]X[/math] representa o conjunto de dados de treinamento. Eu uso um subscrito para [matemática]X[/math] para indicar que nossa minimização de [matemática]ℒ[/math] ocorre apenas sobre os pesos [matemática]W[/math] (ou seja, estamos procurando por [matemática]W[/math] tal que [matemática]ℒ[/math] é minimizada) enquanto [matemática]X[/math] é fixa.
Agora, se assumirmos que temos elementos [matemática]P[/math] em [matemática]W[/math] (ou seja, existem pesos [matemática]P[/math] na rede), [matemática]ℒ[/math] é uma superfície num espaço [matemática]P+1[/math]-dimensional. Para dar um análogo visual, imagine que temos apenas dois pesos de neurônio ([matemática]P=2[/math]). Então a [matemática]ℒ[/math] tem uma interpretação geométrica fácil: é uma superfície em um espaço tridimensional. Isto decorre do fato de que para qualquer matriz de pesos [matemática]W[/math], a função perda pode ser avaliada em [matemática]X[/math] e esse valor torna-se a elevação da superfície.
Mas há o problema da não convexidade; a superfície que descrevi terá numerosos mínimos locais, e portanto os algoritmos de descida gradiente são suscetíveis a ficar "presos" nesses mínimos enquanto uma solução mais profunda/baixa/melhor pode estar próxima. Isto é provável de ocorrer se [matemática]X[/math] estiver inalterada em todas as iterações de treinamento, porque a superfície é fixa para um dado [matemática]X[/math]; todas as suas características são estáticas, incluindo seus vários mínimos.
Uma solução para isto é o treinamento em mini-batch combinado com o embaralhamento. Baralhando as linhas e treinando apenas um subconjunto delas durante uma determinada iteração, [matemática]X[/math] muda a cada iteração, e na verdade é bem possível que não haja duas iterações ao longo de toda a seqüência de iterações e épocas de treinamento, exatamente na mesma [matemática]X[/math]. O efeito é que o solucionador pode facilmente "saltar" de um mínimo local. Imagine que o solver está preso em um mínimo local na iteração [matemática]i[/math] com mini-batch de treinamento [matemática]Xi[/math]. Este mínimo local corresponde a [matemática]ℒ[/math] avaliado a um determinado valor de pesos; we'chamaremos [matemática]ℒXi(Wi)[/math]. Na próxima iteração a forma da nossa superfície de perda realmente muda porque estamos usando [matemática]Xi+1[/math], ou seja, [matemática]ℒXi+1(Wi)[/math] pode assumir um valor muito diferente de [matemática]ℒXi(Wi)[/math] e é bem possível que não corresponda a um mínimo local! Agora podemos calcular uma atualização de gradiente e continuar com o treinamento. Para ser claro: a forma de [matemática]ℒXi+1[/math] será -- em geral -- diferente da de [matemática]ℒXi[/math]. Note que aqui estou me referindo à função de perda [matemática]ℒ[/math] avaliada em um conjunto de treinamento [matemática]X[/math]; é uma superfície completa definida sobre todos os valores possíveis de [matemática]W[/math], ao invés da avaliação dessa perda (que é apenas uma escalar) para um valor específico de [matemática]W[/math]. Note também que se os mini-batches são usados sem embaralhar ainda há um grau de "diversificação" das superfícies de perda, mas haverá um número finito (e relativamente pequeno) de superfícies de erro únicas vistas pelo solucionador (especificamente, ele verá o mesmo conjunto exato de mini-batches -- e portanto superfícies de perda -- durante cada época).
Uma coisa que evitei deliberadamente foi uma discussão sobre tamanhos de mini-batches, porque há um milhão de opiniões sobre isso e tem implicações práticas significativas (maior paralelização pode ser obtida com lotes maiores). No entanto, acredito que vale a pena mencionar o seguinte. Porque a [matemática]ℒ[/math] é avaliada pelo cálculo de um valor para cada linha de [matemática]X[/math] (e somando ou tomando a média; ou seja, um operador comutativo) para um dado conjunto de matrizes de peso [matemática]W[/math], a disposição das linhas de [matemática]X[/math] não tem efeito quando se usa a descida de gradiente de lote completo (ou seja, quando cada lote é o completo [matemática]X[/math], e iterações e épocas são a mesma coisa).