Existe algo que garante que os filtros convolucionais não sejam os mesmos?
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
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.