Devo levar elementos aleatórios para a descida do gradiente de mini-lote?

9

Ao implementar a descida gradiente de minilote para redes neurais, é importante levar elementos aleatórios em cada minilote? Ou é suficiente embaralhar os elementos no início do treinamento uma vez?

(Também estou interessado em fontes que definitivamente dizem o que fazem.)

Martin Thoma
fonte

Respostas:

7

Deve ser suficiente embaralhar os elementos no início do treinamento e depois lê-los sequencialmente. Isso realmente atinge o mesmo objetivo de obter elementos aleatórios todas as vezes, o que é quebrar qualquer tipo de estrutura predefinida que possa existir no seu conjunto de dados original (por exemplo, todos os aspectos positivos no início, imagens seqüenciais etc.).

Embora funcionasse para buscar elementos aleatórios toda vez, essa operação normalmente não é ideal em termos de desempenho. Os conjuntos de dados geralmente são grandes e não são salvos na memória com acesso aleatório rápido, mas no disco rígido lento. Isso significa que as leituras sequenciais são praticamente a única opção que você tem para obter um bom desempenho.

A Caffe, por exemplo, usa o LevelDB, que não suporta busca aleatória eficiente. Consulte https://github.com/BVLC/caffe/issues/1087 , que confirma que o conjunto de dados é treinado com imagens sempre na mesma ordem.

Choque
fonte
4
Gostaria de acrescentar que pode ser benéfico reorganizar os dados após cada iteração completa do conjunto de dados para gerar novos min-lotes em outras iterações.
CatsLoveJazz