2012-02-22 7 views

Respuesta

7

Se regulariza para evitar el exceso de ajuste.

De the documentation (pdf):

decay: parámetro para el decaimiento de peso. Por defecto 0.

Más información está disponible en el libro de los autores, Modern Applied Statistics with S. Fourth Edition, página 245:

Una forma de asegurar que f es suave es restringir la clase de las estimaciones, por ejemplo, usando una cantidad limitada de nudos spline. Otra forma es regularización en el que el criterio de ajuste se altera para

E + λC(f)

con una penalización de C en el ‘rugosidad’ de f. La degradación del peso, específica de las redes neuronales , usa como penalización la suma de cuadrados de los pesos wij. ... El uso de la reducción de peso parece ayudar tanto al proceso de optimización como a para evitar sobrefatizar. (Énfasis añadido)

+1

Si eso fuera cierto, la configuración de decaimiento = 0 debería dar como resultado un modelo sobreequipado (con la mejor precisión de conjunto de entrenamiento posible). En mi caso, en cambio, obtuve una muy mala precisión en el conjunto de entrenamiento (alrededor del 10%). Dando decaimiento = 1e-4 -> .8294, decaimiento = 2e-4 -> .8832, 5e-3 -> .9924, 1e-2 -> .9954, 1e-1 -> .9966, 1 -> .9644 .Entonces, creo que el decaimiento debe ser un parámetro para disminuir la tasa de aprendizaje de la función de optimización –

+0

. Si realmente quieres estar seguro, puedes mirar [en la fuente] (http://cran.r-project.org/src/contrib /nnet_7.3-1.tar.gz). Todo es menos de 700 líneas, y con un ojo evidente hacia la comprensibilidad. No he estado inundado de redes neuronales lo suficiente como para seguirlo fácilmente, pero tal vez lo encuentres más fácil. – blahdiblah

+0

http://stats.stackexchange.com/questions/29130/difference-between-neural-net-weight-decay-and-learning-rate – Fernando

2

Complementando blahdiblah 's respuesta por mirar el código fuente Creo que el parámetro weights corresponde a la tasa de aprendizaje de propagación hacia atrás (leyendo el manual no podía entender lo que era) Mira el archivo nnet.c, línea , la función dentro fpass:

TotalError += wx * E(Outputs[i], goal[i - FirstOutput]); 

aquí, en una nomenclatura muy intuitiva, E corresponde al error pb y wx es un parámetro pasado a la función, que finalmente corresponde al identificador Weights[i].

También puede estar seguro de que el parámetro decay es de hecho lo que dice ser, vaya a las líneas 317 ~ 319 del mismo archivo, la función dentro VR_dfunc:

for (i = 0; i < Nweights; i++) 
    sum1 += Decay[i] * p[i] * p[i]; 
*fp = TotalError + sum1; 

donde p corresponde a los pesos de las conexiones, que es la definición exacta de regularización de pérdida de peso.

+0

Gracias por su útil respuesta. Estoy intentando configurar un modelo secuencial en Keras para imitar el comportamiento de nnet, pero no parecen coincidir. El argumento "decaimiento" en NNET parece ser equivalente al parámetro de regularización L2 en Keras, pero parte del código en nnet.c es confuso. Primera pregunta: ¿por qué se indexa "Decay" en absoluto? ¿No es solo un valor fijo utilizado para multiplicar la suma de pesos cuadrados? Segunda pregunta: ¿qué es el objeto "pendientes" y por qué se multiplica por "decaimiento"? Tercera pregunta: ¿la disminución se aplica a todos los pesos o solo a las conexiones entre la entrada y la capa oculta? – Josh

Cuestiones relacionadas