Você pode ter ouvido dizer que as redes neurais são " aproximadores de funções universais ". Em essência, o teorema de Cybenko diz que, para qualquer mapeamento de funções de reais para reais, você pode aproximar-se com uma rede neural com funções de ativação sigmóide. De fato, as redes neurais permitem calcular qualquer função computável por uma máquina de Turing (ou seja, qualquer coisa que você possa escrever um algoritmo para calcular). Infelizmente, essas provas dizem apenas que, para algumas configurações finitas de neurônios e pesos, você pode aproximar qualquer função.
A teoria é boa e elegante, mas sua pergunta parece ser mais parecida com a de como realmente codificar a computação de alguma função em um conjunto de neurônios e pesos. Para ilustrar, considere um exemplo simples - o exclusivo-ou. O XOR aceita duas entradas, passa essas entradas. Quando uma e apenas uma das entradas são ativadas, o nó de saída é ativado. Com as duas ou nenhuma das entradas ativadas, o nó de saída não é ativado.
Observe que os três nós ocultos fazem coisas diferentes. Os nós mais à esquerda e mais à direita simplesmente passam pelas ativações dos nós de entrada de respeito. O neurônio do meio recebe as duas entradas e, de alguma forma, as nega se ambas estiverem ativadas. Essa inteligente combinação e recombinação de insumos é essencialmente como o trabalho em uma rede neural é feito.
Obviamente, para funções mais complexas, a combinação e recombinação devem ser feitas de maneiras mais inteligentes e complicadas, mas é essencialmente isso que acontece em um nível baixo. O louco é que isso é realmente tudo o que você precisa para calcular qualquer função computável! Por outro lado, as máquinas de turing também se tornam enganosamente simples ...
O problema é que não temos realmente uma maneira de gerar magicamente a rede neural que calcula alguma função arbitrária. As provas apenas nos dizem que existe alguma rede por aí que poderia fazê-lo. Quando treinamos nossas redes neurais, estamos simplesmente tentando encontrar uma rede bem próxima.
No contexto do reconhecimento de imagem, você pode imaginar padrões de codificação na rede. Por exemplo, para reconhecer o número '1', você pode imaginar nós ocultos que esperam que uma coluna de pixels seja quase total ou totalmente ativada, com os pixels vizinhos desativados. Esse nó oculto pode ser bastante bom em reconhecer uma linha reta nessa coluna específica. Coloque o suficiente disso em breve e, em breve, você terá vários nós em locais suficientes da sua imagem; se eu mostrar à rede um, nós ocultos em linha reta suficientes serão ativados, indicando um '1'. É claro que o problema se generaliza na rede para que ela possa reconhecer um conjunto variado de entradas.
Espero que isso ajude você a entender mais ou menos os conceitos de como uma rede neural pode executar cálculos. No entanto, você chegou a um ponto bastante importante sobre as redes neurais: em geral, é difícil, na melhor das hipóteses, entender por que a rede gera uma saída específica, especialmente quando você considera que, para algo como reconhecimento de imagem, as redes geralmente são grande o suficiente para que os humanos tenham dificuldade em compreender cada uma das partes móveis da máquina. O que complica ainda mais o fato é que, em geral, a maioria das redes neurais na verdade não possui um único nó oculto para cada pequeno recurso que a rede possa aprender sobre os dados. Em vez disso, detectar algo como uma linha reta para classificar o número '1' ocorreria de maneira não centralizada em muitos nós ocultos. Outros algoritmos,
Se você está procurando mais leitura, eu recomendo a leitura deste tutorial no ai junkie. Ele mostra os conceitos básicos de como uma rede neural funciona e até fornece um exemplo de código simples para que as redes neurais conduzam um tanque em direção a uma meta. No entanto, o tutorial não abrange a retropropagação, que é de longe a maneira mais comum de treinar redes neurais, e usa um algoritmo genético simples. Quando ele começa a falar sobre genética, acho que você pode parar de ler ...