Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Nota: Para os utilizadores do BrainScript, o parâmetro para o tamanho do minibatch éminibatchSize, para Python utilizadores, é minibatch_size_in_samples. Para Python utilizadores, consulte aqui.
CNTK tem uma definição muito específica de minibatchSize parâmetro: denota o número de amostras entre modelo atualizações.
Uma amostra aqui é definida como um vetor ou tensor fluindo através do sistema.
Por exemplo, numa tarefa de reconhecimento de imagem, uma imagem é uma amostra.
O tamanho da minibatch para cada época, dado em amostras (tensores ao longo de um eixo dinâmico). O valor predefinido é 256. Pode utilizar valores diferentes para diferentes épocas, por exemplo, 128*2:1024 (em BrainScript) ou 128*2 + 1024 (em Python) significa usar o tamanho de minibatch de 128 para as duas primeiras épocas e depois 1024 para o resto.
Note que "Tamanho minibatch" em CNTK significa o número de amostras processadas entre atualizações modelo. Esta definição também se mantém quando paraleliza entre trabalhadores (por exemplo, para K os trabalhadores, o número de amostras que cada trabalhador processaria é minibatchSize/Kde).
Em caso de entradas de comprimento variável, minibatchSize refere-se ao número de itens nestas sequências, não ao número de sequências.
A SGD tentará encaixar o maior número possível de sequências na minibatch que não exceda as minibatchSize amostras totais.
Se forem dadas várias entradas, os tensores são adicionados à minibatch atual até que uma das entradas exceda o minibatchSize.
Importante, para dados sequenciais, uma amostra é um item individual de uma sequência.
Assim, CNTK nãominibatchSize se refere ao número de sequências na minibatch, mas sim ao número agregado de itens de sequência/fichas através das sequências que constituem a minibatch.
CNTK tem suporte nativo para sequências de comprimento variável, ou seja, pode acomodar sequências de comprimentos altamente variáveis dentro da mesma minibatch, sem necessidade de soluções alternativas como o balde.
Juntamente com a noção de CNTK de especificar a taxa de aprendizagem por amostra (em vez de uma média de minibatch), cada item de sequências de qualquer comprimento contribui igual para o gradiente, conduzindo a uma convergência consistente.
(Muitos outros conjuntos de ferramentas definem o tamanho da minibatch para dados sequenciais como o número de sequências na minibatch. Isto é problemático, especialmente se os gradientes também forem definidos como médias de minibatch em vez de CNTK somas de minibatch, porque a contribuição para o gradiente de cada token ou passo em uma sequência seria inversamente proporcional ao comprimento da sequência. A abordagem de CNTK evita isto.)
Quando vários Input{}s são usados, é possível que nem todas as entradas tenham o mesmo comprimento de sequência.
Por exemplo, na classificação de sequência, o rótulo de cada sequência é um único símbolo.
Neste caso, a entrada com o maior número de amostras controla o tamanho da minibatch. (Pode alterar este comportamento especificando definesMbSize=True para alguma entrada, em seguida, o tamanho da minibatch será contado com base nas sequências desta entrada particular. Quando várias entradas são especificadas, apenas uma pode ter definesMbSize definido para True.)
Apesar da nossa clara definição de minibatchSize ser o número de amostras entre modelo atualizações, há duas ocasiões em que devemos relaxar a definição:
- dados sequenciais: As sequências de comprimento variável geralmente não resumem exatamente o tamanho da minibatch solicitada. Neste caso, o maior número possível de sequências são embaladas numa minibatch sem exceder o tamanho da minibatch solicitada (com uma exceção: Se a sequência seguinte no corpus aleatório exceder o comprimento do tamanho da minibatch, o tamanho da minibatch será constituído por esta sequência).
- paralelismo de dados: Aqui, o tamanho da minibatch é aproximado, uma vez que o nosso algoritmo de aleatoriedade baseado em pedaços não pode garantir que cada trabalhador recebe precisamente o mesmo número de amostras.
Todas as considerações acima referidas também se aplicam a epochSize, mas epochSize tem algumas diferenças, veja aqui.