Exercício 3 - MLP
Implemente uma rede neural e utilize o treinamento com o algoritmo de retropropagação para modelar as seguintes funções:
\(\displaystyle f(x) = \frac{1}{x},\;\; 1\le x \le 100\)
\(f(x) = {\rm log}_{10}x,\;\; 1\le x \le 10\)
\(f(x) = {\rm exp}(-x),\;\; 1\le x \le 10\)
\(\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:
Os códigos utilizados para treinar e fazer a inferência com os seus modelos;
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;
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.