Superajustei meu LSTM se eu treiná-lo através da janela deslizante? Por que as pessoas parecem não usá-lo para LSTMs?
Para um exemplo simplificado, suponha que tenhamos de prever a sequência de caracteres:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
É ruim (ou melhor?) Se eu continuar treinando meu LSTM com os seguintes minibatches:
A B C D E F G H I J K L M N, backprop, erase the cell
B C D E F G H I J K L M N O, backprop, erase the cell
.... and so on, shifting by 1 every time?
Anteriormente, eu sempre o treinava como:
A B C D E F G H I J K L M N, backprop, erase the cell
O P Q R S T U V W X Y Z, backprop, erase the cell
Em vez de mudar por um, seria melhor deslizar a janela em 2 entradas, etc? O que isso significa (em termos de precisão / sobreajuste)?
Além disso, se eu fizesse a abordagem de janela deslizante em uma rede Feed-forward, isso resultaria em super ajuste? Eu diria que sim, porque a rede é exposta às mesmas regiões de informações por um período muito longo. Por exemplo, é exposto a E F G H I J K
um longo período de tempo.
Editar:
Lembre-se de que o estado da célula é apagado entre os lotes de treinamento, portanto o LSTM terá um "martelo na cabeça" nesses momentos. Não é possível lembrar o que havia antes do OPQRSTUVWXYZ. Isso significa que o LSTM é incapaz de aprender que "O" segue o "M".
Então, pensei (portanto, toda a minha pergunta), por que não dar um lote intermediário (sobreposto) no meio ... e nesse caso, por que não usar vários minibatches sobrepostos - para mim, isso proporcionaria um treinamento mais suave? Em última análise, isso significaria uma janela deslizante para um LSTM.
Algumas informações úteis que encontrei após a resposta foram aceitas:
A primeira palavra da tradução em inglês provavelmente está altamente correlacionada com a primeira palavra da frase de origem. Mas isso significa que o decodificador deve considerar as informações de 50 etapas atrás, e essas informações precisam ser de alguma forma codificadas no vetor. Sabe-se que as redes neurais recorrentes têm problemas ao lidar com essas dependências de longo alcance. Em teoria, arquiteturas como LSTMs devem ser capazes de lidar com isso, mas na prática dependências de longo alcance ainda são problemáticas.
Por exemplo, os pesquisadores descobriram que a reversão da sequência da fonte (retornando-a para o codificador) produz resultados significativamente melhores porque reduz o caminho do decodificador para as partes relevantes do codificador. Da mesma forma, alimentar uma sequência de entrada duas vezes também parece ajudar uma rede a memorizar melhor as coisas. Por exemplo, se um exemplo de treinamento for "John foi para casa", você daria "John foi para casa John foi para casa" para a rede como uma entrada.
Edite depois de aceitar a resposta:
Vários meses depois, estou mais inclinado a usar a abordagem de janela deslizante, pois ela usa melhor os dados. Mas, nesse caso, você provavelmente não deseja treinar BCDEFGHIJKLMNO logo após ABCDEFGHIJKLMNO. Em vez disso, embaralhe seus exemplos para gradualmente e uniformemente " incorporar " todas as informações em seu LSTM. Dê HIJKLMNOPQRSTU após ABCDEFGHIJKLMNO etc. Isso está diretamente relacionado ao esquecimento catastrófico. Como sempre, monitore de perto o conjunto de validação e teste e pare assim que os erros deles aumentarem constantemente
Além disso, o problema "martelo na cabeça" pode ser aprimorado usando gradientes sintéticos. Veja seu benefício aqui: (a resposta vinculada discute o benefício de sequências longas) /datascience//a/32425/43077