La arquitectura AlexNet utiliza rellenos cero como se muestra en la imagen: Sin embargo, no hay explicación en el documento por qué se introduce este relleno.
El curso Standford CS 231n enseña que usamos relleno para preservar el tamaño espacial:
Me pregunto si es la única razón por la que necesitamos relleno. Quiero decir, si no necesito preservar el tamaño espacial, ¿puedo eliminar los rellenos? Sé que dará como resultado una disminución muy rápida del tamaño espacial a medida que avanzamos a niveles más profundos. Sin embargo, puedo compensar eso eliminando las capas de agrupación. Sería muy feliz si alguien pudiera darme alguna razón detrás del relleno cero. ¡Gracias!
fuente
Me parece que la razón más importante es preservar el tamaño espacial. Como dijiste, podemos compensar la disminución del tamaño espacial eliminando las capas de agrupación. Sin embargo, muchas estructuras de red recientes (como redes residuales , redes de Inception , redes fractal ) operan en las salidas de las diferentes capas, lo que requiere un tamaño espacial constante entre ellos.
Otra cosa es que, si no hay relleno, los píxeles en la esquina de la entrada solo afectan a los píxeles en la esquina correspondiente de la salida, mientras que los píxeles en el centro contribuyen a una vecindad en la salida. Cuando varias capas sin relleno se apilan juntas, la red ignora los píxeles del borde de la imagen.
Solo algunos de mis entendimientos, creo que hay otras buenas razones.
fuente
Gran pregunta Drag0 explicó bien pero estoy de acuerdo, algo está mal.
Es como mirar una fotografía y tener que lidiar con la frontera. En la vida real, puedes mover los ojos para mirar más allá; No existen fronteras reales. Por lo tanto, es una limitación del medio.
Además de preservar el tamaño, ¿importa? No conozco una respuesta satisfactoria, pero supongo (no comprobado) que con los experimentos de atención y oclusión (objetos parciales), no necesitamos que la información se pierda en los bordes. Si hicieras algo más inteligente (por ejemplo, copia el píxel al lado), no cambiaría la respuesta, aunque no he experimentado yo mismo. El relleno con 0s es rápido y conserva el tamaño, por eso lo hacemos.
fuente
Este es mi pensamiento. el relleno cero es importante en el momento inicial para mantener el tamaño del vector de características de salida. y alguien arriba dijo que el relleno cero tiene más rendimiento.
pero ¿qué tal la última vez? La resolución del vector de la función de imagen es muy pequeña, y el valor de píxel significa una especie de vector de cierto tamaño global.
Creo que en el último caso es mejor algún tipo de reflejo que cero relleno.
fuente
Al elaborar la información en el borde, básicamente, el píxel en la esquina (sombreado en verde) cuando se realiza una convolución solo se usaría una vez, mientras que el que está en el medio, como el rojo sombreado, contribuiría al mapa de características resultante varias veces. , rellenamos la imagen Ver figura: 2 .
fuente
Trataré de decir desde el punto de vista de la información que cuándo está bien rellenar y cuándo no.
Tomemos como ejemplo el caso de la funcionalidad de relleno de tensorflow. Proporciona dos escenarios, "Válido" o "igual". Igual conservará el tamaño de la salida y lo mantendrá igual que el de la entrada al agregar el relleno adecuado, mientras que válido no lo hará y algunas personas afirman que conducirá a la pérdida de información, pero aquí está el truco .
Esta pérdida de información depende del tamaño del núcleo o del filtro que está utilizando. Por ejemplo, supongamos que tiene una imagen de 28x28 y el tamaño del filtro es de 15x15 (digamos). La salida debe tener una dimensión de 16x16, pero si rellena con "lo mismo" en tensorflow será 28x28. Ahora las 12 filas y las 12 columnas en sí mismas no contienen ninguna información significativa, pero aún están allí como una forma de ruido. Y todos sabemos cuán susceptibles son los modelos de aprendizaje profundo hacia el ruido. Esto puede degradar mucho el entrenamiento. Entonces, si usa filtros grandes, mejor no use relleno.
fuente