Estou tentando entender melhor as redes neurais convolucionais melhor escrevendo código Python que não depende de bibliotecas (como Convnet ou TensorFlow), e estou ficando preso na literatura sobre como escolher valores para a matriz do kernel, quando realizando uma convolução em uma imagem.
Estou tentando entender os detalhes da implementação na etapa entre os mapas de recursos na imagem abaixo, mostrando as camadas de uma CNN.
De acordo com este diagrama:
O kernel da matriz do kernel "pisa" sobre a imagem, criando um mapa de recursos, em que cada pixel é a soma de todos os produtos entre elementos entre cada peso do kernel (ou matriz de filtro) e o valor de pixel correspondente da imagem de entrada.
Minha pergunta é: como inicializamos os pesos da matriz do kernel (ou filtro)?
Na demonstração acima, eles são simplesmente 1s e 0s, mas presumo que isso seja simplificado por causa do diagrama.
Esses pesos são treinados em alguma etapa de pré-processamento? Ou escolhido explicitamente pelo usuário?