Análisis con Redes Neuronales (Neural Networks)

Una neurona es un tipo de célula del sistema nervioso cuya principal función es la excitabilidad eléctrica de su membrana plasmática y están especializadas en la recepción de estímulos y la conducción (propagación) del impulso nervioso (señales) mediante reacciones electroquímicas. Cada neurona se compone principalmente de un cuerpo (soma), varias ramificaciones procedentes del soma neuronal (dendritas) y una prolongación del soma neuronal (axón). Cada neurona, generalmente, se conecta con otras neuronas y a esa conexión se la denomina "sinapsis".


Las señales propagadas por las neuronas permiten controlar la actividad del cerebro (pensamiento) y también permiten poder establecer cambios de posición y conectividad de estas neuronas (aprendizaje). El sueño de la Inteligencia Artificial es que algún día se puedan llegar a construir máquinas verdaderamente inteligentes.

El funcionamiento general de una neurona es el siguiente: 
Las dendritas de la neurona reciben las señales de otras neuronas, pudiendo considerar estas señales recibidas como las "entradas" de una neurona. La influencia colectiva de todas las entradas pueden "activar" una neurona, siempre y cuando dicha influencia colectiva supere un nivel mínimo de potencial eléctrico. Una vez que la neuronal este activada, transportará una señal procesada a las neuronas con las que esta conectada (salidas), sirviendo así también de entradas para otras neuronas.

Puede existir variabilidad en la sinapsis producida en las conexiones entre las dendritas de las neuronas, pueden influir de manera distinta en la "activación" de las neuronas, debido a que algunas sinapsis refuerzan la activación mientras que otras inhiben la activación ambos casos con diferentes grados. Se cree que esta "variabilidad" es la base del aprendizaje humano.

Las Redes Neuronales (Artificiales) son un paradigma de procesamiento y aprendizaje automático inspirado en la motivación de poder disponer de máquinas que simularan el comportamiento del cerebro, siendo esta una técnica muy eficaz para el aprendizaje automático en la actualidad. Los términos denominados como "pesos" representan la variabilidad en las sinapsis nombradas anteriormente. A continuación podemos visualizar la representación de una Red Neuronal Artificial y también algunos ejemplos de Funciones de Activación.



La neurona artificial más simple es la denominada como "perceptrón" que se caracteriza por ser una neurona artificial con una función de activación umbral. Formalmente, el umbral se representa como otro peso más (denominado como "sesgo") cuya entrada constante es '1' y su peso es negativo. Varios perceptrones componen una red neuronal de una "capa".




El objetivo del aprendizaje de perceptrones en las redes neuronales artificiales es ser capaces de aprender un perceptrón que concuerde con los ejemplos, es decir, que implemente la función booleana f(X1, X2, X3, ..., XN) = Y. Para ello, hay que aprender los "pesos" (w1, w2, ..., wN) y el umbral U (peso w0). En el caso de una red, se considera cada perceptrón por separado.

Para el aprendizaje, la idea es presentar los ejemplos de entrenamiento de forma iterativa al perceptrón y comparando en cada iteración el resultado ofrecido por el perceptrón con el resultado deseado (cálculo del "error"). En el caso en el cual existan diferencias entre el resultado ofrecido por el perceptrón y el resultado deseado, se realizan pequeños ajustes en los "pesos" de las entradas (incluyendo el "peso" que representa el umbral) con el fin de reducir estas diferencias. Este procedimiento se repite hasta que ambos resultados convergen y finalmente el perceptrón ha aprendido.

Para el desarrollo de los diferentes planteamientos que hemos propuesto anteriormente,a pero analizándolos con Redes Neuronales, realizaremos los siguientes pasos:

Primeramente, al igual que en los problemas de Regresión Logística, construiremos nuestras variables independientes ó predictoras 'X' que recogen todas y cada una de las características de cada una de las muestras y nuestra variable categórica 'Y' que recoge las etiquetas que hemos establecido para los datos de cada una de las muestras.

La función de activación que vamos a utilizar va a ser la "función sigmoide" y también emplearemos una generalización de la "Función de Coste de Regresión Logística" para evaluar el coste de dicha función. Al igual que en Regresión Lineal, el objetivo será minimizar el coste de la función J(Θ) (en este caso, podemos identificar los parámetros Θ (theta) como los "pesos" de nuestra red neuronal), por ello, para llevar a cabo este proceso de minimización lo mas rápido posible, normalizaremos los datos de nuestras variables independientes ó predictoras 'X'.



Seguidamente, añadiremos la columna de '1' para los valores 'X0' que serán los valores asociados a la entrada para el umbral de activación de nuestra Red Neuronal y configuraremos los parámetros de nuestra red en función del problema que se nos presente. Después tenemos que inicializar los valores de los "pesos", que en el caso de las Redes Neuronales Artificiales, no podemos inicializarlos con valor '0' como en los problemas de Regresión Logística, sino que los inicializaremos con un valor aleatorio dentro de un rango establecido:



Una vez que tenemos inicializados los "pesos" de nuestra Red Neuronal, podemos minimizar la función de coste, mediante la función de Optimización Avanzada "fmingcde la cual obtendremos nuestros "pesos" de forma optimizada:


En la función "FuncionCosteNN" nos ocupamos de evaluar los resultados en el proceso de activación de cada uno de los perceptrones de la Red Neuronal mediante la aplicación de la "Propagación hacia Adelante" (Forward Propagation), evaluar el coste y finalmente calcular los "errores" producidos en las diferentes capas con el fin de modificar ligeramente los "pesos" de forma adecuada por medio de la "Propagación hacia Atrás" (BackPropagation).



Una vez que tenemos calculados de forma correcta los pesos asociados a las entradas y a las "capas ocultas" de nuestra red neuronal, podemos cargar los ejemplos de entrenamiento proporcionados y evaluar los resultados obtenidos de la Red Neuronal realizando nuevamente un paso de "Propagación hacia Adelante" (Forward Propagation).