¿Puede una red neuronal aprender suma?

Para manejar este problema, primero debe definir o aprender qué quiere decir con suma. Por ejemplo, [matemáticas] 2? 2 = 4 [/ matemáticas], ¿Es eso una suma o multiplicación? Sin embargo, si da una serie de dos entradas como

[matemáticas] 2? 1 = 3, [/ matemáticas]

[matemáticas] 2? 2 = 4, [/ matemáticas]

[matemáticas] 2? 3 = 5, [/ matemáticas]

y luego preguntar qué es

[matemáticas] 2? 20000 = x [/ matemáticas]

Lo más probable es que su clasificador lo aprenda como un problema de regresión y prediga el valor de ‘x’ con bastante facilidad. Hay varias bibliotecas de redes neuronales que admiten la regresión con redes neuronales, como a continuación

  • Uso de redes neuronales con regresión – Java
  • Usando la red neuronal para la regresión – R
  • sklearn.neural_network.MLPRegressor – scikit-learn 0.18.1 documentation- python

Desde estas bibliotecas, puede aprender a especificar su red MLP. El problema con este enfoque es que puedes aprender a sumar dos, tres o X números a la vez. Por ejemplo, dado un modelo entrenado en la serie anterior, si pregunto qué es [matemáticas] 2? 2? 2 [/ math], el modelo anterior fallará porque ha aprendido a encontrar una relación de regresión entre dos números y no tres. Por lo tanto, es imposible aprender todas las combinaciones posibles de números para sumar porque hay infinitas formas de sumar números infinitos en un momento dado. Por lo tanto, esta estrategia es un caso limitante del problema más general de la suma.

Un enfoque alternativo sería aprender el símbolo de ‘suma’, en lugar de proporcionar números como entrada y tratarlo como un problema de regresión. En este enfoque, tratará de aprender a identificar dígitos y símbolos (juntos o por separado). Las siguientes son algunas de las variaciones del símbolo de suma que puede desear aprender usando un clasificador.

Sin embargo, el símbolo de suma es arbitrario, por lo que aprender el símbolo correcto es la clave. Si puede entrenar una red, de modo que, dada cualquier entrada, puede identificar el símbolo (o los dígitos) correctamente y luego agregar cualquier combinación de cualquier entrada numérica es sencillo. Puede usar cualquier paquete ML estándar para aprender el símbolo de adición (como una imagen) o los caracteres y ver cómo funciona para este problema.

Seguro. ¿Considerarías esto una red neuronal?

Es la red neuronal más simple que existe, un perceptrón, sin capas ocultas y la función de identidad f (x) = x como función de activación. Realmente es solo una regresión lineal disfrazada.

Siempre que pase valores vacíos como 0, esta red puede aprender cómo agregar un número arbitrario de valores hasta N al encontrar un vector de peso W de longitud N que contenga todos los 1.

Por supuesto, las redes más complejas también podrían aprender a sumar, pero la regresión lineal ya es exagerada para esta tarea.

Creo que los humanos podemos hacer adiciones (y cualquier otra operación matemática) de dos maneras diferentes: aproximadas y simbólicas.

Podemos dar una respuesta aproximada usando la intuición, es decir, un enfoque típico de NN, que nos da un resultado aproximado basado en variables de entrada continua. Por ejemplo: podemos decir que la longitud de un objeto es igual a la suma de las longitudes de otros dos objetos; podemos evaluar qué tan distante está un punto en el espacio y decidir si está lo suficientemente cerca como para saltar a él.

Luego está el enfoque simbólico, el que aprendimos en la escuela. Esto es básicamente un algoritmo traducido en un conjunto de pesos sinápticos que tienen que codificar una secuencia de pasos discretos. Los números de entrada ya no son variables continuas simples, sino conjuntos discretos de dígitos simbólicos. Para aprender este enfoque, los humanos tenemos que seguir un conjunto de pasos (llamado educación) que nos permite tener los fundamentos sobre los cuales podemos representar conceptos simbólicos abstractos.

El hecho de que hasta ahora ningún bebé recién nacido, incluso si ha sido entrenado adecuadamente, haya podido calcular sumas simbólicamente puede indicar que es mejor adquirir el conocimiento de una manera gradual y estructurada. Esto puede ser una buena pista para saber quién necesita entrenar redes neuronales artificiales …

Absolutamente !!

Desea que una red neuronal represente la función de suma [matemática] f \ izquierda (x_ {1}, x_ {2} \ derecha) = x_ {1} + x_ {2} [/ matemática], ¿verdad?

Aquí hay una arquitectura NN (usando la activación ReLU donde la salida es el máximo de entrada y cero):

con el conjunto asociado de pesos óptimos (que su modelo aprenderá minimizando, por ejemplo, un costo de mínimos cuadrados): [matemática] \ left (w_ {1} ^ {\ star}, w_ {2} ^ {\ star}, w_ {3} ^ {\ star}, w_ {4} ^ {\ star}, w_ {5} ^ {\ star}, w_ {6} ^ {\ star} \ right) = \ left (+ 1, -1 , + 1, -1, + 1, -1 \ derecha) [/ matemáticas]

Nota: estoy usando la activación no lineal aquí. El problema es trivial con la activación lineal.

Si restringe su entrada a un rango dinámico pequeño (por ejemplo, 0.01 a 100), es bastante fácil. Las redes neuronales son sistemas inherentemente lineales, y los sistemas lineales se basan en adiciones (con escalares en cada entrada).

Sin embargo, las multiplicaciones son mucho más difíciles.

Sí puede. Ni siquiera necesita una red neuronal, un simple perceptrón (regresión lineal) podría hacerlo. No necesita tantos datos de entrenamiento, solo depende de su tasa de aprendizaje, necesita ajustar la cantidad de épocas.

Escribí una respuesta relacionada con esto: si enseñamos a un programa de aprendizaje automático cómo realizar operaciones aritméticas, ¿sería más rápido o más lento que los humanos?

Puede argumentar que no responde esa pregunta o su pregunta, pero en mi opinión sí :).

Creo que probablemente podría obtener una máquina Neural Turing – Wikipedia o una computadora neural diferenciable – Wikipedia para aprender además

(Supongo que esa pregunta es si es capaz de aprender una suma similar a cómo lo hacen los humanos, para un rango indefinido de valores y un número indefinido de entradas. Porque de lo contrario la tarea sería demasiado fácil para una red neuronal).

Creo que debería ser posible con un enfoque de aprendizaje por refuerzo. Los humanos memorizamos los resultados de las sumas para números de un solo dígito. Y combinamos esto con algunas otras operaciones para poder agregar valores de longitud arbitraria. Entonces, cuando define todas estas acciones en una configuración de refuerzo, no veo ninguna razón por la que no pueda aprender las mismas estrategias que estamos utilizando.

En realidad no. La adición y multiplicación de dos números de longitud arbitraria no es fácil en este momento.

Sin embargo, los programadores neuronales son muy cercanos y es probable que lleguen pronto.

Sí, con el conjunto de datos apropiado puede entrenar una red neuronal que puede agregar dos o más números.