Acabo de aprender acerca de la regularización como un enfoque para controlar el sobreajuste, y me gustaría incorporar la idea en una implementación simple de retropropagación y perceptrón multicapa (MLP) que armé.
Actualmente para evitar un ajuste excesivo, valido cruzado y mantengo la red con la mejor puntuación hasta ahora en el conjunto de validación. Esto funciona bien, pero agregar regularización me beneficiaría en esa elección correcta del algoritmo y parámetro de regularización que haría que mi red converja en un modelo no sobreajustado de manera más sistemática.
La fórmula que tengo para el término de actualización (del curso Coursera ML) se establece como una actualización por lotes, por ejemplo, para cada peso, después de sumar todos los deltas aplicables para todo el conjunto de entrenamiento a partir de la propagación de errores, lambda * current_weight
se agrega un ajuste de antes de la combinación delta se resta al final del lote, donde lambda
está el parámetro de regularización.
Mi implementación de retropropagación utiliza actualizaciones de peso por artículo. Me preocupa que no pueda simplemente copiar el enfoque por lotes, aunque me parece bien intuitivamente. ¿Un término de regularización más pequeño por elemento funciona igual de bien?
Por ejemplo, lambda * current_weight / N
donde N es el tamaño del conjunto de entrenamiento, a primera vista esto parece razonable. Sin embargo, no pude encontrar nada sobre el tema, y me pregunto si eso se debe a que la regularización no funciona tan bien con una actualización por elemento, o incluso tiene un nombre diferente o una fórmula alterada.
fuente
Para complementar lo que dijo insys :
La regularización se usa cuando se calcula la propagación hacia atrás para todos los pesos en su MLP. Por lo tanto, en lugar de calcular el gradiente con respecto a toda la entrada del conjunto de entrenamiento (
batch
), solo usa algunos / un elemento (s) (stochastic or semi-stochastic
). Terminará limitando el resultado de la actualización con respecto a un elemento en lugar de todo lo que también es correcto.Además, si no recuerdo mal, Andrew NG lo usó
L2-regularization
. El/N
enlambda * current_weight / N
que no es obligatorio, sólo ayuda a cambiar la escala de la entrada. Sin embargo, si elige no usarlo, deberá (en la mayoría de los casos) seleccionar otro valor paralambda
.También puede usar el algoritmo de búsqueda de cuadrícula para elegir el mejor valor para
lambda
(el hiperparámetro => el que tiene que elegir).fuente