Coletânea Python do ZERO às Redes Neurais Artificiais
Teoria Sobre Redes Neurais Artificiais
Um dos métodos de processamento de dados que iremos usar no decorrer de todos exemplos deste livro, uma vez que sua abordagem será prática, é o de redes neurais artificiais. Como o nome já sugere, estamos criando um modelo computacional para abstrair uma estrutura anatômica real, mais especificamente um ou mais neurônios, células de nosso sistema nervoso central e suas interconexões.
Nosso sistema nervoso, a nível celular, é composto por neurônios e suas conexões chamadas sinapses. Basicamente um neurônio é uma estrutura que a partir de reações bioquímicas que o estimular geram um potencial elétrico para ser transmitido para suas conexões, de forma a criar padrões de conexão entre os mesmos para ativar algum processo de outro subsistema ou tecido ou simplesmente guardar padrões de sinapses no que convencionalmente entendemos como nossa memória.
Na eletrônica usamos de um princípio parecido quando temos componentes eletrônicos que se comunicam em circuitos por meio de cargas de pulso elétrico gerado, convertido e propagado de forma controlada e com diferentes intensidades a fim de desencadear algum processo ou ação.
Na computação digital propriamente dita temos modelos que a nível de linguagem de máquina (ou próxima a ela) realizam chaveamento traduzindo informações de código binário para pulso ou ausência de pulso elétrico sobre portas lógicas para ativação das mesmas dentro de um circuito, independentemente de sua função e robustez.
Sendo assim, não diferentemente de outras áreas, aqui criaremos modelos computacionais apenas como uma forma de abstrair e simplificar a codificação dos mesmos, uma vez que estaremos criando estruturas puramente lógicas onde a partir delas teremos condições de interpretar dados de entrada e saídas de ativação, além de realizar aprendizagem de máquina por meio de reconhecimento de padrões e até mesmo desenvolver mecanismos de interação homem-máquina ou de automação.
A nível de programação, um dos primeiros conceitos que precisamos entender é o de um Perceptron. Nome este para representar um neurônio artificial, estrutura que trabalhará como modelo lógico para interpretar dados matemáticos de entrada, pesos aplicados sobre os mesmos e funções de ativação para ao final do processo, assim como em um neurônio real, podermos saber se o mesmo é ativado ou não em meio a um processo.
Aproveitando o tópico, vamos introduzir alguns conceitos que serão trabalhados posteriormente de forma prática, mas que por hora não nos aprofundaremos, apenas começaremos a construir aos poucos uma bagagem de conhecimento sobre tais pontos.
Quando estamos falando em redes neurais artificiais, temos de ter de forma clara que este conceito é usado quando estamos falando de toda uma classe de algoritmos usados para encontrar e processar padrões complexos a partir de bases de dados usando estruturas lógicas chamadas perceptrons. Uma rede neural possui uma estrutura básica de entradas, camadas de processamento, funções de ativação e saídas.
De forma geral é composta de neurônios artificiais, estruturas que podem ser alimentadas pelo usuário ou retroalimentadas dentro da rede por dados de suas conexões com outros neurônios, aplicar alguma função sobre esses dados e por fim gerar saídas que por sua vez podem representar uma tomada de decisão, uma classificação, uma ativação ou desativação, etc...
Outro ponto fundamental é entender que assim como eu uma rede neural
biológica, em uma rede neural artificial haverão meios de comunicação entre esses neurônios e podemos inclusive usar esses processos, chamados sinapses, para atribuir valores e funções sobre as mesmas. Uma sinapse normalmente possui uma sub estrutura lógica chamada Bias, onde podem ser realizadas alterações intermediárias aos neurônios num processo que posteriormente será parte essencial do processo de aprendizado de máquina já que é nessa “camada” que ocorrem atualizações de valores para aprendizado da rede.
Em meio a neurônios artificiais e suas conexões estaremos os separando
virtualmente por camadas de processamento, dependendo da aplicação da rede essa pode ter apenas uma camada, mais de uma camada ou até mesmo camadas sobre camadas (deep learning). Em suma um modelo básico de rede neural conterá uma camada de entrada, que pode ser alimentada manualmente pelo usuário ou a partir de uma base de dados.
Em alguns modelos haverão o que são chamadas camadas ocultas, que são intermediárias, aplicando funções de ativação ou funcionando como uma espécie de filtros sobre os dados processados. Por fim desde os moldes mais básicos até os mais avançados sempre haverá uma ou mais camadas de saída, que representam o fim do processamento dos dados dentro da rede após aplicação de todas suas funções.
A interação entre camadas de neurônios artificiais normalmente é
definida na literatura como o uso de pesos e função soma. Raciocine que a estrutura mais básica terá sempre esta característica, um neurônio de entrada tem um valor atribuído a si mesmo, em sua sinapse, em sua conexão com o neurônio subsequente haverá um peso de valor gerado aleatoriamente e aplicado sobre o valor inicial desse neurônio em forma de multiplicação. O resultado dessa multiplicação, do valor inicial do neurônio pelo seu peso é o valor que irá definir o valor do próximo neurônio, ou em outras palavras, do(s) que estiver(em) na próxima camada. Seguindo esse raciocínio lógico, quando houverem múltiplos neurônios por camada além dessa fase mencionada anteriormente haverá a soma dessas multiplicações.
1 neurônio Z = entradas x pesos
n neurônios Z = (entrada1 x peso1) + (entrada2 + peso2) + etc…
Por fim um dos conceitos introdutórios que é interessante abordarmos
agora é o de que mesmo nos modelos mais básicos de redes neurais haverão funções de ativação. Ao final do processamento das camadas é executada uma última função, chamada de função de ativação, onde o valor final poderá definir uma tomada de decisão, uma ativação (ou desativação) ou classificação. Esta etapa pode estar ligada a decisão de problemas lineares (0 ou 1, True ou False, Ligado ou Desligado) ou não lineares (probabilidade de 0 ou probabilidade de 1). Posteriormente ainda trabalharemos com conceitos mais complexos de funções de ativação.
Linear - ReLU (Rectified Linear Units) - Onde se X for maior que 0 é feita a ativação do neurônio, caso contrário, não. Também é bastante comum se usar a Step Function (Função Degrau) onde é definido um valor como parâmetro e se o valor de X for igual ou maior a esse valor é feita a ativação do neurônio, caso contrário, não.
Não Linear - Sigmoid - Probabilidade de ativação ou de classificação de acordo com a proximidade do valor de X a 0 ou a 1. Apresenta e considera os valores intermediários entre 0 e 1 de forma probabilística.
Também estaremos trabalhando com outras formas de processamento
quando estivermos realizando o treinamento supervisionado de nossa rede neural artificial. Raciocine que os tópicos apresentados anteriormente apenas se trata da estrutura lógica ao qual sempre iremos trabalhar, o processo de aprendizado de máquina envolverá mais etapas onde realizaremos diferentes processos em cima de nossa rede para que ela “aprenda” os padrões os quais queremos encontrar em nossos dados e gerar saídas a partir dos mesmos.