Nas tarefas de aprendizado de máquina, é comum embaralhar e normalizar dados. O objetivo da normalização é claro (por ter o mesmo intervalo de valores de recursos). Mas, depois de muito esforço, não encontrei nenhuma razão valiosa para embaralhar dados.
Eu li este post aqui discutindo quando precisamos embaralhar dados, mas não é óbvio por que devemos embaralhar os dados. Além disso, tenho visto frequentemente em algoritmos como Adam ou SGD, nos quais precisamos de descida em gradiente de lote (os dados devem ser separados em mini lotes e o tamanho do lote precisa ser especificado). É essencial, de acordo com esta publicação, embaralhar os dados de cada época para ter dados diferentes para cada lote. Portanto, talvez os dados sejam embaralhados e, mais importante, alterados.
porque nós fazemos isso?
fonte
Respostas:
Baseado em O que devemos fazer quando uma pergunta postada no DataScience é uma duplicata de uma pergunta postada no CrossValidated? , Estou reposicionando minha resposta para a mesma pergunta feita no CrossValidated ( https://stats.stackexchange.com/a/311318/89653 ).
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 subscrito 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 X é corrigido.LX(W) W X X L W W L X
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 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 em 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 ( WX 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 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 ao usar full- 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
A reprodução aleatória de dados serve para reduzir as variações e garantir que os modelos permaneçam gerais e se ajustem menos.
O caso óbvio em que você embaralha seus dados é se eles forem classificados por classe / destino. Aqui, você deseja embaralhar para garantir que seus conjuntos de treinamento / teste / validação sejam representativos da distribuição geral dos dados.
Para descida de gradiente em lote, a mesma lógica se aplica. A idéia por trás da descida do gradiente de lote é que, calculando o gradiente em um único lote, você normalmente obterá uma estimativa bastante boa do gradiente "verdadeiro". Dessa forma, você economiza tempo de computação ao não precisar calcular o gradiente "true" em todo o conjunto de dados todas as vezes.
Você deseja embaralhar seus dados após cada época, porque sempre terá o risco de criar lotes que não são representativos do conjunto de dados geral e, portanto, sua estimativa do gradiente será desativada. A reprodução aleatória dos dados após cada época garante que você não fique "preso" com muitos lotes ruins.
Na descida estocástica regular do gradiente, quando cada lote tem o tamanho 1, você ainda deseja embaralhar seus dados após cada época para manter seu aprendizado geral. De fato, se o ponto de dados 17 for sempre usado após o ponto de dados 16, seu próprio gradiente será influenciado por quaisquer atualizações que o ponto de dados 16 esteja fazendo no modelo. Ao embaralhar seus dados, você garante que cada ponto de dados crie uma alteração "independente" no modelo, sem ser influenciado pelos mesmos pontos antes deles.
fonte
Suponha que os dados sejam classificados em uma ordem especificada. Por exemplo, um conjunto de dados que é classificado com base em sua classe. Portanto, se você selecionar dados para treinamento, validação e teste sem considerar esse assunto, você selecionará cada classe para tarefas diferentes e isso falhará no processo.
Portanto, para impedir esse tipo de problema, uma solução simples é embaralhar os dados para obter diferentes conjuntos de dados de treinamento, validação e teste.
Sobre o minilote, as respostas a esta postagem podem ser uma solução para sua pergunta.
fonte
Precisamos embaralhar apenas para minibatch / SGD, sem necessidade de descida em gradiente de lote.
Se não estiver misturando dados, os dados podem ser classificados ou pontos de dados semelhantes ficarão próximos um do outro, o que leva a uma convergência lenta:
Eu desenhei o gráfico da função de perda L-2 para regressão linear por
y=2x
aquifonte
Complementando a resposta de @ Josh, eu gostaria de acrescentar que, pelo mesmo motivo, é necessário fazer o embaralhamento antes do lote. Caso contrário, você está obtendo o mesmo número finito de superfícies.
fonte
Para uma melhor precisão do modelo, é sempre recomendável que os dados de treinamento tenham todos os tipos de dados.
O embaralhamento dos dados de treinamento nos ajuda a atingir esse objetivo.
fonte
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 em toda a sequência de iterações e épocas de treinamento sejam executadas exatamente da mesma maneira 𝑋
fonte