Skip to main content

Utilizando MLPs

Atividade com prazo de entrega até 03/06, mas sugiro fortemente já resolver em sala ;)

1. Objetivo

Implementar um MLP para resolver o problema do XOR.

2. Enunciado

Considerando a implementação do Perceptron abaixo:

class Perceptron:
def __init__(self, weights=None, bias=-1, activation_threshold=0.5):
if weights == None:
self.weights = np.array([1, 1])
else:
self.weights = np.array(weights)
self.bias = bias
self.activation_threshold = activation_threshold

def _heaviside(self, x):
"""
Implementa a função delta de heaviside (famoso degrau)
Essa é uma função de ativação possível para os nós da rede neural.
"""
return 1 if x >= self.activation_threshold else 0

def _sigmoid(self, x):
"""
Implementa a função sigmoide
Essa é uma função de ativação possível para os nós da rede neural.
"""
return 1/(1 + math.exp(-x))

def _activation(self, perceptron_output):
"""
Implementação da função de ativação do perceptron
Escolha uma das funções de ativação possíveis
"""
return self._heaviside(perceptron_output)

def forward_pass(self, data):
"""
Implementa a etapa de inferência (feedforward) do perceptron.
"""
weighted_sum = self.bias + np.dot(self.weights, data)
return self._activation(weighted_sum)

Modifique a implementação para que seja possível treinar o perceptron e de modo que ele tenha uma cama escondida. Para isso, deve-se:

  1. Implementar uma função de custo para avaliar o resultado da predição
  2. Implementar o processo de treinamento utilizando gradiente descendente e backpropagation
  3. Modificar o perceptron para ter uma camada escondida

Após essa implementação, valide o MLP criado treinando-o para funcionar como uma porta XOR.

Para auxiliar na sua implementação, considere o artigo abaixo:

How neural networks solve the XOR problem

3. Padrão de entrega

ATENÇÃO

Esses são os critérios mínimos para que eu considere a atividade como entregue. Fique atento, pois o não cumprimento de qualquer um desses critérios pode, no melhor dos casos, gerar um desconto de nota e, no pior deles, invalidar a atividade.

  1. A atividade deve ser feita em um repositório aberto no Github. Seu link deve ser fornecido no card da adalove;
  2. No README do repositório deve ter instruções claras de como instalar e rodar o sistema criado, comandos em blocos de código e uma expliação sucinta do que fazem;
  3. Ainda no README, deve haver um vídeo gravado demonstrando plenamente o funcionamento do sistema criado;

4. Padrão de qualidade

Supera
(9,0 - 10,0)
Atende
(6,5 - 9,0)
Quase lá
(4,0 - 6,5)
Insuficiente
(1,0 - 4,0)
Desalinhado
(0,0 - 1,0)
Além do MLP conseguir reproduzir consistentemente o comportamento da porta XOR, ainda há uma implementação extra do mesmo MLP utilizando o torch (pyTorch)O MLP consistentemente consegue ser treinado para representar uma porta lógica XOR.O MLP foi implementado corretamente, mas ainda não é capaz de representar uma porta lógica XOR consistentemente.Há erros na implementação das camadas escondidas do MLP.Entrega fora de contexto.