Existe algo que garante que os filtros convolucionais não sejam os mesmos?

Dec 11 2020

Treinei um modelo simples para reconhecer números manuscritos do conjunto de dados mnist. Aqui está:

model = Sequential([
    Conv2D(filters=1, kernel_size=(3,1), padding='valid', strides=1, input_shape=(28, 28, 1)),
    Flatten(),
    Dense(10, activation='softmax')])

Experimentei variar o número de filtros para a camada convolucional, mantendo outros parâmetros constantes (taxa de aprendizagem = 0,0001, número de episódios = 2000, tamanho do lote de treinamento = 512). Usei 1, 2, 4, 8 e 16 filtros e a precisão do modelo foi de 92-93% para cada um deles.

Pelo que entendi, durante o treinamento os filtros podem aprender a reconhecer vários tipos de bordas na imagem (por exemplo, vertical, horizontal, redonda). Esse experimento me fez pensar se algum dos filtros acabaria sendo duplicado - com pesos iguais ou semelhantes. Existe alguma coisa que os impede de fazer isso?

Respostas

4 user3667125 Dec 11 2020 at 13:16

Não, nada impede que os pesos sejam diferentes. Na prática, porém, eles acabam quase sempre diferentes porque torna o modelo mais expressivo (ou seja, mais poderoso), então a descida gradiente aprende a fazer isso. Se um modelo tem$n$ recursos, mas 2 deles são iguais, então o modelo efetivamente tem $n-1$ recursos, que é um modelo menos expressivo do que o de $n$ recursos e, portanto, geralmente tem uma função de perda maior.

Mas mesmo que os pesos sejam diferentes, alguns deles podem ser muito semelhantes. Se você visualizar a primeira camada de seus filtros de convolução e tiver um grande número deles (por exemplo, 100), verá que alguns deles estão aprendendo a detectar aproximadamente as mesmas arestas (mesma orientação e posicionamento). Esses recursos são tão semelhantes que são efetivamente redundantes no modelo e não aumentam seu poder preditivo.

Na verdade, existe todo um campo de pesquisa para identificar recursos redundantes e podá-los. Le Cun mostra em Optimal Brain Damage que eliminar recursos redundantes não apenas torna o modelo menor e mais rápido para inferência, mas também pode até melhorar a precisão do modelo.

Aqui está uma postagem de blog com uma visão geral de alto nível de um dos métodos de remoção para obter mais informações.