No treinamento em mini-lote de uma rede neural, ouvi dizer que uma prática importante é embaralhar os dados do treinamento antes de cada época. Alguém pode explicar por que a mudança em cada época ajuda?
Na pesquisa do google, encontrei as seguintes respostas:
- ajuda o treinamento a convergir rapidamente
- evita qualquer viés durante o treinamento
- impede que o modelo aprenda a ordem do treinamento
Mas tenho dificuldade em entender por que qualquer um desses efeitos é causado pelo embaralhamento aleatório. Alguém pode fornecer uma explicação intuitiva?
Obrigado,
fonte
De um ponto de vista muito simplista, os dados são alimentados sequencialmente, o que sugere que, no mínimo, é possível que a ordem dos dados tenha um efeito na saída. Se a ordem não importa, a randomização certamente não será prejudicial. Se a ordem importa, a randomização ajudará a suavizar esses efeitos aleatórios, para que eles não se tornem viés sistemático. Em suma, a randomização é barata e nunca prejudica, e muitas vezes minimiza os efeitos de pedido de dados.
fonte
Nota: ao longo desta resposta, refiro-me à minimização da perda de treinamento e não discuto critérios de parada, como perda de validação. A escolha dos critérios de parada não afeta o processo / conceitos descritos abaixo.
O processo de treinamento de uma rede neural é encontrar o valor mínimo de uma função de perda , onde W representa uma matriz (ou várias matrizes) de pesos entre os neurônios e X representa o conjunto de dados de treinamento. Eu uso um índice para X para indicar que nossa minimização de ℒ ocorre apenas sobre os pesos W (ou seja, estamos procurando por W de modo que ℒ seja minimizado) enquanto XLX(W) W X X L W W L X é corrigido.
Agora, se assumirmos que temos elementos em W (ou seja, existem pesos P na rede), ℒ é uma superfície em um espaço dimensional P + 1 . Para dar um analógico visual, imagine que temos apenas dois pesos de neurônios ( P = 2 ). Então ℒ tem uma interpretação geométrica fácil: é uma superfície em um espaço tridimensional. Isso decorre do fato de que, para qualquer matriz de pesos W , a função de perda pode ser avaliada em X e esse valor se torna a elevação da superfície.P W P L P+1 P=2 L W X
Mas há o problema da não-convexidade; a superfície que descrevi terá numerosos mínimos locais e, portanto, algoritmos de descida de gradiente são suscetíveis de ficar "presos" nesses mínimos, enquanto uma solução mais profunda / baixa / melhor pode estar próxima. É provável que isso ocorra se for inalterado em todas as iterações de treinamento, porque a superfície é fixa para um determinado X ; todas as suas características são estáticas, incluindo seus vários mínimos.X X
Uma solução para isso é o treinamento em mini-lote combinado com o embaralhamento. Ao embaralhar as linhas e treinar apenas um subconjunto delas durante uma determinada iteração, muda a cada iteração, e é realmente possível que duas iterações ao longo de toda a sequência de iterações e épocas de treinamento sejam executadas exatamente no mesmo X . O efeito é que o solucionador pode "saltar" facilmente de um mínimo local. Imagine que o solucionador esteja preso no mínimo local na iteração i com o treinamento do minilote X i . Este mínimo local corresponde a ℒ avaliado em um valor particular de pesos; vamos chamá-lo ℒ X i ( iX X i Xi L . Na próxima iteração a forma do nosso superfície perda efectivamente muda porque estamos a utilizar X i + 1 , isto é, ℒ X i + 1 ( W i ) pode assumir um valor muito diferente do ℒ X i ( W i ) e isso é bem possível que não corresponda a um mínimo local! Agora podemos calcular uma atualização gradiente e continuar com o treinamento. Para ser claro: a forma de ℒ X i + 1 será - em geral - diferente da forma de ℒ X iLXi(Wi) Xi+1 LXi+1(Wi) LXi(Wi) LXi+1 LXi . Observe que aqui estou me referindo à função de perda avaliada em um conjunto de treinamento X ; é uma superfície definida completo sobre todos os valores possíveis de W , em vez do que a avaliação de que a perda (que é apenas um escalar) para um valor específico de W . Observe também que, se mini-lotes forem usados sem embaralhar, ainda haverá um grau de "diversificação" das superfícies de perda, mas haverá um número finito (e relativamente pequeno) de superfícies de erro exclusivas vistas pelo solucionador (especificamente, ele verá o mesmo conjunto exato de mini-lotes - e, portanto, superfícies de perda - durante cada época).L X W W
Uma coisa que evitei deliberadamente foi uma discussão sobre tamanhos de mini lotes, porque há um milhão de opiniões a respeito e isso tem implicações práticas significativas (maior paralelismo pode ser alcançado com lotes maiores). No entanto, acredito que vale a pena mencionar o seguinte. Como é avaliado calculando um valor para cada linha de X (e somando ou calculando a média; isto é, um operador comutativo) para um determinado conjunto de matrizes de peso W , o arranjo das linhas de X não tem efeito quando se usa descida do gradiente do lote (ou seja, quando cada lote é o X completo e iterações e épocas são a mesma coisa).L X W X X
fonte
Imagine que seus últimos rótulos de minibatch realmente tenham mais ruído. Em seguida, esses lotes puxarão os pesos finais aprendidos na direção errada. Se você embaralhar toda vez, as chances de os últimos lotes serem desproporcionalmente barulhentos diminuirão.
fonte
Quando você treina sua rede usando um conjunto de dados fixo, ou seja, dados que você nunca embaralha durante o treinamento. É muito provável que você obtenha pesos muito altos e muito baixos, como 40,70, -101.200 ... etc. Isso significa simplesmente que sua rede não aprendeu os dados de treinamento, mas aprendeu o ruído dos dados de treinamento. Caso clássico de um modelo de excesso de ajuste. Com essa rede, você obterá previsões sobre os dados que você usou para o treinamento. Se você usar outras entradas para testá-lo, seu modelo desmoronará. Agora, quando você embaralha os dados de treinamento após cada época (iteração do conjunto geral), você simplesmente alimenta diferentes entradas de neurônios em cada época e isso simplesmente regula os pesos, o que significa que é mais provável que você obtenha pesos "mais baixos" que estão mais próximos de zero , e isso significa que sua rede pode fazer melhores generalizações.
Espero que esteja claro.
fonte
Aqui está uma explicação mais intuitiva:
Ao usar a descida do gradiente, queremos que a perda seja reduzida na direção do gradiente. O gradiente é calculado pelos dados de um único mini lote para cada rodada de atualização de peso. O que queremos que aconteça é que esse gradiente baseado em mini-lote seja aproximadamente o gradiente populacional, porque é esperado que produza uma convergência mais rápida. (Imagine se você alimentar os dados da rede 100 class1 em um mini lote e 100 dados class2 em outro, a rede passará o mouse. Uma maneira melhor é alimentá-lo com 50 class1 + 50 class2 em cada min lote.)
Como conseguir isso, pois não podemos usar os dados da população em um mini-lote? A arte da estatística nos diz: embaralhe a população e os primeiros dados de batch_size podem representar a população. É por isso que precisamos embaralhar a população.
Devo dizer que o embaralhamento não é necessário se você tiver outro método para coletar dados da população e garantir que as amostras possam produzir um gradiente razoável.
Essa é a minha compreensão. Espero que ajude.
fonte