Redes Neurais Artificiais (RNAs) fazem parte da grande área da Inteligência Artificial (IA). Normalmente, são aplicadas em situações onde o problema é tão complexo ou o volume de dados é tão grande que abordagens convencionais não conseguem resolver. Desta forma, fornecemos estes dados para um algoritmo de Aprendizado de Máquina que busca um modelo que represente ou que melhor se aproxime do objetivo a ser alcançado.
O advento das RNAs se deu em 1940, quando McCulloch e Pitts desenvolveram o primeiro modelo neural que impulsionou o desenvolvimento de modelos mais complexos e robustos, bem como algoritmos mais eficientes.
A grande vantagem das Redes Neurais Artificiais é a capacidade de aprender e generalizar com base nos dados, ou seja, imitar a capacidade humana de aprender com a experiência, sendo muito exploradas na automatização do processo de aprendizado de regras de várias aplicações.
O termo arquitetura é empregado conceitualmente referindo-se a topologia e também ao modelo da rede propriamente dito. Quanto a topologia, as RNAs podem ser divididas em Feed-Forward e Recorrente.
Atualmente, entre as Redes Neurais Artificiais mais difundidas estão as profundas, convolucionais, recorrentes, autoencoders e generativas. Dentro deste contexto, vamos discutir brevemente cada uma delas.
Redes Neurais Feed-Forward são bastante comuns e normalmente fornecem o primeiro contato com IA. Elas são caracterizadas por 3 camadas: ‘entrada’, ‘oculta’ e ‘saída’. Quando existe mais de uma camada oculta a rede é chamada de ‘profunda’, de onde vem o termo ‘Deep Learning’. Nas redes com monocamadas, existe apenas uma camada de neurônios ligados diretamente aos nós de entrada e eles mesmos já fornecem os dados de saída. Nas redes com multicamadas , existe uma ou mais camadas de neurônios na camada oculta, possibilitando maior interação entre os neurônios. Outra característica é que os neurônios podem estar totalmente ou parcialmente conectados.
As Redes Neurais Recorrentes diferem-se pela presença de ao menos uma conexão de feedback entre os neurônios. Este loop permite que o resultado processado no passo anterior componha e contribua com o resultado seguinte, por isso são consideradas redes com memória. Elas também podem ser parcial ou totalmente recorrentes, onde todos os neurônios são conectados entre si. Isso permite que as redes façam processamento temporal, aprendam sequências, realizem reconhecimento de padrões, associação ou predição temporal.
O perceptron de multicamadas consiste em um sistema de neurônios ou nós interconectados, representando um mapeamento não linear entre um vetor de entrada e um vetor de saída. Os nós são conectados por pesos e sinais de saída que são gerados através de uma função da soma das entradas para o nó e modificadas por uma simples transferência não linear, ou função de ativação.
A superposição de muitas funções de transferência não lineares é que permite que o perceptron de multicamadas aproxime funções extremamente não lineares. A saída de um nó é escalonada pelo peso de conexão e alimentada para ser uma entrada para nós na próxima camada da rede. Isso implica uma direção de processamento de informações, portanto, o perceptron multicamadas é conhecido como uma rede neural feed-forward.
A arquitetura de um perceptron multicamadas é variável, mas em geral consiste em várias camadas de neurônios. Um perceptron multicamadas pode ter uma ou mais camadas ocultas e, finalmente, uma camada de saída.
Perceptrons multicamadas são totalmente conectados e têm a capacidade de aprender por meio do treinamento. Este processo requer um conjunto de dados próprios para isso, que consiste em uma série de vetores de entrada e saída associados. Durante o treinamento, o perceptron multicamadas é repetidamente apresentado com os dados selecionados para isso e os pesos na rede são ajustados até que ocorra o mapeamento de entrada-saída desejado.
É importante ressaltar que perceptrons multicamadas aprendem de maneira supervisionada. Portanto, no treinamento, a saída do perceptron multicamadas para um dado vetor de entrada pode não ser igual à saída desejada. Um sinal de erro é definido como a diferença entre a saída desejada e a real. O treinamento usa a magnitude desse sinal de erro para determinar em que grau os pesos na rede devem ser ajustados para que o erro geral do perceptron multicamadas seja reduzido.
Redes neurais convolucionais (CNN) consistem em um sistema de neurônios interconectados com a diferença de que cada neurônio possui um peso e uma tendência de aprendizado. Outra diferença que define esta rede é o fato de utilizar operações matemáticas lineares, chamadas convoluções, ao invés da tradicional multiplicação geral de matrizes em pelo menos uma de suas camadas. A camada oculta é composta da camada convolucional, camada de pooling, e uma camada totalmente conectada (FC), além das camadas de normalização. Enquanto a camada de convolução tem a finalidade de mesclar dois conjuntos de informações, a camada de pooling é usada para reduzir a dimensionalidade, associando a saída do agrupamento de neurônios em uma camada de neurônio único. Por fim, a camada FC conecta todos os neurônios de uma camada a todos de outra camada.
Estas Redes Neurais Artificiais foram descritas em 1998 por Fukushima , sendo amplamente utilizadas no reconhecimento facial, processamento de imagens, detecção e localização de objetos e também reconhecimento óptico de caracteres (OCR) para digitalizar texto e tornar possível o processamento de linguagem natural em documentos analógicos e manuscritos, onde as imagens são símbolos a serem transcritos. Abaixo, podemos ver a arquitetura da rede LeNet-5 proposta por LeCun et al. 1990, utilizada para reconhecimento de números escritos à mão.
Fonte: Jieyuan Wang et al 2017 IOP Conf. Ser.: Mater. Sci. Eng. 231 012002
O modelo LSRM foi projetado para eliminar um grande problema das redes recorrentes, o vanishing gradient. Ele ocorre porque certas funções de ativação, como a função sigmóide, transformam um grande espaço de entrada em um intervalo de 0 e 1. Portanto, uma grande mudança na entrada da função sigmóide causa uma pequena mudança na saída, fazendo com que a derivada se torne pequena e, consequentemente, o processo de treinamento mais difícil. A LSRM evita este fenômeno usando um carrossel de erro constante (CEC), que mantém o sinal de erro dentro de cada unidade da célula.
Uma unidade LSTM é composta por uma célula, um portão de entrada, um portão de saída e um portão de esquecimento. A célula lembra valores em intervalos de tempo arbitrários e os três portões regulam o fluxo de informações associadas à célula, interrompendo ou permitindo seu fluxo. O portão de entrada determina quanto das informações da camada anterior são armazenadas na célula. O portão de saída assume o trabalho na outra extremidade e determina o quanto a próxima camada sabe sobre o estado dessa célula. Por fim, o portão esquecimento permite que a rede reinicie seu estado. O diagrama abaixo mostra as células de memórias e seus portões.
Fonte: J. Donahue et al.2017, doi: 10.1109/TPAMI.2016.2599174
As Redes Neurais Artificiais LSRM são empregadas por grandes empresas de tecnologia como Google em suas aplicações de reconhecimento de fala, e traduções automáticas através da ferramenta Google Translate. O Facebook utiliza LSRM para realizar traduções e a Amazon utiliza o modelo para melhorar as funcionalidades da sua assistente virtual Alexa.
Deep Belief Networks (DBN) ou Redes de Crença Profunda, também conhecidas como máquina de Boltzmann profunda, é um modelo de geração de probabilidade. Consiste em várias máquinas de Boltzmann restritas (RBMs), que podem ser divididas em camadas visíveis, camadas ocultas e uma rede neural backpropagation. Todos os neurônios entre as camadas visíveis e ocultas estão interligados e são bidirecionais. No entanto, devido à estrutura especial da máquina de Boltzmann restrita, a DBN não possui neurônios interconectados na camada.
O algoritmo de treinamento da rede DBN contém duas etapas: pré-treinamento não supervisionado e ajuste fino supervisionado. O método comumente usado no processo da etapa de treinamento não supervisionado é o algoritmo greedy, ou seja, ele encontra a melhor solução local, que é considerada suficiente para a aplicação em questão, mas que pode não representar a melhor solução global.
DBN são usados em Processamento de Linguagem Natural, como na indústria farmacêutica, atuando no processo de descobrimento de novas drogas, tratamento de imagens de exames e exames médicos, como Eletroencefalografia.
Um autoencoder é um algoritmo de aprendizado não supervisionado. Tem como objetivo definir os valores alvo de forma que sejam iguais à entrada original. Ele é composto por três fases distintas:
Codificadora: um conjunto de filtros lineares feed-forward parametrizados pela matriz de peso e polarização (ou seja, rede neural feed-forward);
Ativação: um mapeamento não linear que transforma os coeficientes codificados no intervalo 0 e 1;
Decodificadora: um conjunto de filtros lineares reversos que produzem a reconstrução da entrada (ou seja, retropropagação).
Deep auto-encoders são criados através do empilhamento de auto-encoders (Stack auto-encoders). O pré-treinamento não supervisionado da arquitetura é feito uma camada de cada vez. Quando todas as camadas são pré-treinadas, uma camada de classificação é adicionada e a rede profunda pode ser ajustada. A vantagem de usar mais camadas ocultas do que um único auto-codificador, é que dados de entrada de alta dimensão podem ser reduzidos em termos de complexidade. Diferentes variações de AEs foram desenvolvidas, como Sparse Autoencoders, Denoise Autoencoders, Variational Autoencoders, Convolutional Autoencoders, etc.
Autoencoders são usados em Processamento de Linguagem Natural, Reconhecimento Automático de Fala (ASR), clusterização de documentos etc.
Fonte: Bahi, Meriem & Batouche, Mohamed. (2018)
As GANs consistem em quaisquer duas redes (embora geralmente uma combinação de FFs e CNNs) onde uma é encarregada de gerar conteúdo e a outra de julgar o conteúdo. O gerador tenta capturar a distribuição de exemplos verdadeiros para a geração de novos exemplos de dados. O discriminador é geralmente um classificador binário, que discrimina exemplos gerados dos exemplos verdadeiros com a maior precisão possível. A ideia básica por trás do aprendizado adversário é que o gerador tenta criar exemplos realistas para enganar o discriminador. O discriminador tenta distinguir exemplos falsos de exemplos verdadeiros. A otimização termina em um ponto mínimo em relação ao gerador e máximo em relação ao discriminador.
As Redes Generativas Adversárias estão presentes em aplicações de segurança da informação, identificando qualquer manipulação de imagens ou vídeos para uso criminoso; na indústria médica através da comparação de imagens de tumores com imagens de órgãos saudáveis; na indústria de jogos e filmes como um facilitador na geração automática de modelos 3D, em edição de fotografias, etc.
Neste artigo falamos um pouco sobre o universo de redes neurais artificiais e apresentamos algumas das arquiteturas mais utilizadas. Nos próximos posts abordaremos cada arquitetura individualmente através de aplicações práticas para ajudar no entendimento.