Cómo entrenar una red neuronal que aprende una operación de mapeo particular

Creo que primero es importante entender por qué y cuándo utilizamos las redes neuronales. Considere el problema de ordenar una lista de números. ¿Existe un algoritmo o un conjunto de reglas que podamos usar para resolver el problema de clasificación? Si seguro. Por ejemplo, podemos usar el ordenamiento de burbujas para ordenar una lista de números. No importa qué lista de números se nos dé (que es una entrada), podemos escribir un programa usando un conjunto de reglas para encontrar la lista ordenada (que es la salida). Sin embargo, tenga en cuenta que no requerimos ningún ingrediente (aparte de la entrada y un conjunto de reglas) para resolver este problema. Ahora, considere el problema de reconocer los dígitos escritos a mano en una imagen. ¿Existe un conjunto de reglas o algoritmo para realizar esta tarea? En otras palabras, ¿podemos escribir un programa que tome solo una imagen de un dígito escrito a mano y devuelva el dígito reconocido como salida? ¿Es posible enumerar / hacer reglas que nos ayuden a realizar esta tarea? Bueno, la respuesta es que es demasiado difícil para nosotros resolver tal problema usando un enfoque determinista (como el que usamos para ordenar una lista de números). Piénselo: ¿cómo podemos escribir un programa / lista de reglas para reconocer el dígito [matemático] 8 [/ matemático] en una imagen? No es fácil. Existen varios factores, como las condiciones de iluminación, los diferentes estilos y formas de escribir el dígito [matemática] 8 [/ matemática], etc. En esos casos, donde no es posible resolver un problema utilizando el enfoque determinista, empleamos el método de aprender de los datos . En otras palabras, usamos datos (que contienen dígitos escritos a mano junto con las etiquetas correctas) para resolver nuestro problema. Observamos cómo las imágenes en los datos se asignan a los dígitos, y luego usamos esa información para asignar nuestro nuevo dígito escrito a mano a uno de los dígitos. Más formalmente, si [math] \ mathcal {X} [/ math] es el conjunto de imágenes escritas a mano y [math] \ mathcal {Y} [/ math] es el conjunto de dígitos, entonces necesitamos aprender un mapeo [math ] f: \ mathcal {X} \ to \ mathcal {Y} [/ math]. Como se indicó anteriormente, en este caso, es demasiado difícil evaluar [math] f (x) [/ math] para [math] x \ in \ mathcal {X} [/ math]. Más precisamente, la función [matemática] f [/ matemática] es desconocida (si se conocía [matemática] f [/ matemática], o más precisamente, si supiéramos cómo encontrar [matemática] f (x) [/ matemática], entonces no hay nada de qué preocuparse; hemos terminado con la clasificación de dígitos escritos a mano). Queremos usar los datos [math] \ mathcal {D} [/ math] para estimar una función [math] g [/ math] que se aproxima a la función desconocida [math] f [/ math]. Por ejemplo, uno puede usar una red neuronal para aprender dicha función [matemáticas] g [/ matemáticas].

Ahora, la pregunta es, ¿cómo entreno una red neuronal que aprende una operación de mapeo particular?

Primero, sea lo que sea que aprenda la red neuronal, es una función (es extraño decir función ‘matemática’ o función ‘no matemática’).

Interpretaré tu pregunta de dos maneras. Primero, probablemente esté diciendo que conoce una función [matemática] h: \ mathbb {X} \ to \ mathbb {Y} [/ matemática], es decir, conoce [matemática] h (x) [/ matemática] para cada [math] x \ in \ mathbb {X} [/ math], y preguntando cómo aprender dicha función usando una red neuronal. Si sabes lo que es [matemáticas] h [/ matemáticas], entonces no tiene sentido aprender [matemáticas] h [/ matemáticas].

En segundo lugar, lo que creo que es más probable, es posible que haya oído hablar de una red neuronal de una sola capa que podría aproximar cualquier función continua de forma arbitraria lo suficientemente bien, y desea tener una idea de ello. En otras palabras, su objetivo es construir una red neuronal que se aproxime a alguna función específica [math] f: \ mathbb {X} \ to \ mathbb {Y} [/ math], como [math] f (x, y) = x ^ 2 + y ^ 2 [/ matemáticas]. Si ese es el caso, definitivamente podemos construir una red neuronal de este tipo. Podemos usar datos de entrenamiento de la forma [math] ((x, y), z) [/ math], donde [math] z = f (x, y) [/ math] y entrenar una red neuronal con [math ] (x, y) [/ math] como entrada y [math] z [/ math] como salida. Por supuesto, qué tan bien aproximamos tal función [matemática] f [/ matemática] depende de la cantidad de datos y unidades ocultas que usemos para el entrenamiento. Para tener una idea del teorema de aproximación universal, le aconsejo que revise la respuesta de Conner Davis a ¿Es una red ReLu de una sola capa todavía un aproximador universal?

Todas son funciones matemáticas, pero si te refieres a una función tradicional como f (x) = x ^ 2, entonces simplemente entiendes que es un mal uso de las redes neuronales y nunca lo vuelves a hacer.