Muitos alunos demonstraram interesse em realizar IC em 2024. Como meus recursos são limitados, precisarei realizar um processo seletivo. O progresso nas atividades listadas e a profundidade adquirida no assunto serão diferenciais importantes na seleção.

Guia de Estudos para Novos Alunos de IC

Meus projetos utilizam predominantemente redes neurais artificiais e a biblioteca pytorch em Python (além de várias outras). A seguir são dados uma sequência de passos para você começar a estudar o assunto.
  1. Instale o interpretador python (Instruções) e, a seguir, a biblioteca pytorch (Instruções).
  2. Faça o tutorial de como treinar uma rede neural convolucional para classificar fotos como sendo de abelhas ou de formigas para descobrir se você se vê trabalhando com isto.
  3. Ganhe um pouco mais de profundidade realizando o tutorial Deep Learning With Pytorch: A 60 Minute Blitz. Ao final do vídeo você deve compreender o que são:
    • Tensors.
    • Autograd.
    • Computational Graphs.
    • Neural Networks.
    • Loss functions.
    • A métrica de performance acurácia.
    • Conjuntos de treinamento e teste e o propósito de cada um.
    • O processo de treinamento e avaliação de redes neurais.
  4. Realize o tutorial Introduction To Pytorch - Youtube Series. Os vídeos trazem muito do conteúdo do tutorial anterior e você pode passar rápido por estas partes. Contudo, ele também traz coisas novas como o uso de gráficos do tensorboard para acompanhar se o treinamento está indo bem e o uso da captum para tentar compreender o que o modelo aprendeu.
  5. Auto-avalie o quanto você aprendeu dos assuntos tentando resolver um novo problema. A base de dados Chest X-Ray Images (Pneumonia) possui um conjunto de imagens de raio-x de pessoas saudáveis e de pessoas com pneumonia. Realize fine-tuning de uma CNN (sugestão: mobilenet-v2) para classificar automaticamente as imagens. No processo, aprenda:
    • O que é o conjunto de validação, qual a sua diferença para os conjuntos de treino e teste e porque ele é necessário.
    • O que são hiperparâmetros, quais são os mais importantes no treinamento de redes neurais, como ajustá-los usando o conjunto de validação e porque não podemos usar o conjunto de teste para ajustá-los.
    • Os efeitos de usar taxas de aprendizado muito grandes e muito pequenas. Compreender o porquê destes efeitos.
    • O que é uma matriz de confusão e as métricas de performance derivadas precision, recall e f1-score. Em que situações elas são mais adequadas que a acurácia?
  6. Apreda a usar o git via linha de comando e suba o código do projeto acima no github. Adicione um README.md explicando o projeto e adicionando algumas imagens demonstrativas e uma tabela com as métricas de performance que você alcançou. Você deve se sentir muito à vontade com os comandos git clone, git pull, git checkout, git commit e pit push. Idealmente, você deve conhecer também os comandos para gestão de branches.

Próximos Passos

A seguir são dadas atividades que te darão mais profundidade em tópicos mais específicos. As atividades são independentes e não existe prioridade entre elas. Você pode escolher as que mais te chamarem a atenção.
  • [Fácil] Aprenda a usar jupyter notebooks e refaça o tutorial de treinamento de CNNs usando um. Suba o notebook para o github e veja como ele pode ser visualizado no repositório via a interface web.
  • [Fácil] Aprenda a usar o Google Colab para treinar redes neurais usando GPUs do Google. Salve o notebook do colab no github.
  • [Médio] Selecione uma tarefa que você acha interessante no papers with code . Ao clicar na tarefa, veja se ela possui um benchmark. Se sim, veja o modelo que aparece com mais frequência na lista. Entre no github oficial do projeto e tente baixar e usar o modelo pré-treinado. Por exemplo, se você tiver interesse na tarefa de análise de sentimentos de textos, tente baixar o modelo que alguém desenvolveu do github e usar o modelo para classificar textos que você digitar (note que se ele foi treinado com dados em inglês, você deve digitar textos em inglês). Como alguns modelos podem ser bem pesados, é recomendável usar o google colab. Também é uma boa ler o paper para ver se existem modelos de diferentes tamanhos e, se sim, dê preferência pelos menores porque os grandes podem não rodar nem no colab.
  • [Fácil] Use a biblioteca gradio para criar uma interface web para demonstrar o seu modelo.
  • [Fácil] Use as bibliotecas plotly e dash para criar dashboards web interativos para visualização de dados. Use bases de dados do kaggle para produzir novos dashboards.
  • [Fácil] Use a biblioteca pytorch lightning para treinar redes neurais com pytorch usando menos linhas de código. Similar à biblioteca keras para tensorflow.
  • [Médio] Compreenda como disponibilizar o modelo via um webservice usando flask, celery e redis. Pode ser útil pesquisar no google como realizar deploy de modelos.
  • [Fácil] Faça tutoriais de preparação de dados usando pandas. Faça a preparação usando uma nova base de dados do kaggle para praticar. Aprenda como normalizar dados, estratégias para lidar com dados faltantes, como transformar dados não numéricos em numéricos e como remover outliers.
  • [Fácil] Faça tutoriais de visualização de dados usando matplotlib e seaborn. Faça exemplos usando uma base de dados do kaggle.
  • [Fácil e Muito Enriquecedor] Aprenda a usar a biblioteca scikit-learn que tem implementações de vários métodos tradicionais de machine learning. Explorar a página de exemplos pode ser um caminho interessante. Para cada método, estude-o. O canal StatQuest tem explicações MUITO didáticas dos métodos. O livro "Machine Learning: A Probabilistic Approach (Kevin Murphy)" é uma referência muito valiosa.
  • [Médio, mais Teórico e bom para entender em profunfidade o assunto] Existem diversos cursos no youtube que trazem conhecimentos profundos sobre machine learning e redes neurais. Por exemplo, os cursos do prof. Andrew Ng, do prof. Yann LeCun (vencedor do prêmio Turing por contribuições na área de redes neurais), do prof. Geoffrey Hinton (também vencedor do prêmio Turing e, historicamente, o pesquisador mais importante em redes neurais do mundo, na minha opinião) e do prof. Andreas Geiger (um dos melhores pesquisadores dentre os mais jovens, novamente, na minha opinião, e uma referência pessoal). É completamente inviável fazer todos os cursos, mas selecione um dos prof. que você mais se identificar e siga no seu curso. Sempre que possível, faça mini-projetos que te permitam praticar e demonstrar os conhecimentos nas aulas.
  • [Difícil - Quem fizer e de fato compreender tudo está contratado!] Implementar uma rede neural do tipo multilayer perceptron com número variável de camadas ocultas e neurônios por camada oculta e o algoritmo backpropagation sem usar o pytorch (mas podendo usar numpy). Para testar a rede, faça o exemplo de curve fitting abaixo usando ela ao invés do pytorch.
  • [Médio] Aprenda a treinar um algoritmo de detecção de objetos usando o tutorial do pytorch. No processo, você deve compreender a diferença entre detecção de objetos e classificação de imagens, e as funções de perda e métricas de performance mais usadas na tarefa de detecção de objetos.
  • [Médio] Use a biblioteca huggingface para fazer fine-tuning de um vision transformer no problema de classificação de raios-x entre saudáveis e com pneumonia. A menos que você tenha uma placa de vídeo com pelo menos 8GB de VRAM, será necessário usar o Google Colab.
  • [Difícil] Use a biblioteca deeplab-v2 para resolver uma tarefa de segmentação de imagens. No processo, você deve compreender a diferença entre segmentação e classificação de imagens, e as funções de perda e métricas de performance mais usadas na tarefa de segmentação. Aproveite, e estude também o que são as tarefas de segmentação de instâncias e segmentação panóptica.
  • [Médio para Difícil] Faça curve fitting usando uma rede neural do tipo multilayer perceptron usando pytorch. Para isto, gere pares (x, f(x)) para f(x) = sin(x) no intervalo entre [-2PI, PI]. Separe parte dos pares para treinamento e parte para teste. Some valores amostrados de uma distribuição gaussiana (veja a função np.random.normal) aos valores de f(x) no conjunto de treinamento para simular ruído nas medições. Treine a rede neural para predizer o valor de f(x) a partir do valor de x. Use a função erro médio quadrático como função de perda e métrica de performance. Avalie a performance no conjunto de teste. Use a biblioteca matplotlib para produzir gráficos (1) do MSE para os conjuntos de treino e teste durante o treinamento e (2) para visualizar os pontos reais e preditos pela rede neural em comparação com a função seno. Veja como a rede se comporta predizendo os valores de f(x) para x no intervalo de [2PI, 4PI]. Estude o que é interpolação e extrapolação, leia um pouco sobre a relação deles com redes neurais e tente explicar o efeito observado. Avalie a performance da rede para diferentes números de neurônios e de camadas.