Una red neuronal artificial está formada por neuronas artificiales, que son unidades o nodos que reciben información del exterior o de otras neuronas, de manera similar a los impulsos nerviosos que reciben las neuronas del cerebro humano, las procesan y generan un valor de salida que alimenta a otras neuronas de la red o son la salida hacia el exterior de la red.
Las redes neuronales son redes multicapa de neuronas (los nodos azul y magenta en el gráfico a continuación) que usamos para clasificar cosas, hacer predicciones, etc. A continuación se muestra el diagrama de una red neuronal simple con cinco entradas, 5 salidas y dos capas ocultas de neuronas.
Empezando por la izquierda, tenemos:
- La capa de entrada de nuestro modelo en naranja.
- Nuestra primera capa oculta de neuronas en azul.
- Nuestra segunda capa oculta de neuronas en magenta.
- La capa de salida (también conocida como la predicción) de nuestro modelo en verde.
Las flechas que conectan los puntos muestran cómo todas las neuronas están interconectadas y cómo los datos viajan desde la capa de entrada hasta la capa de salida. Posteriormente calcularemos paso a paso cada valor de salida. También veremos cómo la red neuronal aprende de su error mediante un proceso conocido como retropropagación.
Primero
Tenemos un conjunto de entradas y un conjunto de valores objetivo, y estamos tratando de obtener predicciones que coincidan con esos valores objetivo lo más cerca posible.
Olvídese por un segundo de la imagen más complicada de la red neuronal que dibujé arriba y concéntrese en esta más simple a continuación.
Esta es una regresión logística de una sola característica (le estamos dando al modelo solo una variable X) expresada a través de una red neuronal (si necesita un repaso sobre la regresión logística, escribí sobre eso aquí ). Para ver cómo se conectan, podemos reescribir la ecuación de regresión logística utilizando los códigos de color de nuestra red neuronal.
Examinemos cada elemento:
- X (en naranja) es nuestra entrada, la única característica que le damos a nuestro modelo para calcular una predicción.
- B1 (en turquesa, también conocido como azul-verde) es el parámetro de pendiente estimado de nuestra regresión logística: B1 nos dice cuánto cambia el Log_Odds a medida que cambia X. Observe que B1 vive en la línea turquesa, que conecta la entrada X con la neurona azul en la capa oculta 1 .
- B0 (en azul) es el sesgo, muy similar al término de intersección de la regresión. La diferencia clave es que en las redes neuronales, cada neurona tiene su propio término de sesgo (mientras que en la regresión, el modelo tiene un término de intersección singular).
- La neurona azul también incluye una Función de Activación Sigmoide (indicada por la línea curva dentro del círculo azul). Recuerde que la función sigmoide es lo que usamos para pasar de log-odds a probabilidad (haga una búsqueda de control-f para "sigmoid" en mi publicación anterior) .
- Y finalmente obtenemos nuestra probabilidad predicha aplicando la Función Sigmoide a la cantidad (B1*X + B0).
Más capas
Ahora que tenemos nuestro marco básico, regresemos a nuestra red neuronal un poco más complicada y veamos cómo pasa de la entrada a la salida. Aquí está de nuevo como referencia:
La primera capa oculta consta de dos neuronas. Entonces, para conectar las cinco entradas a las neuronas en la Capa oculta 1, necesitamos diez conexiones. La siguiente imagen (abajo) muestra solo las conexiones entre la Entrada 1 y la Capa oculta 1.
Tenga en cuenta nuestra notación para los pesos que viven en las conexiones: W1,1 denota el peso que vive en la conexión entre la Entrada 1 y la Neurona 1 y W1,2 denota el peso en la conexión entre la Entrada 1 y la Neurona 2. Entonces, la notación general que seguiré es W a,b denota el peso en la conexión entre la Entrada a (o Neurona a ) y la Neurona b .
Ahora calculemos las salidas de cada neurona en la capa oculta 1 (conocidas como activaciones). Lo hacemos usando las siguientes fórmulas ( W denota peso, In denota entrada).
Z1 = W1*In1 + W2*In2 + W3*In3 + W4*In4 + W5*In5 + Bias_Neuron1
Activación de Neurona 1 = Sigmoide (Z1)
Finalmente, antes de continuar, mapeemos visualmente cada uno de estos elementos en nuestro gráfico de red neuronal para vincularlo todo ([Sesgo] está incrustado en las neuronas azules).
Al calcular repetidamente [Z] y aplicarle la función de activación para cada capa sucesiva, podemos pasar de la entrada a la salida. Este proceso se conoce como propagación directa. Ahora que sabemos cómo se calculan las salidas, es hora de comenzar a evaluar la calidad de las salidas y entrenar nuestra red neuronal.
Aprendizaje de la Red Neuronal
Ya calculados los valores de salida de una red neuronal, es hora de entrenarla. El proceso de entrenamiento de una red neuronal, a un alto nivel, es como el de muchos otros modelos de ciencia de datos: defina una función de costo y use la optimización de descenso de gradiente para minimizarla .
En una red neuronal, cambiar el peso de cualquier conexión (o el sesgo de una neurona) tiene un efecto de repercusión en todas las demás neuronas y sus activaciones en las capas posteriores .
Eso es porque cada neurona en una red neuronal es como su propio pequeño modelo . Por ejemplo, si quisiéramos una regresión logística de cinco características, podríamos expresarla a través de una red neuronal.
La función de costo
Dado un conjunto de entradas de entrenamiento (nuestras características) y resultados (el objetivo que estamos tratando de predecir):
Queremos encontrar el conjunto de pesos (recuerde que cada línea de conexión entre dos elementos en una red neuronal alberga un peso) y sesgos (cada neurona alberga un sesgo) que minimizan nuestra función de costo, donde la función de costo es una aproximación de cómo mal nuestras predicciones son relativas al resultado objetivo.
Para entrenar nuestra red neuronal, usaremos el error cuadrático medio (MSE) como función de costo:
MSE = Suma [ ( Predicción - Real )² ] * (1 / num_observations)
El MSE de un modelo nos dice en promedio qué tan equivocados estamos, pero con un giro: al elevar al cuadrado los errores de nuestras predicciones antes de promediarlos, castigamos las predicciones que están muy equivocadas con mucha más severidad que las que están ligeramente equivocadas. Las funciones de costo de la regresión lineal y la regresión logística operan de manera muy similar.
Ya tenemos una función de costo para minimizar. Es hora de encender el descenso de gradiente.
Para usar el descenso de gradiente, necesitamos conocer el gradiente de nuestra función de costo, el vector que apunta en la dirección de mayor inclinación (queremos dar pasos repetidamente en la dirección opuesta del gradiente para finalmente llegar al valor mínimo). ).
Excepto en una red neuronal, tenemos tantos pesos y sesgos cambiantes que están todos interconectados. ¿Cómo calcularemos el gradiente de todo eso? En la siguiente sección, veremos cómo la retropropagación nos ayuda a lidiar con este problema.
El gradiente
El gradiente de una función es el vector cuyos elementos son sus derivadas parciales con respecto a cada parámetro. Por ejemplo, si intentáramos minimizar una función de costo, C(B0, B1), con solo dos parámetros modificables, B0 y B1, el gradiente sería:
Gradiente de C(B0, B1) = [ [dC/dB0], [dC/dB1] ]
Entonces, cada elemento del gradiente nos dice cómo cambiaría la función de costo si aplicáramos un pequeño cambio a ese parámetro en particular, para que sepamos qué modificar y cuánto. En resumen, podemos marchar hacia el mínimo siguiendo estos pasos:
- Calcule el gradiente de nuestra "ubicación actual" (calcule el gradiente usando nuestros valores de parámetros actuales).
- Modifique cada parámetro en una cantidad proporcional a su elemento de degradado y en la dirección opuesta de su elemento de degradado. Por ejemplo, si la derivada parcial de nuestra función de costo con respecto a B0 es positiva pero pequeña y la derivada parcial con respecto a B1 es negativa y grande, entonces queremos disminuir B0 en una cantidad pequeña y aumentar B1 en una cantidad grande para reducir nuestra función de costo.
- Vuelva a calcular el gradiente usando nuestros nuevos valores de parámetros ajustados y repita los pasos anteriores hasta que lleguemos al mínimo.
Retropropagación
Voy a referirme a este gran libro de texto (¡en línea y gratis!) para las matemáticas detalladas (si quieres entender las redes neuronales más profundamente, definitivamente échale un vistazo) . En cambio, haremos todo lo posible para construir una comprensión intuitiva de cómo y por qué funciona la retropropagación.
Recuerde que la propagación directa es el proceso de avanzar a través de la red neuronal (desde las entradas hasta la predicción o el resultado final). La retropropagación es al revés. Excepto que en lugar de señal, estamos moviendo el error hacia atrás a través de nuestro modelo.
Ahora vamos a invertirlo. Si sigue las flechas rojas (en la imagen a continuación), notará que ahora estamos comenzando en la salida de la neurona magenta. Esa es nuestra activación de salida, que usamos para hacer nuestra predicción, y la última fuente de error en nuestro modelo. Luego movemos este error hacia atrás a través de nuestro modelo a través de los mismos pesos y conexiones que usamos para propagar nuestra señal hacia adelante (así que en lugar de Activación 1, ahora tenemos Error1, el error atribuible a la neurona azul superior).
¿Recuerdas que dijimos que el objetivo de la propagación directa es calcular las activaciones de las neuronas capa por capa hasta que lleguemos a la salida? Ahora podemos establecer el objetivo de la retropropagación de manera similar:
Queremos calcular el error atribuible a cada neurona (simplemente me referiré a esta cantidad de error como el error de la neurona porque decir "atribuible" una y otra vez no es divertido) comenzando desde la capa más cercana a la salida hasta el inicio capa de nuestro modelo.
Entonces, ¿por qué nos preocupamos por el error de cada neurona? Recuerde que los dos componentes básicos de una red neuronal son las conexiones que transmiten señales a una neurona en particular (con un peso vivo en cada conexión) y la neurona en sí (con un sesgo). Estos pesos y sesgos en toda la red también son los diales que ajustamos para cambiar las predicciones hechas por el modelo .
Esta parte es muy importante:
La magnitud del error de una neurona específica.(relativo a los errores de todas las demás neuronas)es directamente proporcional al impacto de la salida de esa neurona (también conocida como activación) en nuestra función de costo.
Y eso, en pocas palabras, es la intuición detrás del proceso de retropropagación. En mi opinión, estos son los tres puntos clave para la retropropagación:
Es el proceso de desplazar el error hacia atrás capa por capa y atribuir la cantidad correcta de error a cada neurona de la red neuronal.
El error atribuible a una neurona en particular es una buena aproximación de cómo cambiar los pesos de esa neurona (de las conexiones que conducen a la neurona) y el sesgo afectarán la función de costo.
Al mirar hacia atrás, las neuronas más activas (las que no son perezosas) son las que son culpadas y modificadas por el proceso de retropropagación.