ELI5: ¿Qué son las redes neuronales?

Incluí tres niveles de abstracción (ELI5, ELI15 y ELI20). Omití ELI10 porque un niño de diez años no tendría un conocimiento mucho más relevante que uno de cinco años, por lo que cuando hice la sección ELI10 se parecía casi exactamente a la sección ELI5 pero más conciso.

ELI5 :

Un programa normal es algo que toma una entrada y escupe una salida. El programador es la persona que controla cómo la computadora toma entradas y las convierte en la salida que desean. Por ejemplo, digamos que quiero hacer un programa que tome cualquier número entero como entrada. Luego, digamos que quiero que muestre la suma de los números enteros del 1 a ese número. Entonces, si la entrada era 10, el programa generaría 1 + 2 + 3 + .. + 8 + 9 + 10, que es 55.

Si hiciera ese programa, tendría que decirle a la computadora exactamente lo que quiero que haga con la entrada para obtener la salida. ¿Qué pasaría si la computadora pudiera aprender cómo pasar de la entrada a la salida solo de un montón de ejemplos?

Digamos que queríamos hacer el mismo programa, pero que la computadora aprenda. La computadora comenzaría adivinando cómo manejar las entradas con una fórmula básica (incorrecta). Podría tomar la entrada y escupirla inmediatamente como salida. Así que le damos algunos ejemplos de entradas y en qué deberían convertirse como salidas. Le diríamos que 10 va a 55, 3 va a 6 (1 + 2 + 3 = 6), 7 va a 28 (1 + 2 +… + 6 + 7 = 28), y seguimos alimentándolo con ejemplos como ese. Con cada ejemplo que le demos, la computadora ajustará su fórmula.

Digamos que lo alimentamos con treinta ejemplos en total. Ahora, probamos qué tan buena es la fórmula de la computadora. Ingresamos el número 1000 y vemos lo que sale de la computadora. Con suerte, su fórmula se ajustará al punto que nos da algo cercano a 1 + 2 + … + 999 + 1000 (que es 500500). En realidad, podría darnos algo como 500453, porque su fórmula no es perfecta, pero esa es la idea básica detrás de una red neuronal . En lugar de que el programador decida cómo las entradas van a las salidas, el programador simplemente configura un sistema para que la computadora aprenda, y la computadora descubre cómo las entradas van a las salidas por sí mismas.

ELI15 :

Un programa es cualquier cosa que toma entradas y escupe salidas. Un programador le dice a una computadora qué hacer con la entrada para obtener una salida. Digamos que quería hacer un programa que tome cualquier número como entrada, y escupe ese número al cuadrado como salida. Entonces, una entrada de 10 daría una salida de 100, una entrada de 3 daría una salida de 9, y así sucesivamente.

Hacer un programa así no sería difícil. Simplemente le decimos a la computadora que multiplique la entrada por sí misma y luego envíe el número resultante. ¿Qué tal si tratamos de hacer un programa donde la computadora descubra cómo cuadrar un número, simplemente dándole un montón de ejemplos de un número y su cuadrado (por ejemplo, diciéndole que 4 va a 16, 7 a 49, 9 a 81, etc.)?

Para hacer esto, podríamos enseñarle a la computadora cómo aprender usando algo llamado red neuronal . Sabemos que solo tenemos una entrada (algún número) y una salida (ese número al cuadrado). Podríamos enviar esa entrada a tres nodos diferentes, que llamaremos neuronas . Lo que quiero decir cuando digo que “enviamos” la entrada a estos nodos es que la multiplicaremos por algo de peso, que es cualquier número de 0 a 1, y lo pondremos a través de alguna función (esto se llama una “función de activación “).

Primero debemos escalar las entradas y salidas para que oscilen entre 0 y 1 (podemos hacerlo dividiéndolos por su valor máximo. En nuestro caso, podemos decir que no trabajaremos con números superiores a 40). Por ejemplo, llamemos a la entrada escalada [math] x [/ math]. Ahora, supongamos que la activación de nuestra función es la función sigmoidea (es decir, [matemática] f (x) = \ dfrac {1} {1 + e ^ {- x}} [/ matemática]). Ahora, digamos que los pesos correspondientes para nuestros tres nodos son [matemática] .6 [/ matemática], [matemática] .4 [/ matemática] y [matemática] .9 [/ matemática]. Como multiplicamos por el peso y luego lo enviamos a través de la función de activación, eso significa que el valor en el Nodo 1 sería [math] n_1 = \ dfrac {1} {1 + e ^ {- (. 6x)}} [/ math ], el valor en el Nodo 2 sería [matemática] n_2 = \ dfrac {1} {1 + e ^ {- (. 4x)}} [/ matemática], y el valor en el Nodo 3 sería [matemática] n_3 = \ dfrac {1} {1 + e ^ {- (. 9x)}} [/ math].

Ahora tenemos tres nodos con tres valores diferentes. Imagine que estos tres nodos se multiplican por algo de peso, y luego se agregan para producir la salida. Digamos que estos tres pesos son [matemática] .7 [/ matemática], [matemática] .8 [/ matemática] y [matemática] .1 [/ matemática], respectivamente. Por lo tanto, la salida escalada (llamaremos a [math] y [/ math]) sería [math] y = .7n_1 + .8n_2 + .1n_3 = \ dfrac {.7} {1 + e ^ {- (. 6x)}} + \ dfrac {.8} {1 + e ^ {- (. 4x)}} + \ dfrac {.1} {1 + e ^ {- (. 9x)}} [/ math]. Después de obtener ese valor [math] y [/ math], lo escalaremos nuevamente a su tamaño adecuado y lo tomaremos como la salida de nuestro programa.

Todos los pesos con los que comenzamos son aleatorios, por lo que el programa esencialmente generará tonterías en este momento. Podemos alimentarlo con ejemplos de un número y su cuadrado (por ejemplo, diciéndole que 4 va a 16, 7 a 49, 9 a 81, etc.) y el programa ajustará los pesos en consecuencia, hasta que finalmente tenga una buena fórmula. Luego, podemos agregar algún valor, como 39, y esperamos que produzca 1521. Probablemente, dado que la fórmula probablemente no sea perfecta, generará algo bastante cercano.

Entonces, en lugar de que un programador decida cómo convertir las entradas en salidas, el programador configuró un sistema para que la computadora aprenda y le dio varios ejemplos, y la computadora descubrió una fórmula para convertir las entradas en salidas por sí misma.

ELI20 :

Nota: este es en su mayoría el mismo que el ELI15, solo amplío el concepto de “ajustar pesos”, así que léalo primero.

… y el programa ajustará los pesos en consecuencia, hasta que finalmente tenga una buena fórmula. Necesitaremos un poco de cálculo para que haga esto. Sabemos que la red neuronal está creando una salida basada en la entrada y los valores de algunos pesos. Siempre que le demos un ejemplo de un número y su cuadrado, el programa puede medir la diferencia entre la salida calculada y la salida real. Por ejemplo, supongamos que le damos el ejemplo de que una entrada de 3 debería dar como resultado una salida de 9. Si ejecutamos 3 a través de la fórmula que tiene actualmente la computadora, digamos que genera 7.4. Por lo tanto, tiene un error de [matemáticas] 9–7.4 = 1.6 [/ matemáticas].

Podemos escribir fácilmente el error en función de las mismas variables, simplemente escribiéndolo como [math] y_ {correct} – \ left (\ dfrac {.7} {1 + e ^ {- (. 6x)}} + \ dfrac {.8} {1 + e ^ {- (. 4x)}} + \ dfrac {.1} {1 + e ^ {- (. 9x)}} \ right) [/ math]. Podemos llamar a esto nuestra “función de error”. Hay seis pesos en esta ecuación. Podemos reescribir la función general en términos de esos pesos como [matemática] y_ {correcto} – \ left (\ dfrac {w_ {21}} {1 + e ^ {- (w_ {11} x)}} + \ dfrac {w_ {22}} {1 + e ^ {- (w_ {12} x)}} + \ dfrac {w_ {23}} {1 + e ^ {- (w_ {13} x)}} \ right) [/matemáticas]. Para cada peso, podemos tomar la derivada de la función de error con respecto a ese peso.

Queremos disminuir la función de error, ya que cuanto más cercano es el error a cero, más cerca estamos de crear una fórmula precisa (existe el problema de tener una fórmula que sea demasiado precisa, ya que esto se llama sobreajuste y generalmente no se desea , pero no voy a dar más detalles sobre eso aquí). Si la derivada es positiva, eso significa que el error aumentaría a medida que aumentamos ese peso, por lo que significa que deberíamos disminuir ese peso. Por el contrario, si la derivada es negativa, eso significa que el error aumentará a medida que disminuimos ese peso en particular, por lo que deberíamos aumentar el valor de ese peso para que disminuya la función de error. Si hacemos esto a todos los pesos, el error debería disminuir. Repetimos este proceso con cada nuevo ejemplo que obtenemos, y la fórmula de la computadora se vuelve más precisa.

Entonces podemos agregar algún valor …

More Interesting

En finanzas cuantitativas, ¿hay alguna analogía entre la optimización de la cartera y el análisis de componentes principales?

¿Cuál es la diferencia entre clasificación (binaria y multiclase), regresión y agrupamiento?

¿Cómo comenzaría con el cambio de funciones o el desarrollo de indicadores de funciones en mi empresa? Actualmente utilizamos ramificaciones.

Cómo entrenar una red neuronal con grandes datos

¿Cuál es la diferencia entre extracción de información y recuperación de información?

¿Se pueden usar los árboles de decisión para encontrar atributos de variables latentes de una muestra?

¿Por qué el clasificador Bayes Network funciona tan bien como SVM con menos funciones que las que se usan con SVM?

¿A quién demuestra que los núcleos radiales son núcleos válidos? ¿Cómo se muestra esto mediante la integración de características?

Si hay investigaciones que muestran que una máquina interactúa con un humano dentro de la realidad a través de una conciencia cuántica, ¿cómo se recibirá?

¿El uso de memoria aumenta a medida que aumentan los datos de entrenamiento en redes neuronales profundas?

¿Cómo se relaciona el concepto de simetría con la agrupación?

¿Cómo se utiliza el aprendizaje automático en el análisis de sentimientos?

He completado la clase Coursera de Andrew Ng sobre aprendizaje automático. ¿Qué debería hacer después? ¿Qué puedo hacer a continuación?

¿Pueden los métodos de aprendizaje profundo ser útiles para el seguimiento de múltiples objetos en una multitud?

¿Qué son los datos no paramétricos?