Na qual discute-se o trabalho, estudo e considerações subjetivas por parte do aluno.
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.
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.
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.
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.
Várias estruturas de dados foram usadas durante este TCC. Filas, pilhas, heaps e listas ligadas foram usadas extensivamente.
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.
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.
Tanto na parte de treinamento do modelo, ao usar nohup, pipes, redirecionamento e nice; como também na parte da implementação no robô.
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.
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.
Muito do que foi implementado usou algoritmos descritos nessa disciplina. Ordem topológica, pré-ordem, Kruskal, busca em profundidade e largura, componentes conexas, etc.
Fundamental para a parte da robótica.
Tanto pelas formalizações quanto pelos métodos de validação. Também proporcionou uma visão geral de aprendizagem e suas técnicas.
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.
Fundamental para entender modelos probabilísticos baseados em grafos, como redes bayesianas, redes de markov e redes soma-produto.
Vários tópicos em classificação de imagens vistos na disciplina foram muito úteis para o TCC.
Planejo aprofundar-me no estudo de modelos probabilísticos baseados em grafos, aprendizagem de máquina e redes soma-produto durante o mestrado.