Esta es una pregunta de seguimiento de este post que hice, "Perceptrón multicapa (red neuronal) para la predicción de series temporales" hace unos meses.
Estoy construyendo una red neuronal artificial feed-forward, utilizando un entrenamiento de propagación resistente. Por el momento, estoy tratando de implementar un algoritmo de actualización del peso de la entrada de una neurona individual. No consigo encontrar una respuesta clara y directa sobre cómo calcular la derivada parcial del error para un peso determinado. Lo único que puedo encontrar en la web, es el hecho de que la actualización del peso de una neurona es una función de $\frac{dE}{dW}$ (véase el Papel original [p. 2 y 3], o este [p. 4]).
Sin embargo, ninguno de estos documentos describe realmente cómo calcularlo.
Entiendo el concepto de derivada parcial en un sentido matemático . Y asumo que el cálculo del cambio de peso de la entrada de la neurona actual es la operación en cuestión, mientras que todos los demás valores de entrada de la neurona se mantienen constantes.
Así que, para cada una de estas neuronas, calculo el error individual de cada entrada tomando el error total ( -0.3963277746392987 ), que se ha multiplicado por el peso de la entrada de esa neurona (cada :error calculado es la suma del error de las entradas individuales).
Para ambas neuronas, ¿cuál sería el cambio de peso para cada entrada?
Esta es mi estructura de datos:
:input-layer
({:calculated-error -1.0991814559154283,
:calculated-value 0.9908633780805893,
:inputs
({:error -0.07709937922001887,
:calculated 0.4377023624017325,
:key :avolume,
:value 2.25,
:weight 0.19453438328965889,
:bias 0}
{:error -0.19625185888745333,
:calculated 1.4855269156904067,
:key :bvolume,
:value 3.0,
:weight 0.4951756385634689,
:bias 0}
{:error -0.3072203938672436,
:calculated 1.0261589301119642,
:key :ask,
:value 1.32379,
:weight 0.7751674586693994,
:bias 0}
{:error -0.36920086975057054,
:calculated 1.2332848282147972,
:key :bid,
:value 1.3239,
:weight 0.9315543683169403,
:bias 0}
{:error -0.14940895419014188,
:calculated 0.5036129016361643,
:key :time,
:value 1.335902400676,
:weight 0.37698330460468044,
:bias 0}),
:id "583c10bfdbd326ba525bda5d13a0a894b947ffc"},
...)
:output-layer
({:calculated-error -1.1139741279964241,
:calculated-value 0.9275622253607013,
:inputs
({:error -0.2016795955938916,
:calculated 0.48962608882549025,
:input-id "583c10bfdbd326ba525bda5d13a0a894b947ffb",
:weight 0.5088707087900713,
:bias 0}
{:error -0.15359996014735702,
:calculated 0.3095962076691644,
:input-id "583c10bfdbd326ba525bda5d13a0a894b947ffa",
:weight 0.38755790024342773,
:bias 0}
{:error -0.11659507401745359
:calculated 0.23938733624830652,
:input-id "583c10bfdbd326ba525bda5d13a0a894b947ff9",
:weight 0.2941885012312543,
:bias 0}
{:error -0.2784739949663631,
:calculated 0.6681581686752845,
:input-id "583c10bfdbd326ba525bda5d13a0a894b947ff8",
:weight 0.7026355778870271,
:bias 0}
{:error -0.36362550327135884,
:calculated 0.8430641676611533,
:input-id "583c10bfdbd326ba525bda5d13a0a894b947ff7",
:weight 0.9174868039523537,
:bias 0}),
:id "583c10bfdbd326ba525bda5d13a0a894b947ff6"})
Gracias de antemano