Que es el Perceptron Multicapa Machine Learning Python

El Perceptron Multicapa( MultiLayer) es una evolucion del Perceptron Simple, es decir , una red neuronal que ya posee multiples capas para poder separar clases que no se pueden resolver de forma lineal.

Decision Bundary

Ya esta red se va a parecer mas a una Red Neuronal, y hasta ahora solo vimos separadores lineales( Perceptron , Regresion Lineal, Regresion Logistica, Softmax) muchas veces nuestras clases no van a ser linealmente separables, En este grafico tenemos dos clases, una la azul y otra de rojo, y no hay una forma lineal de separarlo.

Por lo cual necesitamos un separador mas complejo.Entonces Como hacemos?

Lo que hacemos es mapear los puntos ejemplo en mas dimensiones, en este caso pasamos de 2 a 3, y proyectamos los puntos rojos sobre el ejez, entonces ahora si tenemos un hiperplano por el cual separar estas dos clases.

Y esto lo podemos hacer agregando una capa adicional de Neuronas

Entonces lo que hacemos es, x*tita1 + x*tita2 +… ect lo que vimos en softmax, pero ademas ese resultado lo mapeamos con funcion de mapeo a una dimension mas grande, entonces (fijarse que tiene una neurona mas que la capa ultima) finalmente sobre esas dimension aplicamos softmax , entonces la capa intermedia tendria que aprender cual es el mapeo ( y esta funcion de activacion es no lineal )para que la clase sea lineamente separable, y la ultima capa solo aprender cual es el separador lineal, ya que sofmax solo se utiliza para separar linealmente las clases.

Funcion de Activacion

Vemos que una neurona tiene varias entradas( que pueden ser de los features, o tambien de otra neuronas) y una salida.

Una Neurona
Una Neurona

La salida es una funcion de la entrada

entonces tenemos tita*entrada y a eso le aplicamos una funcion de activacion, ya vimos la Sigmoidea pero hay mas, como estas que estan abajo.

Funciones de Activacion
Funciones de Activacion

Tanh

Tenemos la tanh( Tangente Hiperbolica ), el cual nos permite tambien separar entre dos clases, esta va entre [-1,1], ventaja que tiene en el rango mas grande, ya que va entre menos 1 y 1.

Relu

Es una funcion muy popular, cuando x es negativa da cero, cuando es positiva da x, si esto es demasiado violenta, existe una funcion llamada LeakyRelu

LeakyRelu

Es casi igual que Relu, pero tiene una pendiente muy chiquita para los x negativos.

Perceptron Multicapa

Podemos interpretarlo como una secuencia de funciones, donde tenemos un vector, funcion de activacion a el, y otra funcion de activacion a ese resultado, y asi sucesivamente con mas capas que querramos.

Ejemplo Practico

Vemos un set de datos que las clases no son linealmente separables.

Entonce le decimos que esto lo separe linealmente, en funcion solamente de x e y, dejamos la funcion de activacion sigmoide, entonces no logra separar linealmente estas dos clases.

Entonces vamos agregarle una capa de dos neuronas , en la capa intermedia y vemos que ya aproxima mejor.

Perceptron Multicapa con una capa intermedia de dos neuronas
Perceptron Multicapa con una capa intermedia de dos neuronas

Ahora en vez de usar dos neuronas, usamos tres neuronas, y vemos que ahora mapea de 2 a 3 o mas dimensiones, entonces con esta capa intermedia logramos separar las clases adecuadamente.

Perceptron Multicapa con una capa intermedia de 3 neuronas
Perceptron Multicapa con una capa intermedia de 3 neuronas

Si agregamos mas neuronas, no hay cambio, ahora si usamos una funcion de activacion Relu, nos permite la misma separacion que la sigmoide pero es generalmente mas rapida y tiene menos problemas numericos que la sigmoide o la tangente hiperbolica, tambien se podria agregar mas capas, con el mismo resultado pero tardaria mas en aprender los pesos .

Perceptron Multicapa
Perceptron Multicapa

Teorema de aproximacion Universal

Esto nos dice que con solo una capa oculta de suficiente numero de neuronas, podemos representar cualquier funcion, es decir , que perceptron multicapa puede separar cualquier conjunto de datos independientemente de la forma arbitraria de los puntos, por eso hablamos que la redes neuronales son aproximacion universales, puede aproximar cualquier funcion, esto es muy poderoso, pero sabemos que esto esta ligado a la capacidad expresiva del modelo y cuando un modelo es muy expresivo tenemos que tener cuidado de caer en overfitting, entonces necesitamos muchos datos para usar redes neuronales, a medida que la red neuronal tiene mayor cantidad de capas y neuronas, necesitamos mayor cantidad de datos para no overfittiar, la cantidad de datos es linealmente a la cantidad de parametros que tenemos, es decir si agregamos una cantidad de capas y neuronas debemos agregar datos en igual magnitud para no caer en overfitting

¿Como entrenamos esto?

Se entrena con un algoritmo muy popular llamado BackPropagation, es decir, que empieza por atras, pero antes empecemos con el fowarpropagation que es como llegar a la prediccion, entonces tenemos una serie de datos(x) y cada una de estas lineas son los parametros (tita) que lo inicializamos al azar.

Entonces tenemos x1*tita1 + x2*tita2 +.. para la primer neurona, y asi con las neuronas de la misma capa, a eso le aplicamos una funcion de activacion, y despues hacemos lo mismo con ese resultado x´1*tita1´ + … para cada neurona, al cual finalmente aplicamos una funcion como SoftMax y hacemos una prediccion, y el valor real de target podemos ver si acertamos o no.

Si nos equivocamos, vamos a backpropagar, ajustando los wieght(pesos de la lineas) en funcion del error que cometimos, y ajustando esos pesos , vamos ajustar las neuronas señaladas con un circulo, y ajustando esas neuronas, ajustamos los pesos de ellas,

BackPropagation Formula

Formula BackPropagation Red Neuronal Multicapa
Formula BackPropagation Red Neuronal Multicapa

Calculamos el error para la capa final, y propagamos errores hacia atras, mediante la derivdad en cadena, entre el costo y la capa menos 1 , es algo que se resuelve en las librerias de machine learning

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *