O abandono ( papel , explicação ) define a saída de alguns neurônios para zero. Portanto, para um MLP, você pode ter a seguinte arquitetura para o conjunto de dados de flores Iris :
4 : 50 (tanh) : dropout (0.5) : 20 (tanh) : 3 (softmax)
Funcionaria assim:
com , W um ∈ R 50 × 4 , D ∈ { 0 , 1 } 50 × 1 , W 2 ∈ R 20 × 50 , W 3 ∈ R 20 × 3 (ignorando vieses por uma questão de simplicidade).
Com e
onde a operação da multiplica D ponto a ponto com M (consulte o produto Hadamard ).
Portanto, apenas amostramos a matriz cada vez e, assim, o dropout se torna uma multiplicação de um nó com 0.
Mas para as CNNs, não está claro para mim o que exatamente é descartado. Eu posso ver três possibilidades:
- Descartar mapas de recursos completos (daí um kernel)
- Eliminando um elemento de um kernel (substituindo um elemento de um kernel por 0)
- Eliminando um elemento de um mapa de recursos
Adicione uma referência / citação à sua resposta.
Meus pensamentos
Eu acho que Lasanha faz (3) (ver código ). Isso pode ser o mais simples de implementar. No entanto, pode estar mais próximo da ideia original (1).
Parece ser semelhante para Caffe (consulte o código ). Para o tensorflow, o usuário precisa decidir ( código - não tenho certeza do que acontece quando noise_shape=None
é passado).
Como deve ser
(2) e (3) não fazem muito sentido, pois isso faria com que a rede adicionasse invariância às posições espaciais, o que provavelmente não é desejado. Portanto (1) é a única variante que faz sentido. Mas não tenho certeza do que acontece se você usar a implementação padrão.