Introducción a las Redes Neuronales – El perceptrón- (Video)


Las Redes de Neuronas o Redes Neuronales (en la inteligencia artificial) son un paradigma de aprendizaje y procesamiento automático, inspirado en la forma en que funciona el sistema nervioso de los animales. Se trata de un sistema de interconexiones de neuronas que colaboran entre si para producir una salida.

Como bien sabemos la inteligencia artificial, pretende imitar la inteligencia natural, por tanto en este caso las redes neuronales pretenden imitar la "arquitectura" cerebral (neuronas+conexiones) que dan inteligencia a las personas. Es cierto que el termino inteligencia es bastante ambiguo, pero en este caso en el que hablamos de redes neuronales, consideraremos inteligencia a aquellas personas que sabiendo de un cierto tema, sean capaces de dar una respuesta a una problematicada dada (calculo, clasificación, etc); por ejemplo a poco que sepamos de animales, las personas somos capaces clasificar a un animal (dada una foto) en mamífero, ave, reptil, etc. es decir; que de alguna forma hemos aprendido la diferencia que hay entre esos animales y sabemos clasificarlos. Esto es un ejemplo de lo que puede hacer una red neuronal artificial bien entrenada (o enseñada), en la que dada una foto de un animal, sea capaz de clasificarlo. Evidentemente esta red neuronal  podrá fallar de la misma forma que los humanos fallamos, pero la idea es que una red neuronal bien entrenada sea capaz de predecir de la misma forma que las personas.

Otra de las preguntas que nos puede surgir es como aprenden las redes de neuronas; pues bien, lo hacen de la misma forma que los humanos. Existen dos tipos de aprendizaje que son los llamados aprendizaje supervisado y no supervisado. Los nombres son bastante descriptivos, por tanto sabemos que el aprendizaje supervisado lo obtenemos cuando es enseñado por un profesor, maestro, etc. y el no supervisado cuando se aprende por uno mismo.

En esta entrada vamos a explicar la arquitectura de una neurona artificial y la forma en la que se conectan entre ellas. También explicaremos el perceptrón y los conceptos del mismo para elegir en la medida de lo posible la mejor arquitectura de nuestra red neuronal. Todo ello estará englobado en el aprendizaje supervisado ya que el perceptrón es una arquitectura neuronal que necesita ser entrenada o enseñada.

Haciendo una gran abstracción del cerebro humano, decimos que el cerebro esta compuesto por un conjunto de neuronas conectadas entre sí. El cerebro humano tiene entorno a 1011 neuronas y unas 1014 conexiones. Cada neurona esta conectada a otras 1K-200K neuronas, por lo tanto no es de extrañar el elevado número de conexiones que hay. A modo de cultura general y para ver posteriormente la estructura de una neurona artificial, mostramos una imagen de una neurona cerebral humana y de como se conectan las neuronas entre si:

Neurona_jarroba              conexiones_redes_neuronales_jarroba

Cierto es que estas imágenes no nos proporcionan mucha información desde el punto de vista de la IA, pero si es interesante ver el significado de las conexiones y saber que es lo que hace cada neurona por separado. Con esta abstracción, podemos considerar que una red neuronal esta formada por un número de elementos simples que son las neuronas y que cada una de estas neuronas, realiza un operación muy sencillas (resuelve una sencilla función matemática en función del valor de sus entradas) cuyo resultado será trasmitida a la siguiente neurona como entrada de la misma (de ahí las conexiones). Dicho esto pasamos a mostrar una imagen de una neurona artificial:

Neurona_Red_de_neuronas_jarroba

Como vemos una neurona artificial tiene 'n' entradas (e1,…,en) que tendrán un determinado valor numérico. También tiene lo que se denomina una "conexión a masa" (b0) que es un valor constante para cada neurona; y cada entrada tiene un peso que se denota como 'Wi'. Con los valores de las entradas y de los pesos se calcula un valor que en la imagen se ha llamado entrada, (aunque se le suele denominar "neta") que es el sumatorio de cada una de las entradas por su peso. Una vez que se tiene ese valor "Entrada", se aplica una determinada función de salida, que es conocida como función de activación y que suelen ser alguna de las que mostramos a continuación:

funciones de activación

La función identidad también se le suele llamar función lineal y para la función escalón los rangos pueden variar en función de lo que se defina. Vistas las funciones de activación y la arquitectura, es bastante intuitivo ver que la salida de una neurona artificial se puede conectar como entrada de otra neurona y así  construir una red neuronal que se conoce como perceptrón, que como poco tendrá una neurona de entrada conectada a otra neurona de salida.

A continuación vamos a ver un ejemplo de una red neuronal que nos dirá la solución a las puertas lógicas de la AND, la OR y la XOR y ver la arquitectura que necesitamos en función de las necesidades que tengamos.

Puerta AND

La puerta AND es aquella que devuelve un '0' si alguna de sus entradas es '0' y devuelve un '1' si sus dos entradas son '1'. Lo que va ha hacer nuestra red neuronal va a ser dividir en dos planos las soluciones (ver siguiente imagen). Lo que "caiga" en un lado del plano dará como salida un '0' y lo que caiga al otro lado dará como salida un '1'.

planos_AND_redes_neuronales_jarroba

Como vemos en la imagen, lo que queda por arriba de la linea verde dará como salida un '1' y lo que queda por debajo de la linea verde dará como salida un '0'. Y ahora bien sabiendo que tenemos que trazar una linea "discriminante" para definir dos planos, ¿Cuantas neuronas necesitará nuestro perceptrón para resolver este problema?. Pues bien con dos neuronas de entrada y una neurona de salida será suficiente para resolver este problema ya que una neurona será capaz de diferenciar los dos planos. En la siguiente imagen vemos los pesos que debe de tener la neurona de salida para resolver la puesta AND:

AND_Red_de_neuronas_jarroba

En esta imagen no se han dibujado las neuronas de entrada, ya que estas lo único que harían, seria dar como salida el mismo valor que la entrada, poniendo todos sus pesos a uno y con una conexión a masa igual a '0' (b0=0).

Podemos hacer la prueba para ver que el resultado es correcto:

  • e1=0; e2=1; entrada = (0·1)+(1·1)+(1·(-1,5)) = 1-1,5 = -0,5 -> F(-0,5) = 0; porque -0,5<0;
  • e1=1; e2=1; entrada = (1·1)+(1·1)+(1·(-1,5)) = 1+1-1,5 = 0,5 -> F(0,5) = 1; porque 0,5>0;

Puerta OR

Con la puerta OR nos pasa lo mismo que con la puerta AND, que solo necesitamos "tirar una linea" para diferenciar las salidas, por tanto la arquitectura será la misma que la AND pero con pesos distintos:

OR_planos_red_neuronal_jarroba                OR_Red_de_neuronas_jarroba

  • e1=0; e2=0; entrada = (0·0)+(0·0)+(1·(-0,5)) = -0,5 -> F(-0,5) = 0; porque -0,5<0;
  • e1=1; e2=0; entrada = (1·1)+(0·1)+(1·(-0,5)) = 1+0-0,5 = 0,5 -> F(0,5) = 1; porque 0,5>0;

Puerta XOR

Un ejemplo algo más complejo es el de la puerta XOR ya que necesita dos hiperplanos para diferenciar las salidas:

XOR_planos_red_neuronal_jarroba

Esto significa que con una sola neurona no vamos a poder encontrar solución al problema, por tanto al haber dos hiperplanos vamos a necesitar un perceptrón con dos neuronas en la capa oculta; por tanto la arquitectura de este perceptrón será de dos neuronas en la capa de entrada, dos neuronas en la capa oculta y una neurona en la capa de salida. Al fin y al cabo solo hay que ver cuantas neuronas necesitaremos en la capa oculta ya que el número de neuronas en la capa de entrada y de salida, vienen determinadas por el número de entradas y de salidas que tenga nuestro problema. A continuación mostramos la red neuronal que resuelve el problema de la XOR:

XOR_Red_de_neuronas_jarroba

En esta arquitectura, podemos ver que las neuronas de entrada van a tener como salida el mismo valor que su entrada al ser su función de activación una función lineal. A continuación hacemos un seguimiento de como se obtienen las salidas en función de sus entradas:


e1=0; e2=0;

entrada Neurona3 = (e1·w11)+(e2·w21)+(b30·w30) = (0·1)+(0·1)+(1·(-0,5)) = -0,5 -> F3(-0,5) = 0;

entrada Neurona4 = (e1·w12)+(e2·w22)+(b40·w40) = (0·1)+(0·1)+(1·(-1,5)) = -1,5 -> F4(-1,5) = 0;

Salida-> entrada Neurona5 = (F3·w31)+(F4·w41)+(b05·W05) = (0·1)+(0·(-1))+(1·(-0,5)) = -0,5 -> F5(-0,5)=0


e1=0; e2=1;

entrada Neurona3 = (e1·w11)+(e2·w21)+(b30·w30) = (0·1)+(1·1)+(1·(-0,5)) = 0,5 -> F3(0,5) = 1;

entrada Neurona4 = (e1·w12)+(e2·w22)+(b40·w40) = (0·1)+(1·1)+(1·(-1,5)) = -0,5 -> F4(0,5) = 0;

Salida-> entrada Neurona5 = (F3·w31)+(F4·w41)+(b05·W05) = (1·1)+(0·(-1))+(1·(-0,5)) = 0,5 -> F5(0,5)=1


e1=1; e2=0;

entrada Neurona3 = (e1·w11)+(e2·w21)+(b30·w30) = (1·1)+(0·1)+(1·(-0,5)) = 0,5 -> F3(0,5) = 1;

entrada Neurona4 = (e1·w12)+(e2·w22)+(b40·w40) = (1·1)+(0·1)+(1·(-1,5)) = -0,5 -> F4(-0,5) = 0;

Salida-> entrada Neurona5 = (F3·w31)+(F4·w41)+(b05·W05) = (1·1)+(0·(-1))+(1·(-0,5)) = 0,5 -> F5(0,5)=1


e1=1; e2=1;

entrada Neurona3 = (e1·w11)+(e2·w21)+(b30·w30) = (1·1)+(1·1)+(1·(-0,5)) = 1,5 -> F3(1,5) = 1;

entrada Neurona4 = (e1·w12)+(e2·w22)+(b40·w40) = (1·1)+(1·1)+(1·(-1,5)) = 0,5 -> F4(0,5) = 1;

Salida-> entrada Neurona5 = (F3·w31)+(F4·w41)+(b05·W05) = (1·1)+(1·(-1))+(1·(-0,5)) = -0,5 -> F5(-0,5)=0

De esta forma vemos como resolver un problema utilizando un perceptrón con una capa oculta y como se resuelven este tipo de problemas utilizando redes neuronales. Este último ejemplo, es un ejemplo muy sencillo pero muy didáctico y visto esto podemos decir que para aprendernos la puerta XOR solo necesitamos 5 de nuestras 1011 neuronas del cerebros 😉 así que nos sobran otras muchas para otras cosas.

A continuación se va a mostrar una herramienta llamada Neuroph Studio que permite trabajar con redes neuronales de forma muy sencilla. Se va a mostrar este mismo ejemplo de la XOR (utilizando otra función de activación) para que se vea como se entrenan las redes neuronales. Esta herramienta permite hacer cosas mucho más complejas que una red neuronal para resolver el problema de la XOR, pero con este ejemplo podeis ir cogiendo soltura para futuros trabajos:

Arquitectura de la red neuronal con sus pesos:

XOR_NeuropStudio_0_0_jarroba

Conclusiones:

Las redes neuronales son un área muy chula de la inteligencia artificial ya que pretende ni más ni menos que imitar el comportamiento del cerebro humano. Al fin y al cabo lo que hacemos cuando nos creamos una red neuronal y la entrenamos, es crearnos un modelo que nos da una respuesta en función de la entrada que le demos. Si creamos con una red neuronal un modelo que nunca va a cambiar (por ejemplo un clasificador de animales) las redes neuronales son una buena solución, pero si por el contrario creamos un modelo que es cambiante a lo largo del tiempo (por ejemplo que prediga el comportamiento de la bolsa o que prediga el resultado de un partido de fútbol), las redes neuronales son una muy mala elección porque habría que estar siempre actualizando los modelos (entrenandolos) y muy probablemente habría que modificar la arquitectura de la red neuronal y volverla a entrenar.

Aunque en esta entrada se haya mostrado el funcionamiento de las redes neuronales y explicado sus conceptos, se ha de decir que existe mejores técnicas (como las del Machine Learning) que hacen lo mismo que las redes neuronales, por tanto es bueno que se sepa el funcionamiento se las redes neuronales para asentar conceptos, pero hay que decir que el perceptrón esta ya algo anticuado.

No se puede decir lo mismo para las redes de Kohonen (o mapas autoorganizados) que si que son una muy buena solución cuando se tiene que aplicar aprendizaje no supervisado, aunque estas redes presentan una arquitectura distinta a la explicada en esta entrada.

En resumen, enteraos de como funcionan las redes neuronales (y gastar algunas neuronas en ello que tenemos muchas 😉 ), pero aconsejo aprender técnicas de Machine Learning para resolver este tipo de problemas, que son técnicas mejores que estas.

Bibliografía

Parte de la información mostrada en esta entrada ha sido obtenida de las clases de la asignatura de "Redes de Neuronas y Aplicaciones" impartida en el Master de "Ciencias y Tecnologías de la Computación" en la Escuela Universitaria de Informática de la UPM por los profesores Antonio Hernando y Soledad Delgado.

Comparte esta entrada en:
Safe Creative #1401310112503
Introducción a las Redes Neuronales – El perceptrón- (Video) por "www.jarroba.com" esta bajo una licencia Creative Commons
Reconocimiento-NoComercial-CompartirIgual 3.0 Unported License.
Creado a partir de la obra en www.jarroba.com

11 thoughts on “Introducción a las Redes Neuronales – El perceptrón- (Video)”

  1. Diseñar un algoritmo (PSeInt) que permita emular una red
    neuronal que lleve a cabo la expresión lógica f(x,y,z)=(x + y) . z
    el profe dice que con Puerta OR de este contenido pero no entido como se podria hacer

  2. Hola, Yo solo pasaba a agredecer el trabajo que realizan. Me gusta mucho el hecho de que saquen de su tiempo para crear temas tan interesantes y asi ayudar a estudiantes y apasionados de la computacion en distitntas areas. Ya me baje el libro de Android que encontre por aca y espero tambien entra de lleno a IA apenas pueda.
    Muchas gracias, sigan con esto y un pura vida desde mi querida Costa Rica.
    Saludos 🙂 😀

  3. buen dia, gran aporte sobre redes neuronales, pero tengo una pregunta. si yo quisiera usar tu ejemplo del XOR de la manera como esta planteado y las salidas no son las deseadas, como logro modificar los pesos y las Bias ?  se emplea la funcion delta como un perceptron simple ??? si es asi de que manera ?  gracias  

  4. Hola Ricardo. Para hacer una neurona que simule un puerta AND, solo necesitas una neurona (ya que solo necesitas un solo plano). En esta entrada el ejemplo de una puerta AND con sus pesos ya calculados.
    Efectivamente, para hacer una buena simulación deberia inicializar los pesos de la conexiones de forma aleatoria luego ir ajustando los pesos, que lo suyo es que lo hagas con el «Backpropagation» que eso no lo he explicado en esta entrada, pero mira por ahi en que consiste para que puedas hacerlo. En el video del «Neuroph Studio» que hice puedes ver como lo hace, pero mira lo del backpropagation para ir ajustando los pesos.
    SL2

  5. buenas muchachos ustedes mi pregunta es como hacer una neurona perceptron con isis les agradeceria mucho que me ayudaran yo soy nuevo en este tema muchas gracias

      1. si en isis simulador de circuitos electricos, el profesor dijo que asi habian hecho la primera neurona perceptron por medio de circuitos electricos…
        mi pregunta es como lo hago con este simulador no entiendo muy bien como si me podrias ayudar te agradeciaria muchisimo yo soy nuevo en este tema muchas gracias por responder…

        1. Hola de nuevo Ricardo.
          Efectivamente la neurona de McCulloch-Pitts fue la primera neurona que se implemento en un circuito digital, pero más haya de eso no te aconsejaría que hicieses una red neuronal en un circuito digital, salvo que esa red la tengas bien entrenada, tengas los pesos de las conexiones bien definidos y demás.

          Por otro lado si la vas a implementar utiliza algún lenguaje de descripción hardware (Tipo VHDL) para implementar esta red y pásala a un CPLD o a una FPGA, pero creo que no deberías implementar una red neuronal en un dispositivo electrónico.

          Saludos

          1. buenas te agradesco por responderme mis inquietudes que pena contigo te tengo otra preguntica es que me pidieron implementar una neurona perceptron sencilla con compuerta AND en c o qt creator ya tengo la inicializacion de pesos que es aleatoria pero mi duda es como meto la logica de la compuerta AND sera mucha molestia que me ayudes en eso antemano te agradesco por tu atencion

  6. Felicitaciones, por tu loable labor, muy bien hecho. Me quito el sombrero.

    Muchas gracias de antemano, en verdad, de todo corazón. vivo en cali, pero mi hna es española y vive en madrid con su esposo y mis sobrinos.

    POr favor, cuando quiero ingresar a –> training set, despues de ingresar los valores 0,0, etc, APARECE DESACTIVADO EL BOTON, Y NO PUEDO SEGUIR. que debo hacer?

    Muchas gracias por todo. Bendiciones

    1. Hola Luis.
      Ahí lo que estas haciendo es meter los datos de entrenamiento para entrenar a la red. Sino te deja avanzar después de meter los datos es porque igual antes no te has dado cuenta y has seleccionado algo que no debías seleccionar o se te ha olvidado seleccionar algo. Es lo único que te puedo decir porque con los datos que me das no puedo decirte mucho más. Saludos

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies

ACEPTAR
Aviso de cookies