O problema XOR em Redes Neurais.
Introdução
Este é o primeiro de uma série de posts explorando implementações de redes neurais artificiais (ANN). O objetivo do artigo é ajudar o leitor a obter uma intuição dos conceitos básicos antes de passar para as implementações algorítmicas que se seguirão.
Nenhum conhecimento prévio é assumido, embora, no interesse da brevidade, nem toda a terminologia seja explicada no artigo. Em vez disso, são fornecidos hiperlinks para a Wikipédia e outras fontes onde leitura adicional pode ser necessária.
Este é um grande tópico. As ANNs têm uma grande variedade de aplicações e podem ser usadas para aprendizagem supervisionada, não supervisionada, semi-supervisionada e de reforço. Isso é antes de você entrar em arquiteturas de problemas específicos dentro dessas categorias. Mas nós temos que começar em algum lugar, então para restringir o escopo, vamos começar com a aplicação de ANNs a um problema simples.
O problema XOr
O problema XOr, ou “exclusivo ou”, é um problema clássico na pesquisa de ANNs. É o problema de usar uma rede neural para prever as saídas dos portões lógicos XOr, dadas duas entradas binárias. Uma função XOr deve retornar um valor verdadeiro se as duas entradas não forem iguais e um valor falso se elas forem iguais. Todas as possíveis entradas e saídas previstas são mostradas na figura 1.
XOr é um problema de classificação e pelo qual as saídas esperadas são conhecidas antecipadamente. É, portanto, apropriado usar uma abordagem de aprendizagem supervisionada.
>Na superfície, XOr parece ser um problema muito simples, entretanto, Minksy e Papert (1969) mostraram que este era um grande problema para arquiteturas de redes neurais dos anos 60, conhecidas como perceptrons.
Perceptrons
Como todas as ANNs, o perceptron é composto de uma rede de unidades, que são analógicas aos neurônios biológicos. Uma unidade pode receber um input de outras unidades. Ao fazer isso, ela toma a soma de todos os valores recebidos e decide se vai encaminhar um sinal para outras unidades às quais está conectada. Isto é chamado de ativação. A função de ativação utiliza algum meio ou outro para reduzir a soma dos valores de entrada a 1 ou 0 (ou um valor muito próximo de 1 ou 0), a fim de representar a ativação ou a falta dela. Outra forma de unidade, conhecida como unidade de polarização, é sempre ativada, normalmente enviando um 1 codificado para todas as unidades às quais está conectada.
Perceptrons incluem uma única camada de unidades de entrada – incluindo uma unidade de polarização – e uma única unidade de saída (ver figura 2). Aqui uma unidade de polarização é representada por um círculo tracejado, enquanto outras unidades são mostradas como círculos azuis. Há duas unidades de entrada não polarizadas que representam os dois valores de entrada binários para XOr. Qualquer número de unidades de entrada pode ser incluído.
O perceptron é um tipo de rede feed-forward, o que significa que o processo de geração de uma saída – conhecido como propagação para frente – flui em uma direção da camada de entrada para a camada de saída. Não há conexões entre as unidades na camada de entrada. Em vez disso, todas as unidades na camada de entrada são conectadas diretamente à unidade de saída.
Uma explicação simplificada do processo de propagação para frente é que os valores de entrada X1 e X2, juntamente com o valor de polarização 1, são multiplicados pelos respectivos pesos W0…W2, e analisados para a unidade de saída. A unidade de saída pega a soma desses valores e emprega uma função de ativação – tipicamente a função de passos Heavside – para converter o valor resultante em 0 ou 1, classificando assim os valores de entrada como 0 ou 1,
É a definição das variáveis de peso que dá ao autor da rede o controle sobre o processo de conversão dos valores de entrada para um valor de saída. São os pesos que determinam onde a linha de classificação, a linha que separa os pontos de dados em grupos de classificação, é desenhada. Se a todos os pontos de dados de um lado de uma linha de classificação for atribuída a classe 0, todos os outros são classificados como 1,
A limitação desta arquitetura é que ela só é capaz de separar pontos de dados com uma única linha. Isto é lamentável porque as entradas XOr não são separáveis linearmente. Isto é particularmente visível se você traçar os valores de entrada XOr em um gráfico. Como mostrado na figura 3, não há como separar as previsões 1 e 0 com uma única linha de classificação.