Redes neuronales
Programa de Visión Artificial/Computacional — Sesión2
Autoras: Estefanía Freire, Sarahí Silva
Los algoritmos de redes neuronales están diseñados para imitar el comportamiento del cerebro humano; el propósito de estas generalmente se reduce a 3 aspectos aprender de la experiencia, obtener información según las entradas que se proveen y generalizar lo ya aprendido en nuevos elementos lo que las hace muy valiosas ya que permiten reconocer patrones que de otro modo no podrían ser reconocidos.
Por ejemplo, se requiere que la computadora reconozca un número de una imagen, se da a ésta un conjunto de números etiquetados de modo que al analizar cada uno de estos pueda notar los patrones que existen en estos y “reconocer” una vez que se ingresen nuevos números que no han sido etiquetados.
Capas
Las redes neuronales se encuentran conformadas por capas que a su vez cuentan con “neuronas” quienes se conectarán entre sí para enviarse mensajes y poder compartir información que será relevante para determinar el o los outputs correspondientes.
Las capas se encuentran divididas en 3 grupos input, hidden y output.
En la capa de input estarán todas nuestras entradas o datos de entrenamiento estos contarán con pesos que permitirán expresar su importancia.
La capa hidden puede estar conformada a su vez por una o varias capas el número de capas dependerá de qué tan sofisticado queremos nuestro modelo sin embargo, es necesario recalcar que mientras más capas se tengan necesitaremos más recursos como tiempo y poder computacional.
La capa de output puede contar con una o varias neuronas dependerá del número de características que se desean llegar a encontrar.
Funciones de activación
La función de activación devuelve una salida que será generada por la neurona dada una entrada o conjunto de entradas. Cada una de las capas que conforman la red neuronal tienen una función de activación que permitirá reconstruir o predecir. Además, se debe considerar que en la red neuronal se usará una función no lineal debido a que le permite al el modelo adaptarse para trabajar con la mayor cantidad de datos.
Las funciones de activación se dividen en dos tipos como: lineal y no lineal
- Función Lineal
Esta función también conocida como identidad, permite que lo de la entrada sea igual a la salida por lo que si tengo un red neuronal de varias capas y aplicó función lineal se dice que es una regresión lineal. Por lo tanto, esta función de activación lineal se usa si a la salida se requiere una regresión lineal y de esta manera a la red neuronal que se le aplica la función va a generar un valor único. Por ejemplo se usa cuando se solicita predecir el valor de un número de ventas.
- Funciones no lineales
Función Umbral
Esta función también conocida como escalón, indica que si la x es menor que cero la neurona va a ser cero pero cuando es mayor igual a cero dará como salida igual 1. Esta función se usa cuando se quiere clasificar o cuando se tiene salidas categóricas. Por ejemplo, se puede usar para predecir si compro algo o no.
Función Sigmoide
Esta función también conocida como función logística, está en un rango de valores de salida está entre cero y uno por lo que la salida es interpretada como una probabilidad. Si se evalúa la función con valores de entrada muy negativos, es decir x<0 la función será igual a cero, si se evalúa en cero la función dará 0.5 y en valores altos su valor es aproximadamente a 1. Por lo que esta función se usa en la última capa y se usa para clasificar datos en dos categorías.
Actualmente la sigmoide no es una función muy utilizada debido a que no está centrada y esto afecta en el aprendizaje y entrenamiento de la neurona por lo que influye con el problema de desaparición de gradiente.
Función tangente hiperbólica
Esta función de activación llamada tangente hiperbólica tiene un rango de valores de salida entre -1 y 1. Se dice que está función es un escalamiento de la función logística, por lo que a pesar que esta función está centrada tiene un problema similar a la sigmoide debido al problema de desaparición del gradiente, que se da cuando en el entrenamiento se genera un error con el algoritmo de propagación hacia atrás y debido a esto el error se va propagando entre las capas, por lo que en cada iteración toma un valor pequeño y la red no puede obtener un buen aprendizaje.
Función ReLu
Está función es la más utilizada debido a que permite el aprendizaje muy rápido en las redes neuronales. Si a esta función se le da valores de entrada muy negativos el resultado es cero pero si se le da valores positivos queda igual y además el gradiente de esta función será cero en el segundo cuadrante y uno en el primer cuadrante. Cuando se tiene que la función es igual a cero y su derivada también lo es se genera lo que es la muerte de neuronas, a pesar que puede ser un inconveniente en algunos casos permite la regularización Dropout. Por esta razón la función ReLu tiene una variante denominada Leaky ReLu que va a prevenir que existan neuronas muertas debido a la pequeña pendiente que existe cuando x<0.
Función Softmax
Esta función se usa para clasificar data, por ejemplo si le damos de entrada la imagen de una fruta y se solicita saber el tipo de fruta a que pertenece, aplicando softmax la red nos dará la probabilidad de que puede ser 0.3 o 30% melón, 0.2 o 20% sandía y 0.5 o 50% papaya, por lo que nos el resultado será el que tenga mayor probabilidad y cabe recalcar que la suma de estas probabilidades será igual a 1. En otras palabras, Softmax se usa para clases múltiples y cuando se va a asignar probabilidades a cada clase que pertenezca a clases múltiples.
Entrenamiento y pérdida
El objetivo de una red neuronal es aprender comportamientos que permitan destacar características de los objetos que se están tomando como input, todo este proceso es llamado Entrenamiento, sin embargo es casi imposible obtener un cien por ciento de predicciones correctas, por lo que a la penalidad por una predicción incorrecta se la llama Pérdida. El que exista pérdida en nuestro modelo no es malo, ya que en caso de no tenerla es muy posible que se esté realizando overfitting, es decir que nuestro modelo es incapaz de generalizar. El objetivo del entrenamiento es medir la pérdida para luego ir iterando hasta que el algoritmo descubra los parámetros del modelo con la pérdida más baja posible una vez que esto ocurra el modelo ha convergido.
Reducción de la pérdida
Para poder reducir la pérdida es necesario modificar los parámetros (pesos) y volver a recalcular el modelo tal como lo indica la figura anterior.
Uno de los métodos más efectivos para determinar los parámetros con los que obtendremos la menor pérdida sería calcular la pérdida con cada uno de los pesos posibles y luego determinar el punto en el que la pérdida es mínima pero esto conlleva un muy largo tiempo y demasiado poder computacional, por lo que se usa el algoritmo de descenso de gradientes.
El primer paso en el algoritmo de descenso de gradientes es escoger un punto inicial, luego se calculará el gradiente de la curva de pérdida en el punto escogido, para poder escoger el siguiente punto se multiplica la gradiente encontrada por un escalar llamado tasa de aprendizaje que se encuentra entre los valores 0.0 y 1.0.
Este escalar es un hiper parámetro muy importante, usualmente el valor de este es 0.05, controla qué tan rápido el modelo se adapta al problema.
Para poder aplicar todos los conceptos que se han visto a lo largo de este artículo, podemos hacer uso de herramientas como A neural network playground donde veremos en tiempo real cuál es el funcionamiento de una red neuronal y cómo afectan los diversos parámetros al modelo final.
Bibliografía
Using neural nets to recognize handwritten digits
Understand the Impact of Learning Rate on Neural Network Performance
Función de activación — Redes neuronales
Redes neuronales de clases múltiples: Softmax
Correcciones/sugerencias: bootcampai@gmail.com — 0992552147