Redes neuronales para niños: explique lo más simple posible

Hola a todos. No es ningún secreto que casi todos los artículos de nuestro blog se publican para lanzar este o aquel curso. El siguiente artículo podría estar programado para el lanzamiento del curso "Redes neuronales en Python", pero dada la simplicidad del material, no quiero asociarlo con el curso, sino simplemente publicarlo como un material adicional, como un pequeño tutorial para los más pequeños. Predecir preguntas, quiero decir de inmediato que este artículo no está relacionado con el curso y no fue escrito por el profesor. Si desea obtener más información sobre el curso, puede hacerlo en la página correspondiente .




¡Hola a todos! Hoy quiero hablar sobre cómo están organizadas las redes neuronales, pero es tan simple que incluso los principiantes que solo dominan los conceptos básicos de Python pueden entender.

¿Qué son las redes neuronales y la inteligencia artificial en general?


En la filosofía de la IA, hay dos tipos de inteligencia artificial: fuerte y débil. La teoría de la inteligencia artificial fuerte sugiere que las computadoras pueden ganar la capacidad de pensar y ser conscientes de sí mismas como una persona separada (bueno, algo como lo que sucedió en Detroit Become Human). La teoría de la inteligencia artificial débil sugiere que tal intelecto no puede o es muy difícil de construir, y si bien la ciencia puede crear redes neuronales que solo repiten parcialmente el trabajo de las redes neuronales de las criaturas vivientes. Pero la filosofía simplemente no se aplica a la ciencia porque no se puede probar nada allí, por lo que no nos centraremos en esto. Las redes neuronales débiles ahora ocupan una posición dominante en Data Science y se usan ampliamente: en reconocimiento de imágenes visuales, compra inteligente de bienes,incluso el sistema OBS del vehículo, por lo que comenzar a aprender IA ahora es más que relevante.

¿Qué son las redes neuronales?


Las redes neuronales son modelos matemáticos del funcionamiento de redes neuronales reales de seres vivos. Es suficiente simplemente transferir el modelo matemático a un programa (y debido a esto, Python es muy utilizado en la programación de redes neuronales, muy conveniente para programar soluciones a problemas matemáticos. De hecho, las redes neuronales se pueden escribir en casi cualquier lenguaje de programación que admita cualquier tipo de matemática Incluso en Scratch, que fue creado originalmente para enseñar los conceptos básicos de programación para estudiantes más jóvenes. Puedes verlo aquí ).

Conceptos básicos de redes neuronales.


Existen muchos algoritmos para el funcionamiento de las redes neuronales (y ahora el lado matemático de este problema se está desarrollando activamente). La solución clásica para principiantes es el método de retropropagación, un método de cálculo de gradiente que se utiliza para actualizar los pesos de un perceptrón multicapa. En la forma en que generalmente lo estudian los principiantes (con una función de activación sigmoidea), la red neuronal es bastante lenta, pero relativamente precisa.

El programa que vamos a escribir se llama un gran tramo de la red neuronal.

Antes de continuar con su descripción, analicemos qué hacen las redes neuronales en general.

¿Qué están haciendo las redes neuronales, si están simplificadas?


Si simplificamos un poco el concepto de redes neuronales, entonces una red neuronal que se enseña de acuerdo con el principio de aprendizaje con un maestro, después de entrenarse en el principio de "estímulo - reacción", que indica las respuestas correctas, puede funcionar con extrañosdatos. En otras palabras, si propuso un cierto conjunto de palabras a la red neuronal de entrada (por ejemplo, un conjunto de críticas sobre búsqueda de películas, positivas y negativas, en cualquier formato, al menos txt, al menos json, la pregunta es solo en el programa para procesar estos datos). Para crear con éxito una red neuronal, necesitará dos conjuntos de datos: un conjunto de prueba con el que puede evaluar el rendimiento de la red neuronal creada y un conjunto de entrenamiento en el que los datos se etiquetan como positivos / negativos para ella (y aquí surge el problema de clasificar grandes datos porque es un largo y triste ocupación). Después de entrenar la red neuronal (que puede tomar mucho tiempo y recursos informáticos, dependiendo de la dimensionalidad de los datos, su procesamiento y, con mayor frecuencia, los algoritmos más importantes utilizados), podrá probarpara predecir con cierta precisión una opinión positiva o negativa llegó a su aportación. Pero las redes neuronales (así como una persona real) tienen un cierto porcentaje de error. La tarea de optimización es hacerla mínima, pero es probable que la cuestión de evaluar la calidad de las redes neuronales nunca llegue a ningún lado. Por ejemplo, te dan una foto de un hot dog y tú dices con seguridad que es un hot dog. Pero, ¿y si la foto está borrosa? ¿En blanco y negro? Filmado en poca visibilidad? Aquí ya puedes afirmar con solo un cierto grado de probabilidad, incluso si has preparado o comido muchos hot dogs en tu vida.



Comenzando a programar nuestra red neuronal de juguetes


OK vamos. No habrá datos de prueba y entrenamiento en nuestra red neuronal de juguete, nuestra red neuronal de juguete tratará de encontrar la relación de la relación entre cualquier información.

Detener. ¿Y cuál es el punto? Lo mismo se encuentra en una expresión matemática simple.
Sin duda. Sin embargo, ahora he tomado esta expresión para mostrar el proceso de aprendizaje de una red neuronal. Supongamos que nos enfrentamos a la tarea de descubrir cuál es el factor de conversión entre pulgadas y centímetros. ¿Cuántos centímetros dura una pulgada? Para una persona que conoce las matemáticas al menos en quinto grado (o incluso antes), no es difícil recordar qué coeficiente de traducción es 2.54.

Pero por ahora, lo olvidaremos por un tiempo e imaginaremos que necesitamos crear un algoritmo simple que calcule universalmente este parámetro. Sin embargo, el problema también es que las redes neuronales no son constantes con valores de coeficientes ya preparados, de lo contrario no tendrían entrenamiento "en vivo".

En total, estamos en la posición de un niño que simplemente se sentó frente a un conjunto de cubos y los tomará en sus propias manos por primera vez y construirá la primera torreta en su vida. Solo sabe aproximadamente cómo funciona la física de los objetos; él, al igual que nosotros, sabe que existe una cierta relación específica (en su caso, es la gravedad). Entonces, ¿qué hará el niño?

Él tomará y al azar pondrá algunos dados. Del mismo modo, solo podemos adivinar al azar qué coeficiente tendremos (y las redes neuronales adultas reales también lo hacen, solo generalmente guiadas por la generación de números en una distribución normal).
Solo al azar, suponga que el coeficiente de acoplamiento de pulgadas y centímetros (empecemos a llamarlo peso , como en las redes neuronales adultas) será, por ejemplo, 2.4. Luego obtenemos la expresión matemática más complicada:

1 * 2.4 = 2.4

Genial, casi lo adivinamos, y tenemos algún resultado. Pero es incorrecto, y lo que es normal para el proceso de aprendizaje, tenemos algún error. Al igual que en el sistema nervioso con retroalimentación, debemos responder de alguna manera al error. Pero primero debes entender su tamaño. Como ya he dicho, al entrenar redes neuronales con un maestro, los datos se ejecutan primero en datos marcados y solo luego se envían a la clasificación para datos similares, pero no marcados. También sabemos de qué debemos obtener el resultado correcto, en consecuencia, puedo calcular el error:

t_target = 2.54
t_now = 2.40
e = t_target - t_now
//  ,   0.14

Ahora sabemos lo mal. ¿Pero qué hacer? Naturalmente, nuestra red neuronal de juguetes debería leer los datos lo más bajo posible. Y en esto, se manifiesta otra característica subacuática de las redes neuronales: la mayoría de las veces tienen algún factor de pérdida durante el entrenamiento, la parte de Data Science, llamada optimización , se dedica a minimizar el error .

Pero ahora no se trata de eso. Sin lugar a dudas, debemos comenzar a cambiar el coeficiente de acoplamiento en algún paso, pero ¿por qué? Obviamente, no necesita ser demasiado grande, de lo contrario nuestro coeficiente de acoplamiento resultará ser inexacto y no demasiado pequeño, de lo contrario tendremos que entrenar la red neuronal durante un tiempo bastante largo. No hay una opción 100% correcta para encontrar este paso, la mayoría de las veces estos parámetros en una red neuronal real se seleccionan de manera más intuitiva que en base a alguna fórmula o algoritmo (aunque esto también es posible). Ahora podemos seleccionar aleatoriamente el valor de nuestro paso (en el lenguaje de las redes neuronales, nuestro paso se llama tasa de aprendizaje), por ejemplo, el valor 0.05 funcionará de manera óptima. Además, debe acordar cuántas veces se producirá la sangría al ritmo de aprendizaje .. El número de estas sangrías se denominará épocas, como en las redes neuronales de adultos. Ahora, armado con todo este conocimiento, puede intentar escribir un pequeño programa de Python que ejecute nuestro programa de red neuronal de juguete.

import random

#    Python  random,        

inches = 40  #    40    101, 6 
centimetre = 101.6

#  ,        , learning rate  

def kid_neuro(epoch, lr, accur):
    W_coef = random.uniform(0, 2)  #     
    print("    : ", W_coef)
    for i in range(epoch):  #    
        Error = centimetre - (inches * W_coef)
        print("  ", Error)  #      
        if Error > 0:
            W_coef += lr  #    ,    

        if Error < 0:
            W_coef -= lr  #   ,    

        if Error < accur:
            print("  ", W_coef)
            return  #  ,      

epoch = int(input("epoch: "))  #      ""
lr = float(input("enter learning rate: "))  #   
accur = float(input("enter accurancy:  "))  #   ,     ,         

kid_neuro(epoch, lr, accur)  #    -

Dejo que el lector intente ejecutar la red neuronal de este niño con varios parámetros por sí mismo. Resulta bastante bien en época = 100-, tasa de aprendizaje = 0.01, accur = 0.1.

A pesar de la aparente inutilidad de este programa, hemos discutido con usted el trabajo y los conceptos básicos de las redes neuronales, que también se utilizan en la construcción de redes neuronales realmente grandes, por ejemplo, en el algoritmo de retroproyección.

Brevemente, estos conceptos básicos:

  • W — . - , . — , ,
  • lr — learning rate, .
  • epoch ,

Como práctica, puede intentar escribir la red neuronal de sus propios hijos, que traducirá, por ejemplo, kilómetros a millas. Y armado con el conocimiento adquirido en este artículo, puede venir fácilmente aquí , por ejemplo , y ya tratar de iniciar la red neuronal de manera más significativa.

Algunos enlaces útiles a los que puede acceder si desea continuar aprendiendo sobre redes neuronales:


All Articles