Quizá haya oído decir que las redes neuronales son " aproximadores de funciones universales ". En esencia, el teorema de Cybenko dice que para cualquier función que asigne reales a reales, se puede aproximar con una red neuronal con funciones de activación sigmoideas. De hecho, resulta que las redes neuronales permiten calcular cualquier función que se pueda calcular con una función de activación sigmoidea. Máquina de Turing (es decir, cualquier cosa para cuyo cálculo se pueda escribir un algoritmo). Por desgracia, estas pruebas sólo dicen que para una configuración finita de neuronas y pesos, se puede aproximar cualquier función.
La teoría está muy bien, pero tu pregunta parece ir más en la línea de cómo codificar realmente el cálculo de una función en un conjunto de neuronas y pesos. Para ilustrarlo, considere un ejemplo sencillo: el XOR exclusivo. El XOR toma dos entradas y las pasa. Cuando se activa una y sólo una de las entradas, se activa el nodo de salida. Con ambas o ninguna de las entradas activadas, el nodo de salida no se activa.
Observa que los tres nodos ocultos hacen cosas diferentes. Los nodos más a la izquierda y más a la derecha simplemente pasan a través de las activaciones de los nodos de entrada correspondientes. La neurona central toma las dos entradas y de alguna manera las niega si ambas están activadas. Esta inteligente combinación y recombinación de entradas es esencialmente la forma en que se realiza el trabajo en una red neuronal.
Obviamente, para funciones más complejas, la combinación y recombinación debe hacerse de formas más inteligentes y complicadas, pero esto es en esencia lo que ocurre a bajo nivel. Lo curioso es que esto es todo lo que se necesita para calcular cualquier función computable. Por otra parte, las máquinas de Turing también resultan ser engañosamente sencillas...
El problema es que en realidad no tenemos una forma de generar mágicamente la red neuronal que compute alguna función arbitraria. Las pruebas sólo nos dicen que hay alguna red por ahí que podría hacerlo. Cuando entrenamos nuestras redes neuronales, simplemente intentamos encontrar una red que se acerque bastante.
En el contexto del reconocimiento de imágenes, se podría imaginar la codificación de patrones en la red. Por ejemplo, para reconocer el número "1", se podría imaginar un nodo oculto que espera que una columna de píxeles esté activada en su mayoría o en su totalidad, y que los píxeles vecinos estén desactivados. Este nodo oculto podría ser bastante bueno reconociendo una línea recta en esa columna concreta. Ponga suficientes de estos juntos y muy pronto tendrá un montón de nodos que lo hacen en suficientes lugares de su imagen que si muestro a la red un uno, suficientes nodos ocultos de línea recta se activarán, indicando un '1'. El problema, por supuesto, es generalizar la red para que pueda reconocer un conjunto variado de entradas.
Espero que esto te ayude a entender más o menos los conceptos de cómo una red neuronal puede realizar cálculos. Sin embargo, has dado con un punto que es bastante importante sobre las redes neuronales: en general es difícil, en el mejor de los casos, entender por qué la red escupe un resultado concreto, especialmente si tenemos en cuenta que para algo como el reconocimiento de imágenes, las redes suelen ser lo suficientemente grandes como para que a los humanos nos cueste comprender cada una de las partes móviles de la máquina. Para complicar aún más el asunto, en general la mayoría de las redes neuronales no tienen un único nodo oculto para cada pequeña característica que la red podría aprender sobre los datos. En cambio, detectar algo como una línea recta para clasificar el número "1" tendría lugar de forma no centralizada en muchos nodos ocultos. Otros algoritmos, como los árboles de decisión, son mucho mejores en este sentido.
Si desea leer algo más, le recomiendo encarecidamente que lea esto tutorial en ai junkie. En él se explican los fundamentos del funcionamiento de las redes neuronales, e incluso se ofrece un ejemplo de código sencillo para que las redes neuronales conduzcan un tanque hacia un objetivo. El tutorial, sin embargo, no cubre la retropropagación, que es con mucho la forma más común de entrenar redes neuronales, y en su lugar utiliza un simple algoritmo genético. Una vez que empieza a hablar de genética, supongo que puedes dejar de leer...