Por que sempre queremos ver a proporção áurea? Tentativa (sem êxito) de análise evolutiva usando redes neurais C ++

Recentemente, perguntei-me: o nosso desejo de ver a proporção áurea em todos os lugares está relacionada com algumas coisas puramente culturais de alguma forma, ou existe algum tipo de padrão mais profundo escondido na estrutura do nosso cérebro? Para descobrir isso, decidi fazer algumas coisas:

  1. Formule uma hipótese específica sobre esse padrão. Decidi que a suposição é mais adequada para que nosso cérebro use um sistema numérico baseado na decomposição de números em graus da proporção áurea, já que algumas de suas características são muito semelhantes ao trabalho de redes neurais primitivas: o fato é que os graus da seção dourada de uma ordem superior podem ser expandidos infinitamente o número de maneiras na soma de graus de ordem inferior e até graus negativos. Assim, um grau mais alto é "excitado" a partir de alguns graus mais baixos, manifestando a mesma semelhança com uma rede neural.
  2. Descreva uma maneira específica de testá-lo: eu escolhi o tapete. simulação da evolução do cérebro através de mudanças aleatórias na rede neural possível mais simples - a matriz de um operador linear.
  3. Crie critérios para confirmar a hipótese. Meu critério era que o sistema numérico baseado na proporção áurea fosse implementado em um mecanismo de rede neural com a mesma quantidade de informações com menos erros que o binário.

Como estamos falando de programação, descreverei mais detalhadamente o segundo e o terceiro pontos.

Para simular mudanças aleatórias no cérebro durante a evolução, usei a função rand_s (), pois é criptograficamente estável e, consequentemente, dará um resultado "mais aleatório". Também usei como critério que a rede neural alcançasse o menor número de erros ao aprender que quando a matriz se desvia em direções aleatórias por valores pequenos, seu produto pelo vetor muda aproximadamente no mesmo módulo.

Quanto à codificação de dados no próprio vetor, usei um vetor de 28 dimensões para dois números binários de 14 dígitos e sua soma (após os primeiros 14 caracteres, existem apenas 14 zeros para preencher) e um vetor de 40 dimensões para dois números no sistema com uma proporção áurea.

O arquivo de entrada possui o seguinte formato.

A primeira linha são dois números inteiros separados por um espaço, a dimensão do vetor e o número de elementos no conjunto de treinamento.

Todas as linhas subsequentes: a primeira linha é a entrada da rede neural, a segunda é o resultado correto do processamento.

Aqui está um trecho de código de rede neural responsável por treiná-lo em uma amostra dos dados de entrada e nos resultados corretos correspondentes a eles:

while (((d-mu)*(d-mu)>0.01)||(q<10)) // ,        ""    { s=0; //           for (k=0;k<m;k++) { for (i=0;i<n;i++) { (*(z+k*n+i))=0; } for (i=0;i<n;i++) { for (j=0;j<n;j++) { (*(z+k*n+i))=(*(z+k*n+i))+(*(a+i*n+j))*(*(x+k*n+j)); } } //        for (i=0;i<n;i++) { s=s+((*(z+k*n+i))-(*(y+k*n+i)))*((*(z+k*n+i))-(*(y+k*n+i))); } //         s1=s+1; } while (s<s1) //      ,      ,    { s1=0; //      for (k=0;k<m;k++) { for (i=0;i<n;i++) { (*(z+k*n+i))=0; } }//  ()      rand_s(&p); k1 = (int) (p/((int) (UINT_MAX/n))); rand_s(&p); k2 = (int) (p/((int) (UINT_MAX/n))); //   ""  ,     rand_s(&p); h=((double) p/UINT_MAX)-0.5; //  h1=1; rand_s(&p); l=((int) ((double) p/UINT_MAX)*20); for (i=0;i<l;i++) { h1=h1/10; } h=h*h1; //,        for (k=0;k<m;k++) { for (i=0;i<n;i++) { for (j=0;j<n;j++) { if ((i==k1)&&(j==k2)) (*(z+k*n+i))=(*(z+k*n+i))+(*(a+i*n+j))*(*(x+k*n+j))+h*(*(x+k*n+j)); else (*(z+k*n+i))=(*(z+k*n+i))+(*(a+i*n+j))*(*(x+k*n+j)); } } //       for (i=0;i<n;i++) { s1=s1+((*(z+k*n+i))-(*(y+k*n+i)))*((*(z+k*n+i))-(*(y+k*n+i))); }//           } } (*(a+k1*n+k2))=(*(a+k1*n+k2))+h; //           s1=0; d=0; for (k1=0;k1<n;k1++) { for (k2=0;k2<n;k2++) { for (k=0;k<m;k++) { for (i=0;i<n;i++) { (*(z+k*n+i))=0; } } for (k=0;k<m;k++) { for (i=0;i<n;i++) { for (j=0;j<n;j++) { if ((i==k1)&&(j==k2)) (*(z+k*n+i))=(*(z+k*n+i))+((*(a+i*n+j))+0.1)*(*(x+k*n+j)); else (*(z+k*n+i))=(*(z+k*n+i))+(*(a+i*n+j))*(*(x+k*n+j)); } } } s1=0; for (k=0;k<m;k++) { for (i=0;i<n;i++) { s1=s1+((*(z+k*n+i))-(*(y+k*n+i)))*((*(z+k*n+i))-(*(y+k*n+i))); } } d=d+(s1-s)*(s1-s)/(n*m);//          } } mu=mu*((double) q/(q+1))+((double) d/(q+1));//         q=q+1; printf("%lf \n",mu);//         } 

Eu também gere dados de entrada aleatoriamente, esses são números reais de zero a um. Além disso, além da amostra de treinamento, também gerei uma amostra de teste, na qual testei minha rede neural. Além disso, para cada resultado obtido pela rede neural, calculei o erro quadrático médio da raiz, ou seja, a raiz do quadrado médio da diferença entre os elementos do vetor obtido pela rede neural e o vetor que contém o resultado correto.
Como resultado, obtive 1000 erros médios no resultado da operação da rede neural com adição nos sistemas de números binários e baseados em ouro. Selecionei a dimensão do vetor para que eles armazenassem aproximadamente a mesma quantidade de informações dentro do sistema numérico e entre eles.

Comparei os erros em diferentes sistemas numéricos com testes t emparelhados e foi isso que obtive.

Comparação: Proporção áurea - Sistema Binário
Hipótese: O erro na proporção áurea é, em média, menor.
Resultados:
t = -22.033
df = 999
p <0,001
D = -0.697 de Cohen (com uma proporção áurea, o erro é menor)
Intervalo de confiança de 99% para o d de Cohen:
de -inf a -0,615
Teste de normalidade da distribuição de Shapiro-Wilk:
W = 0,998 p = 0,382 (as distribuições correspondem aproximadamente ao normal)
Estatística descritiva:
Proporção áurea:
Média aritmética: 0.365
Desvio Padrão: 0,044
Sistema binário:
Média aritmética: 0,414
Desvio padrão: 0,055

Decidi manter todos os dados usados ​​neste pequeno estudo de artesanato por enquanto como evidência de que não extraí os números do teto. Quem pede, eu posso enviar.

Agora, para as conclusões. Como as redes neurais, cujo treinamento é baseado em uma mudança aleatória nas conexões entre os neurônios e na seleção dos melhores deles (como durante a evolução), neste caso, mostrou que eles lidam significativamente melhor com a proporção áurea do que com os dois como base do sistema numérico com o mesmo número. informação, pode-se supor que a evolução do cérebro dos animais e, em particular, do homem seguiu um caminho semelhante.

UPD A partir do momento da publicação, o autor realizou um novo estudo no qual levou em consideração a correção do número de medidas e a influência da base do sistema numérico separadamente de sua distância até a proporção áurea por regressão linear. O resultado foi decepcionante: a proximidade da base com a proporção áurea aumenta mais o erro do que o reduz, de modo que a sensação, como sempre, caiu.

Source: https://habr.com/ru/post/pt478998/


All Articles