Estoy leyendo las conferencias sobre "Redes neuronales convolucionales para el reconocimiento visual", y en esta conferencia se ocupan de la visualización de la primera capa. Como se puede ver en la figura de abajo, esta figura se supone que visualiza los pesos de la primera capa de una red neuronal (totalmente conectada). ¿Podría alguien explicar cómo se obtienen exactamente estas visualizaciones a partir de la matriz de pesos W? Por ejemplo, si la entrada es de dimensión m, y la primera capa es de dimensión n, la matriz de pesos tiene m*n parámetros. ¿Cómo los transformamos en los cuadrados representados en la figura, y cómo decidimos fijar las intensidades?
Respuestas
¿Demasiados anuncios?La clave para entender esta trama está en página 1 de este curso:
En cambio, una red neuronal de ejemplo calcularía s= $W_2$ max(0, $W_1$ x). Aquí, $W_1$ podría ser, por ejemplo, una matriz [100x3072] que transforme la imagen en un vector intermedio de 100 dimensiones.
Si la imagen es de CIFAR-10, se vectoriza en un vector columna $x$ con 3017 elementos. Una vez que se aplica la matriz de pesos de la primera capa $W_1$ se convierte en un vector columna $W_1x$ que tiene 100 elementos. A continuación, se aplica la activación $\max(0,.)$ y dibujarla como una imagen de 10x10. Eso sería una imagen de la primera capa.
Sin embargo, creo que la imagen real no era de este tipo de red densa, sino que era de los filtros de la CNN. Cada celda me parece la salida de un filtro en esta imagen. Por ejemplo VGG-16 La arquitectura tiene 64 filtros, cada uno de los cuales produce una salida de 224x224 después de la convolución. Así que puedes dibujar esto directamente como una imagen de 224x24. Creo que eso es lo que ocurre en esta imagen.
Tienes filtros de 8x12 a la derecha y de 6x8 a la izquierda. En la izquierda la "imagen" creada por los filtros no sólo es ruidosa, sino que no parece ser diferente entre las distintas neuronas. A la derecha se ve cómo cada imagen es bastante distinta, por lo que la célula superior izquierda está detectando los patrones de líneas diagonales. Los que trabajan con imágenes podrán decirte qué filtro (convolución) hace exactamente eso.
No estoy 100% seguro pero creo que para cada neurona, crean una imagen simplemente multiplicando los píxeles de entrada por sus pesos que llevan a esa neurona en particular. Obtendrás resultados que exceden los valores de lo que puede ser un píxel (0-255) y también obtendrás números negativos, por lo que tendrás que reescalar los resultados antes de mostrarlos realmente como una imagen.