Es un hecho bien conocido que una red de 1 capa no puede predecir la función xor, ya que no es separable linealmente. Intenté crear una red de 2 capas, utilizando la función sigmoide logística y el backprop, para predecir xor. Mi red tiene 2 neuronas (y un sesgo) en la capa de entrada, 2 neuronas y 1 sesgo en la capa oculta, y 1 neurona de salida. Para mi sorpresa, esto no convergerá. si agrego una nueva capa, entonces tengo una red de 3 capas con input (2 + 1), hidden1 (2 + 1), hidden2 (2 + 1) y output, funciona. Además, si mantengo una red de 2 capas, pero aumento el tamaño de la capa oculta a 4 neuronas + 1 sesgo, también converge. ¿Hay alguna razón por la cual una red de 2 capas con 3 o menos neuronas ocultas no podrá modelar la función xor?
fuente
Respuestas:
Sí, hay una razón Tiene que ver con cómo inicializas tus pesas.
Hay 16 mínimos locales que tienen la mayor probabilidad de converger entre 0.5 - 1.
Aquí hay un artículo que analiza el problema xor.
fuente
Una red con una capa oculta que contiene dos neuronas debería ser suficiente para separar el problema XOR. La primera neurona actúa como una puerta OR y la segunda como una puerta NO Y. Agregue ambas neuronas y si pasan el umbral es positivo. Puede usar neuronas de decisión lineal para esto con el ajuste de los sesgos para los umbrales. Las entradas de la puerta NOT AND deben ser negativas para las entradas 0/1. Esta imagen debería dejarlo más claro, los valores en las conexiones son los pesos, los valores en las neuronas son los sesgos, las funciones de decisión actúan como decisiones 0/1 (o simplemente la función de signo también funciona en este caso).
Imagen gracias al "blog de Abhranil"
fuente
Si está utilizando un descenso de gradiente básico (sin otra optimización, como el impulso) y una red mínima de 2 entradas, 2 neuronas ocultas, 1 neurona de salida, entonces definitivamente es posible entrenarlo para aprender XOR, pero puede ser bastante complicado y poco confiable.
Es posible que deba ajustar la tasa de aprendizaje. El error más habitual es configurarlo demasiado alto, de modo que la red oscile o diverja en lugar de aprender.
Puede llevar una cantidad sorprendentemente grande de épocas entrenar la red mínima usando el descenso de gradiente en línea o en lotes. Tal vez se requerirán varios miles de épocas.
Con un número tan bajo de pesos (solo 6), a veces la inicialización aleatoria puede crear una combinación que se atasca fácilmente. Por lo tanto, es posible que deba probar, verificar los resultados y luego reiniciar. Le sugiero que use un generador de números aleatorios sembrados para la inicialización y ajuste el valor inicial si los valores de error se atascan y no mejoran.
fuente