6 votos

Redes neuronales convolucionales de retropropagación

Mi pregunta se refiere a la respuesta a esta pregunta: Entrenamiento de una red neuronal de convolución

¿Parece que la respuesta consiste en cambiar todos los pesos de un filtro determinado en la misma cantidad y en la misma dirección?

¿No será la CNN (red neuronal convolucional) incapaz de aprender los filtros adecuados de esta manera?

Vea los diagramas que representan los pesos aquí: http://jefkine.com/general/2016/09/05/backpropagation-in-convolutional-neural-networks/

El delta de 2x2 se retropropaga en un filtro de 2x2 que crea una cuadrícula de 3x3 del cambio de pesos Si se supone que se suman esos 9 valores y luego se añaden al filtro original de 2x2 en todas las posiciones, simplemente cambiará cada valor en el filtro de 2x2 en la misma cantidad y en las mismas direcciones. ¿Es esa la forma correcta de actualizar los pesos en una CNN? ¿O se supone que hay que actualizar cada peso (cada valor en el filtro 2x2) individualmente por su propio gradiente como en una red neuronal artificial ANN normal?

3voto

que que Puntos 1435

Una capa de red convolucional es una capa totalmente conectada en la que se cumplen dos cosas:

  • se eliminan ciertas conexiones; lo que significa que sus pesos son forzados a ser constantes cero. Así que puedes ignorar estas conexiones/pesos
  • cada uno de los pesos no nulos se comparte entre múltiples conexiones, es decir, entre múltiples pares de neuronas de entrada/salida

Cuando un peso se comparte entre conexiones, la actualización del gradiente para ese peso es la suma de los gradientes de todas las conexiones que comparten el mismo peso.

Así que mirando sus preguntas:

¿O se supone que se actualiza cada peso (cada valor en el filtro 2x2) individualmente por su propio gradiente como en una red neuronal artificial normal ANN?

Cada peso se actualiza igual que en una "ann normal", por lo que interpreto que se trata de una capa totalmente conectada, o "densa", o "lineal", ¿no? Sin embargo, como se ha dicho, la actualización aplicada a cada uno de los pesos será la suma de los gradientes de todas las conexiones que comparten ese peso.

El delta de 2x2 se retropropaga en un filtro de 2x2 que crea una cuadrícula de 3x3 del cambio en los pesos Si se supone que se suman esos 9 valores y luego se añaden al filtro original de 2x2 en todas las posiciones, simplemente cambiará cada valor en el filtro de 2x2 en la misma cantidad y en las mismas direcciones. ¿Es esa la forma correcta de actualizar los pesos en una CNN?

Los gradientes "vuelven" al lugar de donde proceden. En el paso hacia delante, cada peso del "núcleo" de la CNN se utilizará para calcular la salida de múltiples conexiones. En el paso hacia atrás, los gradientes "fluyen hacia atrás", a lo largo de esas mismas conexiones, hacia los pesos de origen.

En el peor de los casos, en lugar de pensar en la CNN como algo mágico, se puede, como se ha dicho, considerar que una CNN es una capa estándar totalmente conectada/lineal, con muchas conexiones/pesos forzados a ser cero, y los pesos restantes compartidos entre múltiples conexiones. Entonces, puedes usar tu conocimiento existente para las capas completamente conectadas / lineales, para manejar la capa CNN.

Como antecedentes, algunos objetivos/motivaciones conceptuales de una capa CNN en comparación con una capa totalmente conectada son:

  • impone una prioridad en la adyacencia. Dado que los píxeles de las imágenes tienden a tener más correlación y relaciones con los píxeles adyacentes, por lo que mantenemos sólo las conexiones entre los píxeles de entrada/salida adyacentes, y eliminamos las demás conexiones
  • en parte para eliminar los parámetros, para evitar el sobreajuste, y en parte porque queremos imponer una prioridad en la invariabilidad a la traslación, compartimos los pesos de tal manera que los píxeles de entrada en una región darán resultados idénticos, sin importar en qué parte de la imagen se encuentren, pero simplemente trasladados en la imagen de salida

1voto

chinaking Puntos 19

En la respuesta a la que haces referencia, el objetivo es calcular $w_k$ , uno de los pesos de un filtro en una red neuronal (convolucional). Las fórmulas de actualización de cualquier parámetro en una red neuronal, utilizando el descenso de gradiente, es bastante simple si sólo se expresa como una derivada de la función de coste $J$ :

$\Delta w_k = -\eta \frac{\partial J}{\partial w_k}$

Pero, la informática $\frac{\partial J}{\partial w_k}$ es donde las cosas se complican. En una red neuronal convolucional, este peso es compartido, por lo que hay que calcular

$\frac{\partial J}{\partial w_k} = \sum \frac{\partial J}{\partial w_l}$

donde la suma se realiza sobre todas las ocurrencias de ese peso. Así, si se tiene un filtro 2x2 y una imagen de 8x8 (paso 1), el filtro se aplica 7x7=49 veces y en cada aplicación de este filtro se utiliza el peso superior izquierdo. Por lo tanto, la suma es sobre estos 49 valores. Para el peso superior derecho, sin embargo, la suma sigue siendo sobre 49 valores, pero ahora es un conjunto diferente de valores y por lo tanto la actualización es diferente.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X