Sinapses de uma Rede Neural

Neste artigo, quero mostrar um exemplo de como uma rede neural faz uma predição e mostrar que isso é pura matemática.

Adriano Moala
Porto
4 min readSep 18, 2020

--

Escrito por Adriano Moala.

Você que está estudando ou já ouviu falar em rede neural, uma pergunta seria: “para que serve?”. Ela é um estimador flexível para muitas tarefas como estimar probabilidades (de um conjunto definido de opções) ou estimar valores (como preços de produtos, valores de imóveis, volume de chuva). Entram números, saem números. O mesmo vale para áudios, imagens e textos, que são convertidos em números.

DKosig / iStock / Getty Images

Sempre que a matemática usa algo biológico como referência, ela se apropria, também, dos seus termos. Para rede neural usamos muito as palavras aprendizado, neurônio e também sinapse. A sinapse matemática é a transferência de informação de um neurônio para outro. E que informação? Números. E o que é neurônio? É a consolidação de informações de neurônios que o precedem, como uma rodovia que capta o fluxo de outras vias.

Existem muitos tutorias sobre como estimar uma rede neural, por isso não serei repetitivo, a ideia é mostrar como uma predição é gerada dado um input (informação de entrada) e mostrar que não há mágica e que a rede não tem consciência.

O banco de dados utilizado para esse exemplo é o mesmo da nossa competição publicada no Kaggle em 2017.

Para baixar os dados, recomendo a API do próprio Kaggle.

O framework que usei foi o TensorFlow/Keras. Vamos aos detalhes dos dados e da rede neural:

  • para acelerar fiz uma amostra de apenas 10 mil registros, com apenas duas features (ou variáveis), ‘ps_ind_01’ e ‘ps_ind_03’, padronizadas por média e desvio;
  • rede tem apenas 2 neurônios e ativação ReLU conectadas ao neurônio de saída com ativação softmax.
Arquitetura da Rede Neural — Fonte: Próprio Autor

O desenho dessa arquitetura fica da seguinte forma, já com os nomes das variáveis que usarei no código:

Arquitetura da Rede Neural — Fonte: Próprio Autor

E o que é treinar ou ajustar uma rede? É obter os parâmetros (ponderadores), que aplicados aos dados, resultam no menor erro. Mas, essa tarefa é um tanto complexa. Uma rede neural possui uma função de perda complexa para minimizar conforme a ilustração a seguir. A superfície à esquerda, gerada por Hao Li (2017), representa a função de erro de uma rede neural, seus olhos já encontram bastante dificuldade em buscar o ponto mais baixo, por isso os algoritmos precisam ser mais cuidadosos para não se perderem nessa busca. E, à direita, uma superfície mais comportada em que os algoritmos localizam o ponto de menor erro facilmente. Dependendo do problema, podemos querer maximizar uma métrica, basta girar as superfícies.

Fonte: Hao Li et. al (2017)

Depois de ajustar o modelo com 50 épocas, 50 registros de batch-size, cross-entropy como função de perda, a métrica AUC e o otimizador SGD (Stochastic Gradient Descendent), chegamos aos números finais.

Todos os pesos após ajuste — Fonte: Próprio Autor

Agora, vamos colocar um pouco de ordem em todos esses números segundo a estrutura de rede que desenhei anteriormente.

Fonte: Próprio Autor

A aplicação da ativação ReLU resulta em:

Fonte: Próprio Autor

Agora a Layer 2.

Fonte: Próprio Autor

E então, o output da rede com ativação softmax.

Fonte: Próprio Autor

Por fim, as predições finais feitas manualmente e pelo Tensorflow resultam nos mesmos valores, indicando que a réplica está correta.

Fonte: Próprio Autor

Considerações Finais

Ao replicar o cálculo, abrindo a caixa, fica mais fácil visualizar que uma IA ou uma rede neural não é nada mágica e nem mesmo um ser consciente que tomou vida. Não há consciência alguma na decisão devolvida, apenas uma sucessão de cálculos matemáticos bem otimizados para a melhor decisão baseada em dados. A rede neural fará somente o que ela foi treinada para fazer.

Agradecimentos

Revisão: Catarina Pröglhöf, Fernanda Ribeiro.

--

--