48

¿Podría alguien explicarme cómo actualizar el sesgo durante la propagación inversa?¿Cómo actualizar el sesgo en la propagación de redes neuronales?

¡He leído bastantes libros, pero no puedo encontrar actualizaciones de sesgo!

Entiendo que el sesgo es una entrada adicional de 1 con un peso asociado (para cada neurona). Debe haber una fórmula.

Gracias,

@msw

más interesante. Gracias, creo que dos puntos buenos son: 1. "La propiedad de" aproximación universal "de los perceptrones multicapa con las funciones de activación de capa oculta más utilizadas no se cumple si se omiten los términos de sesgo. Pero Hornik (1993) muestra que una condición suficiente para la propiedad de aproximación universal sin sesgos es que ninguna derivada de la función de activación desaparece en el origen, lo que implica que con las funciones de activación sigmoideas habituales, se puede usar un término de sesgo distinto de cero fijo en lugar de un sesgo entrenable ". 2. Las condiciones de polarización se pueden aprender al igual que otros pesos." Así que voy a añadir ya sea en un 'peso constante' o entrenar este peso como todos los demás utilizando descenso de gradiente.

Estoy entendiendo derecho?

+4

Esa es una gran pregunta con una respuesta lamentablemente grande. Este es un punto de partida decente: ftp://ftp.sas.com/pub/neural/FAQ2.html#A_bias – msw

+1

Entrenar a este peso como a todos los demás que usan gradiente de descendencia – pberkes

+0

Se requiere un término de sesgo, un valor de sesgo le permite cambiar la función de activación (función sigmoidea) a la izquierda o a la derecha. Las ponderaciones utilizadas en el término de sesgo se cambiarán en el algoritmo de propagación hacia atrás y se optimizarán mediante el descenso de gradiente o la técnica de optimización avanzada como la función fminunc en Octave/Matlab. –

Respuesta

48

Siguiendo la notación de Rojas 1996, chapter 7, backpropagation calcula derivadas parciales de la función de error E (coste aka, también conocido como pérdida)

∂E/∂w[i,j] = delta[j] * o[i] 

donde w[i,j] es el peso de la conexión entre las neuronas i y j, j siendo una capa más alta en la red que i, y o[i] es la salida (activación) de i (en el caso de la "capa de entrada", es solo el valor de la característica i en la muestra de capacitación considerada). La forma de determinar delta se da en cualquier libro de texto y depende de la función de activación, por lo que no la repetiré aquí.

Estos valores se pueden usar en actualizaciones de peso, p.

// update rule for vanilla online gradient descent 
w[i,j] -= gamma * o[i] * delta[j] 

donde gamma es la tasa de aprendizaje.

La regla para los pesos de polarización es muy similar, excepto que no hay entrada de una capa anterior. En lugar de ello, el sesgo es (conceptualmente) causada por la entrada de una neurona con una activación fijo de 1. Por lo tanto, la regla de actualización para los pesos sesgo es

bias[j] -= gamma_bias * 1 * delta[j] 

donde bias[j] es el peso del sesgo en la neurona j, la multiplicación con 1 se puede omitir obviamente, y gamma_bias se puede establecer en gamma o en un valor diferente. Si recuerdo correctamente, se prefieren los valores más bajos, aunque no estoy seguro de la justificación teórica de eso.

+0

¿Las personas incluyen el sesgo ('1') en la capa' l' como activación de esta capa? Quiero decir, si es así, entonces la actualización de los pesos en la capa 'l', incluidos los pesos de su sesgo, se puede escribir como una sola fórmula:' w (l) - = gamma * dot (delta (l + 1), o (l)) ', ¿estoy en lo cierto? – Jason

1

La cantidad que cambie el peso y el sesgo individual será la derivada parcial de su función de costo en relación con cada peso individual y cada sesgo individual.

∂C/∂(index of bias in network) 

Debido a que su función de costo probablemente no depende explícitamente en pesos y los valores individuales (costo podría ser igual a (salida de red - salida esperada)^2, por ejemplo), tendrá que relacionar las derivadas parciales de cada peso y sesgo a algo que conoces, es decir, los valores de activación (salidas) de las neuronas. Aquí hay una gran guía para hacer esto:

estados

https://medium.com/@erikhallstrm/backpropagation-from-the-beginning-77356edf427d

Esta guía de cómo hacer estas cosas con claridad, pero a veces puede faltar en la explicación. Me pareció muy útil leer los capítulos 1 y 2 de este libro como leí la guía vinculado anteriormente:

http://neuralnetworksanddeeplearning.com/chap1.html (proporciona antecedentes esenciales para la respuesta a su pregunta)

http://neuralnetworksanddeeplearning.com/chap2.html (responde a su pregunta)

Básicamente, los sesgos se actualizan de la misma forma que se actualizan los pesos: un cambio se determina en función del gradiente de la función de costo en un punto multidimensional.

Piense en el problema que su red está tratando de resolver como un paisaje de colinas y valles multidimensionales (pendientes). Este paisaje es una representación gráfica de cómo cambia su costo al cambiar los pesos y los sesgos. El objetivo de una red neuronal es alcanzar el punto más bajo en este panorama, encontrando el menor costo y minimizando el error. Si imagina su red como un viajero tratando de llegar al final de estos gradientes (es decir, Gradient Descent), la cantidad por la que cambiará cada peso (y sesgo) está relacionada con la pendiente de la pendiente (gradiente de la función) que el viajero está bajando actualmente. La ubicación exacta del viajero viene dada por un punto de coordenadas multidimensional (peso1, peso2, peso3, ... peso_n), donde el sesgo puede considerarse como otro tipo de peso. Pensando en los pesos/sesgos de una red como las variables para la función de costo de la red, deje en claro que se debe usar ∂C/∂ (índice de sesgo en la red).

Cuestiones relacionadas