quinta-feira, 26 de agosto de 2021

Outras formas de Inteligência Artificial

 Redes Multilayer Perceptron não são tudo o que existe em inteligência artificial, existem outras formas de utilizar esses sistemas, que não são simples aplicações de redes neurais, vamos ver abaixo alguns desses modos:

Aprendizado não Supervisionado

 Essa forma de aprendizado é utilizada quando temos um conjunto de dados, que não foi classificado, não existe no dataset, uma saída desejada, então o que podemos fazer com esse conjunto de dados? bem como não podemos definir um certo ou errado, visto que não existe uma referência, o que fazemos nesses casos e agrupar as amostras do conjunto de dados em grupos, essa aplicação é chamada também de clustering, esse tipo de processamento também é chamado de Self Organizyng Maps, ou SOM, foi desenvolvido por Teuvo Kohonem, e abaixo podemos ver um exemplo de aplicação feito com o programa MATLAB.
 
Depois de gerar o mapa, uma pessoa deve olhar para o resultado para dizer o que cada grupo representa.

Aprendizagem por Reforço (Reinforcement Learning)

 Esse tipo de inteligência artificial é bastante diferente dos outros, nele o sua aplicação irá se tornar um ambiente, e o sistema treinado será um agente, esse agente irá interagir com o ambiente à volta e irá receber recompensas, positivas e negativas dependendo das ações, a cada iteração a política do agente será alterada dependendo da recompensa da iteração anterior, e isso se repete até ser alcançada uma política ótima, que satisfaça o funcionamento da aplicação.
 
 

Deep Learning

 Com o aumento da capacidade dos processadores se tornou possível a manipulação do conjunto de dados, para que a máquina conheça muito melhor a aplicação em que está sendo usada,no deep learning são usadas camadas de pré-processamento chamadas de camadas convolucionais, essas camadas tornam um conjunto de dados que em seu estado natural já possuem uma grande quantidade de amostras, em conjuntos ainda maiores, por criar sub-amostras a partir das originais, por exemplo se as amostras são imagens de objetos, as camadas convolucionais podem simplesmente mudar o filtro de cor da imagem, a cor muda, mas o objeto continua sendo o mesmo, depois de passar pelas camadas convolucionais, as amostras e sub-amostras são inseridas em uma rede perceptron, essa rede não ira utilizar as funções de ativação que vimos anteriormente, mas usa no deep learning, as funções da familia ReLu (Rectified Linear Unit), com o uso dessas ferramentas a rede é treinada com muito mais amostras e é capaz de compreender melhor a aplicação em que está sendo usada. Porém essa melhoria na interpretação do problema tem seu custo, usar uma aplicação de deep learning exige muito processamento então computadores domésticos podem ter vários problemas em rodar essas aplicações, um jeito então de contornar esse problema é programar nossos programas de deep learning em IDEs online que usam processadores externos, como Google Colab.
 
 
Fonte:

Aulas de INART, no Instituto Federal de São Paulo, campus São Paulo, com o professor Miguel Angelo de Abreu de Sousa, no periodo de 11/2020 até 03/2021

quarta-feira, 25 de agosto de 2021

Processamentos externos ao treino e aplicação

 A execução de uma rede neural não é uma ocorrência pontual para um conjunto de dados, muitas vezes é necessário preparar um conjunto de dados para utilização, e depois de executar a rede, precisamos verificar o quão boa ela é, essas etapas são chamadas de pré- e pós-, -processamento respectivamente, vou explicar aqui como eles são feitos.

Pré-processamento

Em um conjunto de dados, de classificação, muitas vezes queremos diferenciar as amostras entre múltiplos grupos, como é o caso do dataset Iris que mostrei em Aplicações. Mas as funções de ativação que comentei, o degrau e a sigmóide, tem valores apenas 0 ou 1, como podemos usar essas funções para dados espalhados em mais de  grupos?
Fazemos isso por utilizar o formato One-Hot no conjunto de dados, nesse formato ao invés de existir apenas uma saída que pode ser qualquer um dos conjuntos presentes nos dados, vamos criar um número de saídas igual ao número de conjuntos esperados, mas cada uma dessas saidas irá assumir apenas duas possibilidades, se pertence à um conjunto ou não, veja o exemplo abaixo do mesmo dataset Iris:
 

Dessa maneira funções que assumem um número limitado de valores, podem ser usadas para classificar sistemas muito maiores.

Pós-Processamento

Depois de executar uma rede neural em um dataset precisamos verificar o quão bom foi o comportamento da rede, então agora vou mostrar como verificar a Acurácia de uma rede, o programa utilizado para executar a rede neural aqui, foi o Multiple Back Propagation (Veja o site aqui), quando determinamos uma topologia e executamos o treino, podemos usar um conjunto de dados para treino e um separado para teste, assim os resultados serão mais similares aos que ocorreriam na aplicação real, ao executar a rede podemos ver na aba RMS qual o erro atual, isso será usado para interromper o processamento,



Mas para verificar o rendimento das saidas vamos na aba: Output vs Desired (Testing Data), então selecionamos a saida que queremos verificar, clicamos sobre o gráfico com o botão direito do mouse e vamos em copy data, ele irá copiar os dados do teste para a área de transferência do computador, vamos em um programa de processamento de dados e colamos os dados lá, se estivermos usando a função degrau, faremos apenas uma comparação simples para verificar os acerto, mas se usarmos a função sigmoide, devemos fazer um arredondamento no valor da saida, e depois comparar com a saida desejada, o número de acertos dividido pelo número de iterações será o rendimento da rede, acurácia.




Repetindo esse procedimento para múltiplas topologias, apenas devemos escolher a que melhor funciona para a aplicação desejada.

Fonte:

Aulas de INART, no Instituto Federal de São Paulo, campus São Paulo, com o professor Miguel Angelo de Abreu de Sousa, no periodo de 11/2020 até 03/2021

Veja o video sobre o Pré processamento Aqui
Veja o vídeo sobre Pós-processamento Aqui

terça-feira, 17 de agosto de 2021

Aplicações de redes neurais

 Quando queremos usar inteligência artificial para realizar alguma tarefa, devemos escolher várias conhecer algumas características do nosso problema para escolher a melhor implementação aqui eu vou falar sobre alguns usos de redes multilayer perceptron.

Tipos de problema

Os dois grandes usos de inteligência artificial são problemas de classificação e de regressão, problemas de classificação nós temos um conjunto de entradas e com base neles queremos dizer se as entradas pertencem a um grupo ou a outro, um exemplo disso é o dataset Íris, que utiliza medições colhidas de cerca de 200 espécimes dessa flor, para classifica-los em suas três variantes, veja abaixo uma amostra desse dataset:

Nesse tipo de aplicação um único neurônio artificial não seria capaz de classificar corretamente uma flor dadas as suas dimensões, para isso então deveremos usar uma rede mais complexa.

A rede deve ter na camada de entrada o mesmo número de entradas que o dataset possui, e o número de saídas condizente com o dataset utilizado, nesse dataset como separa-se as flores em três categorias, vamos usar três neurônios na camada de saída, e por ser um problema de classificação, podemos usar como função de ativação dos neurônios um degrau, ou uma sigmóide, que tem um formato similar ao degrau, mas com a diferença dessa ser diferenciavel, os valores dessas funções serão 0 para valores abaixo de um ponto, e 1 para valores acima, já sabemos como deve ser a entrada e a saída, mas é as camadas escondidas, temos como determinar quantos neurônios devem ter nela?

Não existe uma fórmula que defina quantos neurônios devemos usar, isso irá depender de como as amostras do dataset estão distribuídas, então fazemos vários testes com topologias, ou quantidades de neurônios diferentes nas camadas intermediárias e vemos qual resulta no melhor resultado, mas esse número não pode ser qualquer coisa, isso porque se houverem poucos, ou muitos neurônios artificiais, podem ocorrer problemas diferentes.

  • Poucos neurônios

No caso da rede ser muito pequena, e a distribuição das amostras do dataset não possuir uma divisão clara, redes menores podem não ser capazes de classificar corretamente os dados, então a acurácia da rede, quantidade de acertos, será baixa.

  • Muitos neurônios

Se a rede neural for grande demais pode ocorrer um problema bem diferente, a rede se torna ultra especializada no seu treinamento, e não generaliza o problema, ela acaba decorando o conjunto de treino, e terá uma acurácia alta com ele, mas se forem apresentados dados que não estavam no conjunto de treino, a rede não será capaz de classifica-lós corretamente e a acurácia na aplicação real será baixa, esse erro é chamado de overfitting.


Problemas de regressão

Diferentes dos de classificação que vimos acima, esse problemas não possuem a saída dividida em conjuntos definidos, mas a saída será um número real que pode assumir um valor dentro de um intervalo, por exemplo, podemos usar uma rede neural para determinar qual será a altura de uma planta, dadas as condições ambientes? Podemos, mas perceba que essa aplicação não pode ser atendida por uma função de ativação degrau, então podemos usar a função linear, que permite que a saída seja um valor no conjunto de números reais.

E os pesos iniciais podem ser de qualquer valor, com o tempo o ajuste de pesos irá levar eles para os pesos adequados que ajustarão o dataset.


Fonte:

Aulas de INART, no Instituto Federal de São Paulo, campus São Paulo, com o professor Miguel Angelo de Abreu de Sousa, no periodo de 11/2020 até 03/2021

Assista à aula que mostra como utilizar problemas de classificação Aqui

segunda-feira, 16 de agosto de 2021

Redes Neurais Artificiais

 A partir de um único neurônio artificial podemos criar conexões mais complexas como a vista abaixo:

Esse tipo de topologia é chamado rede perceptron, ou modelo conexionasta, a camada dos neurônios mais à esquerda é chamada de camada de entrada, cada neurónio dessa câmara recebe todas as entradas da rede, os neurônios mais à direita compõem a camada de saída, o número de saídas de uma rede será o número de saidás do dataset utilizado nela, e todos os neurônios que não estão nessas duas camadas, estão nas chamadas camadas escondidas, importante lembrar que os neurônios internos à rede também possuem a ponderação de pesos e uma função de ativação como vimos antes, então no treinamento esses pesos serão ajustados para obtermos o resultado necessário. E nessa rede podemos ver o símbolo de um pequeno triangulo, ele é chamado de bias e é usado como ajuste.

Perceba também que essa rede que as informações viajam sempre no mesmo sentido é chamada de rede feedforward, mas pode ser utilizada também uma rede que as saídas são colocadas novamente na entrada para mais processamento, essas redes mais complexas são chamadas de redes Recorrentes ou com realimentação. Vou mostrar como usar esse tipo de rede em um próximo artigo.


Fonte:

Aulas de INART, no Instituto Federal de São Paulo, campus São Paulo, com o professor Miguel Angelo de Abreu de Sousa, no periodo de 11/2020 até 03/2021

Assista a aula sobre redes Multilayer Perceptron Aqui