En este artículo revisaremos como crear una red neuronal con Python, partiendo desde la definición hasta el programa para ejecutar una red neuronal básica.

Primero, ¿Que es una red neuronal? El cerebro humano consiste en 100 billones de células llamadas neuronas, conectadas entre ellas mediante sinapsis. Si hay suficientes sinapsis de entrada, la neurona también funcionara. A este proceso lo denominamos “pensar”

Este proceso se puede modelar creando una red neuronal en la computadora. No es necesario modelar la complejidad biológica de la neurona, solo modelar las reglas a un alto nivel. Se utilizan matrices, que son representados por una grilla de números. Para hacerlo simple, se modelara una neurona simple con tres entradas y una salida.

Se va a entrenar a la neurona para resolver el problema que se presenta líneas abajo. Los primeros cuatro ejemplos son denominados el set de entrenamiento. El resultado, de acuerdo al problema, debería ser “0” o “1”.

Proceso de Entrenamiento

¿Cómo enseñaremos a nuestra neurona a responder correctamente? Le daremos a cada entrada un peso, que puede ser un número positivo o negativo. Una entrada con un gran peso positivo o un gran peso negativo, tendrá un fuerte efecto en la salida de la neurona. Antes de empezar, estableceremos cada peso como un número aleatorio. Luego empezaremos el proceso de entrenamiento:

  1. Tomar las entradas de los valores de entrenamientos, ajustar por los pesos y pasarlas a través de una formula para calcular la salida de las neuronas.
  2. Calcular el error, que es la diferencia entre la salida de la neurona y la salida deseada en el ejemplo del conjunto de entrenamiento.
  3. Dependiendo de la dirección del error, ajuste los pesos ligeramente
  4. Repetir este proceso 10 mil veces.

Eventualmente, los pesos de la neurona alcanzarán un óptimo para el conjunto de entrenamiento. Luego, si permitimos que la neurona piense en una nueva situación, que siga el mismo patrón, debería hacer una buena predicción. Este proceso se llama propagación.

Formula para calcular la salida de la neurona

Quizás se pregunte, ¿Cuál es la formula especial para calcular la salida de la neurona?. Primero tomamos la suma ponderada de las entradas de la neurona, que es:

A continuación normalizamos la entrada, considerando que tenemos un resultado que se encuentra entre 0 y 1. Para esto seleccionamos una función matemática conveniente, denominada función Sigmoid:

Si se sustituye la primera ecuación en la segunda, la formula final de la neurona sería:

Formula para ajustar los pesos

Durante el ciclo de entrenamiento es cuando se ajustan los pesos. Pero, ¿Cuanto debemos ajustar los pesos?. Podemos utilizar la formula “Derivada ponderada del error”.

¿Por que esta formula? Primero, se requiere que el ajuste sea proporcional al tamaño del error. En segundo lugar, se multiplica por la entrada que es un 0 o un 1. Si la entrada es 0, el peso no se ajusta. Finalmente, multiplicamos por el gradiente de la curva de la función Sigmoid. Para comprender esto último, considere:

  1. Utilizamos la curva de la función Sigmoid para calcular la salida de la neurona.
  2. Si la salida es un número grande, positivo o negativo, esto significa que la neurona esta bastante segura para un lado o para el otro.
  3. La función Sigmoid tiene un gradiente que tiende a cero para números grandes
  4. Si la neurona confía en que el peso existente es correcto, no va a querer sobre ajustarlo. Multiplicando por el gradiente de la curva sigmoid se logra esto.

El gradiente de la curva Sigmoid se puede obtener de la derivada de la función:

Reemplazando la primera ecuación en la segunda, la formula final para el ajuste de los pesos es:

Hay otras formulas alternativas, que permiten a la neurona aprender más rápido, pero la ventaja de esta formula es que es sencilla de implementar.

Construyendo el código Python

Aunque no utilizaremos una biblioteca de redes neuronales, importaremos cuatro métodos de la librería NumPy de Python, estas son:

  • exp: la función exponencial
  • array: permite crear matrices
  • dot: multiplica matrices
  • random: proporciona números aleatorios

Por ejemplo, se puede utilizar el método array() para representar el set de entrenamiento:

La función “.T”, transpone la matriz de horizontal a vertical.

Entonces, estamos listos para el código fuente. Se han agregado comentarios al código fuente para explicar línea a línea el mismo. Tenga en cuenta que en cada iteración se procesa todo el conjunto de entrenamiento en forma simultanea.

El código también esta disponible en github.

Ejecutar la red neuronal y observar los resultados:

De esta forma, hemos construido una red neuronal simple con Python.

Nota:

En el ejemplo se esta utilizando la función “xrange“, esto funciona para Python 2, si esta utilizando Python 3, se debe cambiar por “range“.

Se debe tener en cuenta que se esta utilizando la librería “numpy“, esta debe ser agregada a nuestro programa.


Este ejemplo se encuentra en base a How to build a simple neural network in 9 lines of Python code.

Python: ¿Cómo construir una red neuronal simple?
Si te gusto, comparte ...Email this to someone
email
Share on Facebook
Facebook
Tweet about this on Twitter
Twitter
Share on LinkedIn
Linkedin
Share on Google+
Google+
Etiquetado en:        

Deja un comentario

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

Facebook
A %d blogueros les gusta esto: