Experimenté un poco con diferentes implementaciones de Perceptron y quiero asegurarme de entender las "iteraciones" correctamente.
La regla original del perceptrón de Rosenblatt
Según tengo entendido, en el clásico algoritmo perceptrón de Rosenblatt, los pesos se actualizan simultáneamente después de cada ejemplo de entrenamiento a través de
donde es la regla de aprendizaje aquí. Y el objetivo y el real están ambos trillados (-1 o 1). Lo implementé como 1 iteración = 1 pasada sobre la muestra de entrenamiento, pero el vector de peso se actualiza después de cada muestra de entrenamiento.
Y calculo el valor "real" como
Descenso de gradiente estocástico
Sin embargo, es igual a la regla del perceptrón target
y actual
no son valores trillados sino reales. Además, cuento la "iteración" como ruta sobre la muestra de entrenamiento.
Tanto SGD como la regla clásica de perceptrón convergen en este caso linealmente separable, sin embargo, estoy teniendo problemas con la implementación de descenso de gradiente.
Descenso de gradiente
Aquí, reviso la muestra de entrenamiento y sumo los cambios de peso para 1 pasada sobre la muestra de entrenamiento y actualizo los pesos a partir de entonces, por ejemplo,
para cada muestra de entrenamiento:
...
después de 1 pase sobre el conjunto de entrenamiento:
Me pregunto si esta suposición es correcta o si me falta algo. Intenté varias tasas de aprendizaje (hasta infinitamente pequeñas) pero nunca pude lograr que mostrara ningún signo de convergencia. Entonces, me pregunto si entendí mal algo. aquí.
Gracias Sebastián