Ao aplicar o abandono em redes neurais artificiais, é preciso compensar o fato de que, no tempo de treinamento, uma porção dos neurônios foi desativada. Para fazer isso, existem duas estratégias comuns:
- escalando a ativação no momento do teste
- invertendo a desistência durante a fase de treinamento
As duas estratégias estão resumidas nos slides abaixo, extraídos de Standford CS231n: Redes neurais convolucionais para reconhecimento visual .
Qual estratégia é preferível e por quê?
Escalando a ativação no momento do teste:
Invertendo a desistência durante a fase de treinamento:
neural-networks
deep-learning
dropout
Franck Dernoncourt
fonte
fonte
Respostas:
"inverter a desistência durante a fase de treinamento" deve ser preferível.
Teoricamente, se considerarmos o abandono de Bernoulli como um método de adicionar ruído à rede, é melhor que o ruído possa ter uma média zero. Se fizermos a escala no momento do treinamento para cancelar a parte das unidades desativadas, a média do ruído será zero.
Existem outros tipos de métodos de abandono / ruído publicados mais tarde (por exemplo , abandono multiplicativo gaussiano, ruído aditivo gaussiano ) que também possuem uma média zero.
Em termos de treinamento e teste de redes neurais na prática, há uma razão para preferir essa implementação também. Digamos que eu queira comparar o desempenho de dois modelos com a mesma arquitetura, um é treinado por desistência e o outro não.
Se eu "escalar a ativação no momento do teste", precisarei de duas redes diferentes no momento do teste. Se eu usar a "versão invertida", poderia aplicar a mesma rede de teste (código) aos dois conjuntos de parâmetros treinados.
fonte
Outra vantagem de fazer o abandono invertido (além de não precisar alterar o código no momento do teste) é que, durante o treinamento, pode-se ter fantasia e alterar a taxa de abandono dinamicamente. Isso foi denominado como abandono "recozido". Essencialmente, a lógica é que adicionar "ruído" de abandono no início do treinamento ajuda a impedir que a otimização fique travada no mínimo local, enquanto diminui para zero no final, resultando em uma rede sintonizada mais fina com melhor desempenho.
TREINAMENTO ANULADO DE DROPOUT DE REDES PROFUNDAS
Dropout modificado para treinamento de rede neural
fonte
Andrew fez uma excelente explicação em seu curso de Deep Learning sobre esta sessão Regularização do abandono escolar :
Diga
a3 = a3 / keep_prob
na última etapa da implementação:Z [4] = W [4] * a [3] + b [4] , o tamanho do elemento de a [3] foi reduzido
keep_prob
de D3 (uma porcentagem de elementos foi eliminada por D3), portanto, o valor de Z [4] também será reduzido, portanto, para compensar isso aproximadamente , inverteremos a alteração dividindokeep_prob
para garantir que o valor de Z [4] não seja impactado.fonte