Un Ejemplo Concreto: Aprendiendo la Función XOR

Clase 12 de 28Curso de Introducción al Deep Learning 2018

Construiremos a continuación una red neuronal desde cero que aprenda la función XOR. La elección de esta función no lineal no es por casualidad. Sin backpropagation sería difícil aprender a separar clases con una línea recta.

Para ilustrar este importante concepto, nota a continuación cómo una línea recta no puede separar 0s y 1s, las salidas de la función XOR. Los problemas reales también son linealmente no separables.

Deep-Learning-1.jpg

La topología de la red es simple:

  • Entrada X es un vector de dos dimensiones

  • Pesos W1 son una matriz de 2x3 dimensiones con valores inicializados de forma aleatoria

  • Capa escondida h1 consiste de 3 neuronas. Cada neurona recibe como entrada la suma de sus observaciones escaladas por sus pesos, este es el producto punto resaltado en verde en la figura de abajo: z1 = [x1, x2][w1, w2]

  • Pesos W2 son una matriz de 3x2 con valores inicializados de forma aleatoria

  • Capa de salida h2 consiste de 2 neuronas ya que la función XOR retorna 0 (y1=[0,1]) o 1 (y2 = [1,0])

Más visualmente:

Deep-Learning-2.jpg

Entrenemos ahora el modelo. En nuestro ejemplo los valores entrenables son los pesos, pero ten en cuenta que la investigación actual está explorando nuevos tipos de parámetros a ser optimizados. Por ejemplo: atajos entre capas, distribuciones estables en las capas, topologías, velocidades de aprendizaje, etc.

Backpropagation es un método para actualizar los pesos en la dirección (gradiente) que minimiza una métrica de error predefinida, conocida como Función de Pérdida o Función de costo, dado un conjunto de observaciones etiquetadas. Este algoritmo ha sido repetidamente redescubierto y es un caso especial de una técnica más general llamada diferenciación automática en modo acumulativo reverso.

Inicialización de la red

Inicialicemos los pesos de la red con valores aleatorios.

Deep-Learning-3.jpg

Propagación hacia adelante:

El objetivo de este paso es propagar hacia delante la entrada X a cada capa de la red hasta calcular un vector en la capa de salida h2. Es así como sucede:

  • Se proyecta linealmente la entrada X usando pesos W1 a manera de kernel:

Deep-Learning-4.jpg

  • Se escala esta suma z1 con una función Sigmoid para obtener valores de la primera capa escondida. Nota que el vector original de 2D ha sido proyectado ahora a 3D.

Deep-Learning-5.jpg

  • Un proceso similar toma lugar para la segunda capa h2. Calculemos primero la suma z2 de la primera capa escondida, la cual es ahora un vector de entrada.

Deep-Learning-6.jpg

  • Y luego calculemos su activación Sigmoid. Este vector [0.37166596 0.45414264] representa el logaritmo de la probabilidad o vector predecido, calculado por la red dado los datos de entrada X.

Deep-Learning-7.jpg

Calculando el error total

También conocido como “valor real menos predecido”, el objetivo de la función de pérdida es cuantificar la distancia entre el vector predecido h2 y la etiqueta real proveída por un ser humano, y.

Note que la función de pérdida contiene un componente de regularización que penaliza valores de los pesos muy altos a manera de una regresión L2. En otras palabras, grandes valores cuadrados de los pesos incrementaran la función de pérdida, una métrica de error que en realidad queremos reducir.