Cómo escribir una red neuronal simple con 9 líneas de código Python
Al aprender inteligencia artificial, me propuse un objetivo: escribir una red neuronal simple en Python. Para asegurarme de entenderlo realmente, me pedí no utilizar ninguna biblioteca de redes neuronales y escribirla desde cero. Gracias a una maravillosa publicación de blog de Andrew Trask, ¡lo logré! Esas nueve líneas de código se publican a continuación:
En esta publicación, explicaré cómo lo hice para que puedas escribir el tuyo propio. Proporcionaré un código fuente más largo pero más completo.
En primer lugar, ¿qué es una red neuronal? El cerebro humano está formado por cientos de miles de millones de células (neuronas) interconectadas por sinapsis. Una excitación suficiente de la sinapsis hará que la neurona se excite. Este proceso se llama "pensar".
Podemos escribir una red neuronal en el ordenador para simular este proceso. No es necesario simular el cerebro humano a nivel biomolecular, sólo reglas de nivel superior. Usamos la herramienta matemática de una matriz (una tabla de datos bidimensional) y, por simplicidad, solo simulamos una neurona con 3 entradas y una salida.
Entrenaremos neuronas para resolver el siguiente problema. Los primeros cuatro ejemplos se denominan conjunto de entrenamiento. ¿Has descubierto el patrón? '? '¿Es 0 o 1?
Es posible que hayas notado que la salida siempre es igual al valor en la columna más a la izquierda de la entrada. entonces'? ' debería ser 1.
Proceso de entrenamiento
Pero ¿cómo hacer para que nuestras neuronas respondan correctamente? Asigne un peso a cada entrada, que puede ser un número positivo o negativo. La entrada con mayor peso positivo (o negativo) determinará la salida de la neurona. Primero establezca el valor inicial de cada peso en un número aleatorio y luego comience el proceso de entrenamiento:
Tome la entrada de una muestra de entrenamiento, ajústela usando los pesos y calcule la salida de la neurona a través de un fórmula especial.
Calcule el error, que es la diferencia entre la salida de la neurona y la salida esperada en la muestra de entrenamiento.
Ajusta ligeramente el peso según el error.
Repite este proceso 10.000 veces.
El peso final será una solución óptima acorde con el conjunto de entrenamiento. Si considera una nueva situación de este patrón utilizando neuronas, obtendrá una gran predicción.
Este proceso es de propagación hacia atrás.
La fórmula para calcular la salida de una neurona
Quizás estés pensando, ¿cuál es la fórmula para calcular la salida de una neurona? Primero, calcule la suma ponderada de las entradas de las neuronas, es decir,
y luego normalícela, de modo que el resultado esté entre 0 y 1. Para ello se utiliza una función matemática: la función sigmoidea:
La gráfica de la función sigmoidea es una curva en forma de "S".
Sustituyendo la primera ecuación en la segunda, la fórmula final para calcular la salida de la neurona es:
Es posible que hayas notado que, en aras de la simplicidad, no introdujimos una excitación mínima. límite.
Fórmula de ajuste de pesas
Ajustamos las pesas continuamente durante el entrenamiento. ¿Pero cómo adaptarse? Puedes utilizar la fórmula "Derivada ponderada por error":
¿Por qué utilizar esta fórmula? Primero, queremos hacer el ajuste proporcional al tamaño del error. En segundo lugar, multiplique la entrada (0 o 1); si la entrada es 0, los pesos no se ajustarán. Finalmente, multiplique por la pendiente de la curva sigmoidea (Figura 4). Para entender esto último, considere lo siguiente:
Usamos una curva sigmoidea para calcular la salida de una neurona
Si la salida es un número positivo (o negativo) grande, significa que la neurona toma de esta (u otra) manera
Como se puede ver en la Figura 4, en valores mayores, la pendiente de la curva sigmoidea es pequeña
Si la neurona piensa que la El peso actual es correcto, no se ajustará mucho.
Esto se puede lograr multiplicando la pendiente de la curva sigmoidea.
La pendiente de la curva sigmoidea se puede obtener por derivación:
Coloque la segunda ecuación en la primera ecuación para obtener el ajuste. Fórmula final para los pesos:
Por supuesto que existen otras fórmulas que pueden hacer que las neuronas aprendan más rápido, pero esta fórmula tiene la ventaja de ser muy sencilla.
Construcción de código Python
Aunque no utilizamos la biblioteca de redes neuronales, importaremos cuatro métodos en la biblioteca matemática de Python numpy. Son:
exp——exponente natural
matriz——crear matriz
punto——realizar multiplicación de matrices
aleatorio—— Generar números aleatorios
Por ejemplo, podemos usar el método array() para representar el conjunto de entrenamiento mostrado anteriormente:
El método ".T" se usa para transponer la matriz (filas cambiar columnas). Entonces, la computadora almacena números como este:
Creo que podemos comenzar a construir un código fuente más hermoso. Después de dar este código fuente, haré un resumen.
He añadido comentarios a cada línea de código fuente para explicarlo todo. Tenga en cuenta que en cada iteración, procesamos todos los datos del conjunto de entrenamiento simultáneamente. Entonces las variables son todas matrices (tablas de datos bidimensionales). A continuación se muestra un código de ejemplo completo escrito en Python.
¡Lo logramos! ¡Construimos una red neuronal simple en Python!
Primero, la red neuronal se asigna pesos aleatorios y luego se entrena utilizando el conjunto de entrenamiento. A continuación, considera una nueva situación [1, 0, 0] y predice 0,99993704. La respuesta correcta es 1. ¡Muy cerca!
Los programas informáticos tradicionales normalmente no aprenden. Qué sorprendente es que las redes neuronales puedan aprender, adaptarse y responder a nuevas situaciones por sí solas, al igual que los humanos.