Definimos uma época como tendo passado por todas as amostras de treinamento disponíveis, e o tamanho do minilote como o número de amostras sobre as quais calculamos a média para encontrar as atualizações de pesos / desvios necessários para descer o gradiente.
Minha pergunta é se devemos extrair sem substituição do conjunto de exemplos de treinamento para gerar cada mini lote dentro de uma época. Sinto que devemos evitar a substituição para garantir que realmente "colamos todas as amostras" para atender ao requisito de fim de época, mas estou tendo problemas para encontrar uma resposta definitiva de uma maneira ou de outra.
Eu tentei pesquisar no Google e ler o cap. Uma das redes neurais e aprendizagem profunda da Nielsen, mas não encontrou uma resposta clara. Nesse texto, Nielsen não especifica que a amostragem aleatória seja feita sem substituição, mas parece implicar que sim.
Uma formalização mais clara do treinamento em épocas pode ser encontrada aqui, se desejado - /stats//a/141265/131630
Edit: esta pergunta parecia semelhante a mim, mas não estava claro como aplicar o fato de que a linearidade da expectativa é indiferente à independência nessa situação - a amostragem deve ocorrer com ou sem substituição
Respostas:
Uma boa análise teórica de esquemas com e sem substituição no contexto de algoritmos iterativos baseados em sorteios aleatórios (que são contra as quais redes neurais profundas discriminativas (DNNs) são treinadas) pode ser encontrada aqui
Em resumo, a amostragem sem substituição leva a uma convergência mais rápida do que a amostragem com substituição.
Vou fazer uma breve análise aqui, com base no exemplo de brinquedo que eles fornecem: Digamos que queremos otimizar a seguinte função objetivo:
onde o destino . Neste exemplo, estamos tentando resolver o ideal , considerando rótulos de obviamente.x N y iyEu∼ N( μ , σ2) x N yEu
Ok, então, se resolvermos o ideal acima, diretamente, pegaremos a derivada da função loss aqui, configurá-la para 0 e resolver . Portanto, para o nosso exemplo acima, a perda éxx x
e sua primeira derivada seria:
Definir como 0 e resolver , produz: xδeuδx x
Em outras palavras, a solução ideal nada mais é do que a média da amostra de todas as amostras de .yN y
Agora, se não pudéssemos executar o cálculo acima de uma só vez, teríamos que fazê-lo recursivamente, através da equação de atualização de descida do gradiente abaixo:
e simplesmente inserir nossos termos aqui produz:
Se executarmos o acima para todos os , estamos efetivamente executando esta atualização sem substituição. A questão então se torna: podemos obter também o valor ideal de dessa maneira? (Lembre-se de que o valor ideal de nada mais é do que a média da amostra de ). A resposta é sim, se você deixar . Para ver, expandimos: x x y λ i = 1 / ii ∈ 1 , 2 , . . . N x x y λEu= 1 / i
A última equação, no entanto, nada mais é do que a fórmula para a média corrente! Assim, ao percorrermos o conjunto de , , etc, até , teríamos realizado nossas atualizações sem substituição, e nossa fórmula de atualização nos fornece a solução ideal de , que é a média da amostra!i = 1 i = 2 i = N x
Por outro lado, no entanto, se realmente empatássemos com a substituição, embora nossos empates fossem verdadeiramente independentes, o valor otimizado seria diferente da média (ótima) , e o erro quadrado seria dado por:xN μ
que será um valor positivo, e este exemplo simples de brinquedo pode ser estendido para dimensões mais altas. Isso tem a conseqüência de que gostaríamos de realizar amostragens sem substituição como uma solução mais ideal.
Espero que isso esclareça um pouco mais!
fonte
De acordo com o código no repositório da Nielsen, mini-lotes são sorteados sem substituição:
Podemos ver que não há substituição de amostras de treinamento em uma época. Curiosamente, também podemos ver que a Nielsen opta por não se preocupar em ajustar
eta
(a taxa de aprendizado) para o último tamanho de mini-lote, que pode não ter tantas amostras de treinamento quanto os mini-lotes anteriores. Presumivelmente, essa é uma modificação avançada que ele deixa para os capítulos posteriores. **** EDIT: Na verdade, esse dimensionamento ocorre na
def update_mini_batch
função. Por exemplo, com os pesos:Isso é necessário porque o último mini_batch pode ser menor que o mini_batch anterior, se o número de amostras de treinamento por mini_batch não se dividir uniformemente no número total de amostras de treinamento disponíveis.
Resultado:
Mudando
mini_batch_size
para3
, que não se divide uniformemente em nossas 10 amostras de treinamento. Para saída, obtemos:Ao avaliar uma faixa sobre os índices da lista (algo da forma
[x:y]
ondex
ey
são alguns índices na lista), se o nosso valor da mão direita excede o comprimento lista, python simplesmente retorna os itens da lista até o valor sai da faixa de índice .Portanto, o último mini-lote pode ser menor que os mini-lotes anteriores, mas se for ponderado pelo mesmo
eta
, as amostras de treinamento contribuirão mais para o aprendizado do que as amostras nos outros mini-lotes maiores. Como este é apenas o último mini-lote, provavelmente não vale a pena se preocupar muito, mas pode ser facilmente resolvido escalandoeta
para a duração do mini-lote.fonte