Apreciação pessoal e crítica

Na qual discute-se o trabalho, estudo e considerações subjetivas por parte do aluno.

Escolha do tema e dificuldades

A escolha do tema foi feita em conjunto com o Prof. Denis, orientador do TCC. Como durante o começo do ano já estava cursando a matéria MAC0318 (Introdução a Programação de Robôs) e era do meu interesse continuar o mesmo assunto da minha Iniciação Científica, i.e. redes soma-produto, o Prof. Denis sugeriu combinar os dois assuntos, com a adição de um novo elemento: aprendizado discriminativo.

Como já havia estudado a teoria necessária para a parte não-hardware do TCC na minha IC, a implementação do modelo e toda a parte de aprendizagem de máquina foi a parte mais tranquila do trabalho. A parte de implementação no robô, no entanto, foi o maior problema.

Durante o primeiro semestre, cursando MAC0318, pude perceber quão diferente é o mundo da teoria e da prática. Algoritmos que funcionavam de forma "comportada" em simulações, tornavam-se dor de cabeça ao serem implementadas nos robôs. De fato, durante o TCC, a parte mais complicada foi a implementação no robô e os diversos detalhes do sistema do Raspberry Pi. Além disso, performance em um computador de mesa não significa performance em um minicomputador como o Raspberry Pi. Muitas otimizações tiveram de ser feitas para que inferência fosse possível no robô. Apesar das dificuldades e frustrações com a parte de hardware, acho que aprendi bastante.

Na minha opinião, este TCC foi bem completo do ponto de vista de computação, já que tive de aprender desde a parte matemática de se computar o gradiente da log-verossimilhança de um modelo complexo e entender probabilidade e distribuições; até a parte de engenharia, onde precisei tratar passagem de informação em bytes de um dispositivo ao outro e otimizar código paralelo.

Disciplinas relevantes

Durante o TCC usei diversos assuntos que aprendi durante a graduação. Na lista abaixo enumero as disciplinas mais relevantes, seguidas de uma breve descrição dos assuntos abordados nas disciplinas que foram usados neste trabalho.

Disciplinas de graduação

Cálculo Diferencial e Integral I, II e III (MAT0111, MAT0121, MAT0211)

Para conseguir entender e calcular as derivações feitas para achar o gradiente da log-verossimilhança é preciso entender o básico de Cálculo. O capítulo de aprendizagem paramétrica da monografia é praticamente um exercício de cálculo. As três matérias de cálculo integral e diferencial me ajudaram muito a entender como os artigos originais chegaram em seus respectivos resultados.

Introdução à Probabilidade e à Estatística I e II (MAE0121, MAE0212)

Entender distribuições de probabilidade e o método de máxima verossimilhança foram fundamentais para o TCC. Além disso, a disciplina MAE0212 em especial mostrou como computar se duas variáveis são estatisticamente independentes, o que foi usado no algoritmo de Gens-Domingos.

Estruturas de Dados (MAC0323)

Várias estruturas de dados foram usadas durante este TCC. Filas, pilhas, heaps e listas ligadas foram usadas extensivamente.

Análise de Algoritmos (MAC0338)

Uma das matérias mais importantes para este TCC. Foram usados diversos conceitos aprendidos nesta matéria. Grafos, algoritmo de Kruskal para MSTs, complexidade, union-find, programação dinâmica e muitos outros assuntos foram cobertos por essa disciplina.

Atividade Curricular em Pesquisa (MAC0215)

Apesar de pessoal para cada um, esta matéria permitiu que eu pudesse me dedicar mais à iniciação científica. Os assuntos abordados na IC cobriram grande parte do que foi feito no TCC.

Sistemas Operacionais (MAC0422)

Tanto na parte de treinamento do modelo, ao usar nohup, pipes, redirecionamento e nice; como também na parte da implementação no robô.

Inteligência Artifical (MAC0425)

Esta disciplina serviu como uma introdução a vários modelos e técnicas de inteligência artificial. Em particular esta matéria me introduziu a redes bayesianas, que abriu o caminho para meus estudos de redes soma-produto.

Programação Concorrente (MAC0438)

Muito do código teve de ser paralelizado por questão de eficiência. Em especial inferência teve de ser o mais paralelizado possível para obter predições em tempo real. Esta matéria foi fundamental para isso.

Algoritmos em Grafos (MAC0328)

Muito do que foi implementado usou algoritmos descritos nessa disciplina. Ordem topológica, pré-ordem, Kruskal, busca em profundidade e largura, componentes conexas, etc.

Introdução à Programação de Robôs Móveis (MAC0318)

Fundamental para a parte da robótica.

Introdução ao Aprendizado de Máquina (MAC0460)

Tanto pelas formalizações quanto pelos métodos de validação. Também proporcionou uma visão geral de aprendizagem e suas técnicas.

Noções de Probabilidade e Processos Estocásticos (MAE0228)

Foram vistos vários assuntos relacionados a probabilidade e modelos probabilísticos que achei que contribuiu bastante para me familiar com vários assuntos abordados pelo TCC.

Disciplinas de Pós-graduação

Modelos Probabilísticos Baseados em Grafos (MAC6916)

Fundamental para entender modelos probabilísticos baseados em grafos, como redes bayesianas, redes de markov e redes soma-produto.

Aprendizado de Máquina em Visão Computacional (MAC6914)

Vários tópicos em classificação de imagens vistos na disciplina foram muito úteis para o TCC.

Futuro

Planejo aprofundar-me no estudo de modelos probabilísticos baseados em grafos, aprendizagem de máquina e redes soma-produto durante o mestrado.