Você está interessado apenas em papel ou uma explicação razoável seria suficiente? Como o filtro do kernel em tal uso é realmente um detector de borda, mas o "fenômeno", como você chama, é apenas "escolha-me os ângulos do meu detector de maneira uniforme", para que qualquer descontinuidade em determinados ângulos seja detectada - se não forem todos 0.
Como você está procurando papéis - apenas o incentivo a ler como são feitos os detectores de borda - eles são calculados para determinados ângulos, mas se você não se importa tanto com um ângulo específico, mas depois de escolher, você os usa de maneira consistente para alimentar sua rede , quase todos os números uniformes são bons (caso zero, caso identidade e casos degenerados dos olhos devem ser descartados). Quando você pega um filtro para alimentar algo, ele nem precisa ser normalizado.
datascience.stackexchange.com/q/18158/8560
Intuição, para um caso pequeno
Por quê? Vejamos o caso mais simples possível, em que o kernel tem 1x2 (ou seja, dois pixels de largura e um pixel de altura).
Aqui está uma matriz do kernel para um detector de arestas que detecta arestas verticais:
E1=[−1+1]E1=[−1+1]
Aqui está outra matriz para um detector de arestas que também detecta arestas verticais:
E2=[+1−1]E2=[+1−1]
Em particular, a convolução com E1E1 responde fortemente às arestas verticais e onde o lado direito da aresta tem maior intensidade e o lado esquerdo tem menor intensidade (mais branco à direita, mais preto à esquerda). E2E2 responde fortemente às arestas verticais com a variação de intensidade oposta (mais branca à esquerda, mais negra à direita).
Podemos ver que o mesmo se aplica a outros exemplos. Por exemplo, considere
E3=[+1.7−1.7]E3=[+1.7−1.7]
Isso se comporta quase de forma idêntica à E2E2, exceto para redimensionar sua saída.
Por uma questão de simplicidade, vamos nos concentrar nos kernels de convolução que foram normalizados, para que suas entradas sejam zero. (Muitos kernels de convolução que usamos na prática têm essa forma, porque possuem boas propriedades.)
Que tal uma matriz 1x2 aleatória? Bem, se tiver sido normalizado, terá necessariamente a forma
M=[+α−α]M=[+α−α]
por alguma constante αα (Onde ααé aleatório). Independentemente do queαα é, vemos que isso se comporta como E1E1 ou E2E2.
Conclusão: um filtro de convolução 1x2 aleatório e normalizado se comporta como um detector de borda vertical, com alta probabilidade.
Casos maiores
Isso pode ser generalizado para outros tamanhos de kernels. Para um kernel 2x1 aleatório e normalizado, obteremos basicamente um detector de borda horizontal. Um kernel 2x2 aleatório e normalizado provavelmente responderá às arestas em alguma direção (talvez em algum ângulo; a direção específica dependerá das entradas da matriz).
À medida que a matriz aumenta, esse efeito diminui (eu acho). No entanto, normalmente na prática usamos um núcleo de convolução relativamente pequeno (um campo receptivo razoavelmente pequeno), então realmente nos preocupamos principalmente com o comportamento de pequenos núcleos de convolução.
E a normalização? Até agora, tenho falado sobre matrizes que foram geradas aleatoriamente e depois normalizadas para somar a zero. E se pularmos a etapa de normalização?
Bem, isso não muda muito. Sem normalização, umm×nm×n matriz aleatória MM pode ser decomposto em M=M′+c⋅AM=M′+c⋅A é normalizado, de modo que suas entradas somam zero, cc é uma constante AA é a matriz que contém 1/(mn)1/(mn) em todas as entradas.