Respostas:
A vantagem da camada de convolução é que ela pode aprender certas propriedades nas quais você pode não pensar enquanto adiciona a camada de pool. O pool é uma operação fixa e a convolução pode ser aprendida. Por outro lado, o pool é uma operação mais barata que a convolução, tanto em termos da quantidade de computação que você precisa fazer quanto do número de parâmetros que você precisa armazenar (sem parâmetros para a camada de pool).
Há exemplos em que um deles é melhor escolha que o outro.
A primeira camada no ResNet usa convolução com passos largos. Este é um ótimo exemplo de quando andar dá uma vantagem. Essa camada, por si só, reduz significativamente a quantidade de computação que deve ser feita pela rede nas camadas subseqüentes. Comprime várias convoluções 3x3 (3 para ser exato) em uma convolução 7x7, para garantir que ele tenha exatamente o mesmo campo receptivo que três camadas de convolução (mesmo que seja menos poderoso em termos do que pode aprender). Ao mesmo tempo, essa camada aplica passo = 2 que reduz a amostragem da imagem. Como essa primeira camada no ResNet convolve e reduz a amostragem ao mesmo tempo, a operação se torna significativamente mais barata em termos computacionais. Se você usar stride = 1 e pooling para downsampling, você terminará com uma convolução que faz 4 vezes mais computação + computação extra para a próxima camada de pool. O mesmo truque foi usado no SqueezeNet e em outras arquiteturas de redes neurais.
No NIPS 2018, houve uma nova arquitetura apresentada chamada FishNet . Uma coisa que eles tentam é resolver os problemas com as conexões residuais usadas no ResNet. No ResNet, em alguns lugares, eles colocam a convolução 1x1 na conexão ignorar quando a amostragem reduzida é aplicada à imagem. Essa camada de convolução dificulta a propagação do gradiente. Uma das principais mudanças em seu artigo é que eles se livram das convoluções nas conexões residuais e as substituem por agrupamentos e simples upscales / identidades / concatenações. Esta solução corrige o problema com a propagação de gradiente em redes muito profundas.
Do documento FishNet (Seção 3.2)
As camadas na cabeça são compostas de concatenação, convolução com mapeamento de identidade e max-pooling. Portanto, o problema de propagação de gradiente da rede de backbone anterior na cauda é resolvido com o FishNet por 1) excluindo I-conv na cabeça; e 2) usando concatenação no corpo e na cabeça.
Em essência, o max-pooling (ou qualquer tipo de pool) é uma operação fixa e substituí-lo por uma convolução estriada também pode ser visto como um aprendizado da operação de pool, o que aumenta a capacidade de expressividade do modelo. O lado negativo é que ele também aumenta o número de parâmetros treináveis, mas isso não é um problema real em nossos dias.
Há um artigo muito bom de JT Springenberg, onde eles substituem todas as operações de pool máximo em uma rede por convoluções estriadas. O artigo demonstra como isso melhora a precisão geral de um modelo com a mesma profundidade e largura: "quando o pool é substituído por uma camada de convolução adicional com passada r = 2, o desempenho estabiliza e até melhora o modelo base"
Em busca da simplicidade: a rede totalmente convolucional
Convido você a ler o artigo, não é uma leitura difícil.