Coletânea Python do ZERO às Redes Neurais Artificiais
Principais Algoritmos para Inteligência Artificial
Quando estamos falando em ciência de dados, aprendizado de máquina,
rede neurais artificias, etc... existe uma grande gama de nomenclatura que em suma faz parte da mesma área/nicho da computação, porém com importantes características que as diferenciam entre si que precisamos entender para acabar separando as coisas.
Machine learning é a nomenclatura usual da área da computação onde se
criam algoritmos de redes neurais artificiais abstraindo problemas reais em computacionais, de forma que a “máquina” consiga encontrar padrões e aprender a partir destes. De forma bastante reduzia, podemos entender que as redes neurais artificiais são estruturas de processamento de dados onde processamos amostras como dados de entrada, a rede neural reconhece padrões e aplica funções sobre esses dados, por fim gerando saídas em forma de classificação, previsão, etc..
Para alguns autores e cientistas da área, a chamada data science (ciência de dados em tradução livre) é o nicho onde, com ajuda de redes neurais artificiais, conseguimos processar enormes volumes de dados estatísticos quantitativos ou qualitativos de forma a se extrair informação dos mesmos para se realizem estudos retroativos ou prospectivos. Porém é importante entender que independentemente do tipo de problema computacional, teremos diferentes modelos ou aplicações de redes neurais para que façam o trabalho pesado por nós.
Sendo assim, não é incorreto dizer que toda aplicação que use deste tipo de arquitetura de dados como ferramenta de processamento, é de certa forma inteligência artificial simulada.
Partindo do pressuposto que temos diferentes tipos de redes neurais, moldáveis a praticamente qualquer situação, podemos entender rapidamente os exemplos mais comumente usados.
- Redes neurais artificiais – Modelo de processamento de dados via perceptrons (estrutura de neurônios interconectados que processam dados de entrada gerando saídas) estruturadas para problemas de classificação, regressão e previsão.
- Redes neurais artificiais profundas (deep learning) – Estruturas de rede neural com as mesmas características do exemplo anterior, porém mais robustas, com maior quantidade de neurônios assim como maior número de camadas de neurônios interconectados entre si ativos realizando processamento de dados.
- Redes neurais artificiais convolucionais – Modelo de rede neural com capacidade de usar de imagens como dados de entrada, convertendo as informações de cada pixel da matriz da imagem para arrays (matrizes numéricas), realizando processamento sobre este tipo de dado.
- Redes neurais artificiais recorrentes – Modelos de rede neurais adaptados a realizar o processamento de dados correlacionados com uma série temporal, para que a partir dos mesmos se realizem previsões.
- Redes neurais artificiais para mapas auto-organizáveis – Modelo de rede neural com funcionamento não supervisionado e com processamento via algoritmos de aglomeração, interpretando amostras e classificando as mesmas quanto sua similaridade.
- Redes neurais artificiais em Boltzmann Machines – Modelo não sequencial (sem entradas e saídas definidas) que processa leitura dos perceptrons reforçando conexões entre os mesmos de acordo com sua similaridade, porém podendo também ser adaptadas para sistemas de recomendação
- Redes neurais artificiais com algoritmos genéticos – Modelo baseado em estudo de gerações de processamento sequencial, simulando o mecanismo de evolução reforçando os melhores dados e descartando os piores geração após geração de processamento.
- Redes neurais artificiais adversariais generativas – Modelo capaz de identificar características de similaridade a partir de dados de entrada de imagens, sendo capaz de a partir desses dados gerar novas imagens a partir do zero com as mesmas características.
- Redes neurais artificiais para processamento de linguagem natural – Modelo de nome autoexplicativo, onde a rede tem capacidade de encontrar padrões de linguagem seja ela falada ou escrita, aprendendo a linguagem.
- Redes neurais artificiais intuitivas – Modelo autônomo que via sensores é capaz de realizar a leitura do ambiente ao seu entorno, interagir com o mesmo usando os resultados de tentativa e erro como aprendizado e a partir disso tomar decisões por conta própria.
- Redes neurais artificiais baseadas em Augumented Random Search (ARS) – Modelo que pode ser construído em paralelo a uma rede neural artificial intuitiva, seu foco se dá em criar mecanismos de aprendizado por reforço para um Agente que possui um corpo, dessa forma uma rede neural realizará aprendizado por reforço para o controle de seu corpo, enquanto outra realizará aprendizado por reforço para seu aprendizado lógico convencional.
Estes modelos citados acima são apenas uma pequena amostra do que se
existe de redes neurais artificiais quando as classificamos quanto ao seu propósito. Raciocine que uma rede neural pode ser adaptada para resolução de praticamente qualquer problema computacional, e nesse sentido são infinitas as possibilidades. Outro ponto a destacar também é que é perfeitamente normal alguns tipos/modelos de redes neurais artificiais herdarem características de outros modelos, desde que o propósito final seja atendido.
Adendo – Augumented Random Search
O algoritmo Augmented Random Search, idealizado por Horia Mania e Aurelia Guy, ambos da universidade de Berkeley, é um modelo de estrutura de código voltada para inteligência artificial, principalmente no âmbito de abstrair certas estruturas de nosso Agente tornando-o um simulacro de ser humano ou de algum animal.
Diferente de outros modelos onde nosso agente é uma forma genérica com alguns sensores, por meio do ARS temos, entre outros modelos, o chamado MiJoCo (Multi-joint dynamics with contact), que por sua vez tenta simular para nosso agente uma anatomia com todas suas características fundamentais, como tamanho e proporção, articulações, integração com a física simulada para o ambiente, etc...
Se você já está familiarizado com os conceitos de Agente vistos nos capítulos anteriores, deve lembrar que o mesmo, via rede neural artificial intuitiva, trabalha com estados e ações, partindo do princípio de sua interação com o ambiente. Pois bem, quando estamos trabalhando com ARS estamos dando um passo além pois aqui o próprio corpo de nosso agente passa a ser um ambiente. Raciocine que o mesmo deverá mapear, entender e aprender sobre o seu corpo antes mesmo de explorar o ambiente ao seu entorno.
O conceito de nosso Agente se manterá da mesma forma como conhecemos, com sua tarefa de ir de um ponto A até um ponto B ou realizar uma determinada tarefa, realizando leituras do ambiente, testando possibilidades, aprendendo com recompensas e penalidades, etc... nos moldes de aprendizado por reforço. Porém dessa vez, de uma forma mais complexa, terá de realizar suas determinadas tarefas controlando um corpo.
Raciocine, apenas como exemplo, um Agente que deve explorar um ambiente e em um determinado ponto o mesmo deve subir um lance de escadas, raciocine que o processo que envolve o mesmo aprender o que é um lance de escadas e como progredir sobre esse “obstáculo” é feito considerando o que são suas pernas, como deverá mover suas pernas, qual movimento, em qual direção, em que período de tempo, com contração de quais grupos musculares, etc...
Se você já jogou algum jogo recente da série GTA, deve lembrar que os NPCs são dotados de uma tecnologia chamada Ragdoll que simula seu corpo e a física sobre o mesmo de forma realista, reagindo a qualquer estímulo do ambiente sobre si, aqui o conceito será semelhante, porém nosso Agente terá um corpo e uma inteligência, ao contrário do jogo onde há um corpo e um simples script de que ações o NPC fica realizando aleatoriamente para naquele cenário simplesmente parecer uma pessoa vivendo sua vida normalmente.
Note que novamente estaremos abstraindo algo de nossa própria natureza, todo animal em seus primeiros dias/meses de vida, à medida que descobre o seu próprio corpo e explora o ambiente, aprende sobre o mesmo. Ao tentar desenvolver uma habilidade nova, como por exemplo tocar um instrumento musical, parte do processo é entender a lógica envolvida e parte do processo é saber o que e como fazer com seu corpo.
Se você um dia, apenas como exemplo, fez aulas de violão, certamente se lembrará que para extrair diferentes sons do instrumento existe uma enorme variedade de posições dos seus dedos nas casas do violão para que se contraiam as cordas do mesmo para ressoar uma determinada frequência. Entender o que é um ré menor é lógica, a posição dos dedos nas cordas é física, a prática de repetição feita nesse caso é para desenvolver uma memória muscular, onde sempre que você for tocar um ré menor, já saiba como e onde posicionar seus dedos para essa nota.
Ao programar este tipo de característica para um Agente, não teremos como de costume um algoritmo conceituando cada ação a ser realizada e em que ordem a mesma deve ser executada, mas fazendo o uso de q-learning, aprenderá o que deve ser feito em tentativa e erro fazendo uso de aprendizado por reforço.
Apenas concluindo esta linha de raciocínio, lembre-se que em nossos modelos de inteligência artificial tínhamos o conceito de continuidade, onde nosso Agente sempre estava em busca de algo a se fazer, uma vez que o “cérebro” do mesmo não para nunca seu processamento. Agora iremos somar a este modelo muito de física vetorial, pois estaremos ensinando o controle e movimento do corpo de nosso Agente em um ambiente simulado de 2 ou 3 dimensões, dependendo o caso.
Método de Diferenças Finitas
Um ponto que deve ser entendido neste momento é o chamado Método
de Diferenças Finitas, pois esse trata algumas particularidades que diferenciará o ARS de outros modelos lógicos de inteligência artificial.
Como de costume, para nossos modelos voltados a inteligência artificial,
temos aquele conceito básico onde nosso Agente realizará uma determinada ação por tentativa e erro, recebendo recompensas quando as ações foram dadas como corretas e penalidades quando executadas determinadas ações que diretamente ou indiretamente acabaram o distanciando de alcançar seu objetivo. Lembre-se que nesse processo, conforme nosso agente, via aprendizado por reforço, aprendia o jeito certo de realizar determinada tarefa, a medida que os padrões dos pesos eram reajustados para guardar os melhores padrões, a arquitetura do código era desenvolvida de forma a aos poucos descartar totalmente os processos das tentativas que deram errado.
O grande problema nisso é que, ao contextualizar este tipo de conceito
para algoritmos em ARS, os mesmos irão contra a própria lógica e proposta de ARS. Vamos entender melhor, em uma rede neural artificial intuitiva comum, onde nosso Agente é genérico e possui apenas sensores para ler, mapear e explorar o ambiente, e um objetivo de, por exemplo, se deslocar de um ponto A até um ponto B, o mesmo simplesmente iria considerando qual ação de deslocamento o deixou mais afastado do ponto A e mais próximo do ponto B, sem a necessidade de considerar nada mais além disso. Agora raciocine que ao considerar um corpo para nosso Agente, o mesmo inicialmente iria entender o que são suas pernas, qual tipo de movimento é possível realizar com elas, e começar a fazer o uso das mesmas em seu deslocamento, porém, a cada tentativa dada como errada, a nível dos ajustes dos pesos em busca dos padrões corretos o mesmo iria “desaprender” um pouco a caminhar a cada erro, tendo que reaprender a andar de forma compensatória em busca do acerto.
Sendo assim, nossa estrutura de código deverá levar em consideração
esse problema e ser adaptada de forma que nosso Agente não tenha de aprender a caminhar novamente a cada processo. Teremos de separar as coisas no sentido de que, aprender a caminhar e caminhar de forma correta deve ser aprendida e não mais esquecida, e por parte de lógica, aprender quais ações foram tomada de forma errada deverão ser compensadas por ações tomadas de forma correta, sem interferir no aprendizado de caminhar.
Novamente estamos abstraindo coisas de nossa própria natureza,
tentando simular nossos mecanismos internos que nos fazem animais racionais de forma simples e dentro de uma série de diversas limitações computacionais. Apenas tenha em mente que, por exemplo, você aprendeu a digitar textos em algum momento de sua vida, todas as funções físicas e cognitivas que você usa ao digitar não precisam ser reaprendidas caso você digite algo errado, mas simplesmente deve continuar usando a mesma habilidade para corrigir o erro lógico encontrado.
Dessa forma, naquele processo de retroalimentação das redes neurais
utilizadas no processo, teremos algumas particularidades para que não se percam informações relativas a estrutura de nosso Agente e ao mesmo tempo sejam corrigidas apenas as variáveis que estão diretamente ligadas a sua lógica. É como se houvesse aprendizado simultâneo para “corpo e mente” de nosso Agente, porém nenhum aprendizado referente ao seu corpo pode ser perdido enquanto todo e qualquer aprendizado para sua mente pode sofrer alterações.
Em uma rede neural artificial intuitiva convencional o aprendizado
é/pode ser feito ao final de cada ciclo, ao final de cada ação, agora, para conseguirmos separar os aprendizados de corpo e de mente de nosso Agente, esse processo é realizado ao final de todo o processo, tendo informações de todos os ciclos envolvidos desde o gatilho inicial até a conclusão da tarefa, de modo que possamos separar o que deu certo e errado no processo de aprendizado apenas por parte da mente de nosso Agente.
Se você entendeu a lógica até aqui, deve ter percebido que internamente
não teremos mais aquele conceito clássico de descida do gradiente pois diferente de uma rede neural convencional, aqui teremos estados específicos para o corpo de nosso Agente e dinâmicos para sua mente. Ainda no exemplo de caminhar de um ponto A até um ponto B, o processo de caminhar sempre será o mesmo, para onde, de que forma, em que sentido, em qual velocidade será reaprendido a cada ciclo. Ao final dessa tarefa inicial, caso delegamos que nosso Agente agora caminhe de um ponto B até um ponto C, o mesmo não terá de aprender a caminhar novamente, mas se focará apenas em caminhar de encontro ao ponto C.
Finalizando nossa linha de raciocínio, agora o nome Augumented
Random Search deve fazer mais sentido, uma vez que os estados e ações de nosso Agente serão realizados por uma pesquisa aleatória da interação de nosso Agente com o ambiente ao seu entorno, de forma extracorpórea, ou seja, a simulação de sua inteligência artificial em sua realidade aumentada leva a consideração de um corpo e o constante aprendizado de sua mente.