Exercício 3 - MLP

Implemente uma rede neural e utilize o treinamento com o algoritmo de retropropagação para modelar as seguintes funções:

  1. \(\displaystyle f(x) = \frac{1}{x},\;\; 1\le x \le 100\)

  2. \(f(x) = {\rm log}_{10}x,\;\; 1\le x \le 10\)

  3. \(f(x) = {\rm exp}(-x),\;\; 1\le x \le 10\)

  4. \(\displaystyle f(x) = {\rm sen}(x),\;\; 0\le x \le \frac{\pi}{2}\)

  • Implemente uma rede neural com uma entrada, um número variável de neurônios na camada oculta e uma saída. Para tanto, uma sugestão é implementar duas funções:
    • Treinamento, que recebe o sinal de entrada, o passo de adaptação, o número de épocas e o número de neurônios da camada oculta e retorna os pesos da rede treinada e um sinal com o valor da função custo ao longo das épocas;
    • Inferência: que recebe os pesos da rede, o número de neurônios na camada oculta (também poderia obter essa informação a partir dos pesos) e uma entrada e retorna a saída da rede.
  • Utilize uma função sigmoidal como função de ativação para os neurônios da camada oculta e da camada de saída (note que as funções sempre retornam valores entre 0 e 1 nos intervalos indicados);
  • Faça a implementação usando apenas vetores, tensores e operações aritméticas, sem utilizar recursos de frameworks para redes neurais como Keras ou PyTorch;
  • Crie dois conjuntos de dados, um deles para treinamento da rede e outro para o teste. Considere entre 1000 a 10000 pontos para treinamento e 1000 para teste;
  • Avalie o desempenho da rede para cada caso, calculando o erro quadrático médio obtido no conjunto de teste e plotando gráficos da funções e das aproximações obtidas com a rede, considerando os seguintes números de neurônios na camada oculta: 3, 4, 5, 10, 15, 20, 50, 100.

Ao final do exercício, você deverá apresentar:

  1. Os códigos utilizados para treinar e fazer a inferência com os seus modelos;

  2. Um conjunto de gráficos das aproximações obtidas para cada função usando dados de teste, com os diferentes números de neurônios na camada oculta;

  3. Uma tabela com o erro quadrático médio obtido no teste, para cada função, com diferentes números de neurônios na camada oculta.

A sugestão é que o relatório seja elaborado utilizando um Jupyter Notebook e a linguagem Python, já que essas são as ferramentas que estamos utilizando neste bloco do curso. No entanto, isso não é obrigatório e você pode usar outra linguagem de programação, caso queira.

Instruções para entrega

  • O exercício pode ser feito em dupla ou individualmente;

  • A entrega deve incluir:

    • Um vídeo de no máximo 40s, mostrando a resolução do exercício;
    • Os códigos-fontes dos programas, preferencialmente organizados em um Jupyter Notebook, descrevendo o experimento e mostrando como foram obtidos os resultados solicitados.
  • A correção será feita baseada no vídeo. Quando o professor/pesquisador ficar com alguma dúvida, serão consultados os códigos-fonte;

  • Sobre o vídeo:

    • Deve incluir áudio descrevendo o experimento;
    • Gravem a tela do computador usando celular ou usando algum programa de captura de tela (por exemplo Zoom, Google Meet, ou OBS Studio);
    • No início, deve aparecer o rosto e algum documento do aluno que gravou o vídeo (como a carteira USP, RG, CNH, etc);
    • No caso de entrega em dupla, não é necessário que os dois componentes apareçam no vídeo. No entanto, alternem o apresentador ao longo das entregas dos exercícios e não esqueçam de incluir os dois nomes no início do vídeo.
    • Procurem convencer o espectador do vídeo, que vai corrigir o exercício que fizeram os exercícios computacionais solicitados e que eles estão funcionando corretamente. Tentem fazer um bom aproveitamento do tempo para apresentar os resultados solicitados, respeitando o limite de 40s e não acelerem a velocidade do vídeo;
  • Sobre os códigos-fonte:

    • Incluir o nome do(s) aluno(s) no início do programa;
  • Sobre o envio no Moodle:

    • Apenas um aluno de cada dupla deve enviar o vídeo no Moodle;
    • Podem ser enviados o arquivo de vídeo (.mkv, .mp4, .avi, etc.) ou um link para o vídeo (Youtube, Google Drive, etc);
      • No segundo caso, certifiquem-se que todos os professores/pesquisadores (magno.silva@usp.br, hae.kim@usp.br, renatocan@lps.usp.br, wesleybeccaro@usp.br) tenham acesso ao seu vídeo.
    • Não se esqueçam de escrever o nome dos componentes da dupla (ou do único aluno, escrevendo: “exercício feito individualmente”) em três lugares diferentes: no campo “comentários sobre o envio” no Moodle, no início do vídeo e no início dos códigos-fonte.