Como eu me tornei um Engenheiro de Machine Learning/Deep Learning
Trabalho como Engenheiro de Machine Learning desde 2016, quando fui contratado pela empresa que trabalho atualmente. De lá pra cá, foram muitos cursos concluídos, muito conhecimento obtido, algumas conquistas, mas também muitas frustações, fracassos e desafios que tive de enfrentar. Hoje, sou Google Developer Expert em Machine Learning e tenho sistemas de Machine Learning e Deep Learning em produção que avaliam mais de 2,2 milhões de imagens por mês em 6 estados do Brasil.
Nesse artigo, vou falar como foi essa caminhada. Vou mostrar os cursos que fiz (quais que valem a pena e quais não valem), como consegui um emprego e como é trabalhar com isso no dia-a-dia. Se você também tem interesse em se tornar um Eng. de Machine/Deep Learning ou quer apenas saber como eu virei um, é só continuar lendo o resto do artigo.
O Fracasso
Muitas histórias começam com um fracasso. A minha não foi diferente. Em Outubro de 2015, fui para Londres começar um PhD. Após uma revisão bibliográfica da literatura, eu e meu orientador definimos que seria interessante tentar utilizar Redes Neurais para resolver o problema do meu doutorado. Logo, em Dezembro de 2015, foi quando tive meu primeiro contato com Redes Neurais e Deep Learning. Lembro muito bem que passei o Natal e o Ano-novo daquele ano estudando sobre isso através das notas de aula desse curso de Stanford. Além disso, também foi em Londres meu primeiro contato com a linguagem Python, onde aprendi através desse curso da CodeCademy.
Porém, em Janeiro de 2016, recebi um email da universidade informando que meu financiador não tinha pago minhas taxas (tuition fees) e que, caso ele não pagasse, quem teria que arcar com o prejuízo seria eu. Na época, as minhas taxas eram £12.500 libras/ano, onde cada libra valia mais de 6 reais. Obviamente, eu não pudia arcar com essas taxas nem tinha tempo para esperar meu financiador pagá-las. Logo, me vi obrigado a cancelar minha matrícula e voltar pro Brasil.
Entrando no Mundo do Machine/Deep Learning
De volta ao Brasil, sem PhD e sem emprego, resolvi aproveitar o tempo livre para estudar mais sobre Machine/Deep Learning. Primeiramente, resolvi focar em aprender mais sobre Python, Numpy, Matplotlib, Pandas e Jupyter Notebooks através de vídeos no Youtube mesmo. Parte do que estudei na época, acabei colocando nesse repositório.
Depois, resolvi fazer cursos na Udacity e Udemy. Abaixo, segue a lista com o link para os cursos que fiz. Não tem todos, pois alguns eu não acho que são bons ou relevantes o suficiente.
Udacity:
- Intro to Data Analysis
- Intro to Descriptive Statistics
- Intro to Inferential Statistics
- Intro to Machine Learning
- Machine Learning
- Deep Learning
Udemy:
Desde que comecei a estudar sobre Machine Learning, eu venho mantendo um repositório no GitHub onde implemento cada algoritmo que estudo utilizando apenas a biblioteca Numpy em Jupyter Notebooks. Atualmente, já tem +10 algoritmos implementados, além de métodos de análise e normalização de atributos.
A Oferta de Emprego
Em Agosto de 2016, recebi a primeira proposta de emprego para trabalhar como Engenheiro de Machine Learning. A proposta era trabalhar como freelancer para desenvolver um sistema de detecção e classificação de semáforos 🚦. Tal projeto acabou virando o primeiro projeto de ML da empresa. Mais detalhes você pode conferir nesse outro post e o resultado final você pode conferir nesse vídeo:
Depois desse projeto, meu contrato como freelancer foi estendido para mais 3 projetos. Um deles, envolvia a detecção de placas "pare" 🛑:
Em outro, eu estimava a distância pro carro da frente utilizando apenas uma webcam 🚗 ↔️ 🚗, ou seja, sem nenhum tipo de sensor de distância nem nada. Tudo baseado em imagens apenas:
Por fim, também desenvolvi um detector de faces/cabeças para contar pessoas em salas de aula 👨👩👧👦 👨👨👧👩👩👧👦. Novamente, através do Machine Learning, consegui resultados bem superiores a detectores padrões de face como os das bibliotecas OpenCV e Dlib.
Depois desse projetos, tive a carteira de trabalho assinada em Abril/2017. Meu primeiro projeto já como empregado regular envolvia identificar se uma pessoa apresentada pra câmera era realmente uma pessoa ou apenas a foto/vídeo dela 🎥🙍✅. O resultado, você confere nesse vídeo:
Repare que, no vídeo acima, a mensagem no canto superior nunca fica verde na presença de uma foto/vídeo. Entretanto, quando a pessoa é "de verdade", a mensagem fica verde e, logo em seguida, a análise é resetada.
Todos os projetos que citei até agora envolviam apenas ML. Apesar de que eu estava sempre estudando sobre Deep Learning, até então eu não tinha tido a chance de aplicar o que sabia na prática. Porém, tudo mudou quando, em Agosto de 2017, a empresa que trabalho pagou um curso para mim sobre Deep Learning lá em Campinas-SP. Esse curso presencial foi um dos marcos na minha carreira com Deep Learning. Nesse curso, meu conhecimento sobre DL foi intensamente ampliado. Apesar de ser um curso de curta duração (24h), aprendi na prática sobre Transferência de Conhecimento, Fine-tuning, Embeddings, Style Transfer, GANs e muitos outros conceitos que tinha pouco ou quase nenhum conhecimento. Esse curso para mim foi tão satisfatório que lembro que prometi a mim mesmo:
"Em 2 anos, quero fechar o departamento de pesquisa da minha empresa!"
O site oficial desse curso pode ser encontrado aqui.
Outro curso importante na minha formação foi a Deep Learning Brasil Summer School em Fevereiro de 2018. Nesse curso, além de ser aluno, também tive a oportunidade de ensinar +50 pessoas sobre o básico de Redes Neurais: Perceptron, Adaline, Neurônio Sigmoid e Backpropagation. Ao final da minha aula, implementei junto com os alunos uma Rede Neural do zero utilizando apenas Numpy. Você pode conferir o repositório da Summer School aqui (a minha aula foi na segunda de manhã). Além disso, também tive a oportunidade de conhecer o prof. Anderson Soares, um dos profissionais mais respeitados em Deep Learning no Brasil.
Depois desses cursos, comecei a implantar Deep Learning em praticamente todos os projetos da minha empresa. Sem nem perceber, estava transformando a empresa que trabalho em uma empresa de Deep Learning. Hoje, mais da metade dos nossos projetos são baseados puramente em Deep Learning e outros 40% têm Machine Learning como método principal.
Ou seja, +90% dos nossos projetos hoje são baseados em Machine Learning ou Deep Learning! ✌️
Dentre os projetos finalizados com Deep Learning destaco, primeiramente, um regressor dos ângulos da face 👨📐 (você pode conferir como eu treinei ele aqui):
Um classificador de chapéu 🤠🎩👒(você pode conferir como eu fiz aqui):
E um segmentador de face em 8 classes 👨👚👁️🎩:
Mesmo trabalhando com ML/DL diariamente, eu nunca paro de fazer cursos. O objetivo é se manter atualizado das última tendências e técnicas além de sempre manter fresco na minha mente os conceitos (do básico ao avançado). Dentre os últimos cursos que fiz, destaco a Deep Learning Specialization do Andrew NG (meu preferido até hoje) e o Deep Learning Nanodegree da Udacity.
Como é trabalhar com Machine/Deep Learning no dia-a-dia
Trabalhar com ML & DL no dia-a-dia é algo bem interessante. Eu estimo que 50% do tempo (ou talvez mais) eu passo com os dados: adquirindo, limpando, mexendo, melhorando, analisando, etc…). Outros 40% eu gasto fazendo o treinamento dos modelos. Antigamente, eu fazia questão de botar a mão na massa e criar meus próprios modelos do começo ao fim. Hoje em dia, eu já me rendi a utilização de modelos pré-treinados, só aplicando transfer learning ou fine-tuning. A maior parte dos modelos, eu pego ou da TensorFlow Object Detection API ou do TensorFlow Hub. Entretanto, na maioria dos problemas da empresa, essas técnicas nem sempre podem ser utilizadas. Nesses casos, eu tenho que treinar meus próprios modelos do zero (o que eu acho muito mais divertido! 💪). Finalmente, o restante do tempo eu gasto fazendo deploy do modelo em produção. Todos os meus modelos eu treino em Python, enquanto o deploy sempre é feito em C++.
Vale salientar que utilizar o TensorFlow em C++, na época, não foi tarefa fácil e me rendeu até esse outro post no Medium (o meu 2º post mais lido até hoje!). Hoje em dia, colocar modelos TensorFlow em produção no C++ me custa menos de 1 hora! (Graças ao conjunto de classes que escrevi para abstrair o TensorFlow no C++😎).
Dicas para quem também quer virar um Eng. de Machine/Deep Learning
Se você se interessa pela área e tem interesse em trabalhar com isso ou apenas se aprofundar mais no assunto, as maiores dicas que eu posso lhe dar são:
- 🎓 Estude muito: eu sei que parece cliché, mas essa é a realidade. Se você é iniciante, comece estudando estatística básica, cálculo e álgebra. Depois, foque em aprender Python e estude o framework Keras. Se precisar ir mais a fundo, aprenda TensorFlow. Além disso, se você já estuda sobre isso há um tempo, procure ficar antenado nos últimos algoritmos e técnicas que sempre vêm surgindo para saber se eles podem te ajudar e como a área está evoluindo. Além disso, siga as pessoas que trabalham com isso no Twitter/GitHub para saber o que eles andam pesquisando também.
- 🌎 Procure estudar com dados do mundo real: dados do mundo real são muito mais difíceis que bancos de dados já difundidos (MNIST, Iris, etc…). Em geral, inconsistências, ausência de dados, outliers, entre outros problemas, nos obrigam a analisar profundamente os dados na busca por padrões que podem ser úteis na hora escolher um modelo a ser treinado. Além disso, os dados também vão te mostrar como é trabalhar na prática com Machine Learning, onde muitas vezes você perde mais tempo mexendo nos dados do que treinando propriamente um modelo. Um bom lugar para encontrar datasets assim é no Kaggle.
- 📖 Crie um portfólio: coloque no seu portfólio pessoal os problemas que você vai resolvendo. De preferência, coloque o código no GitHub, faça um post sobre a sua solução (aqui no Medium mesmo, por exemplo) e até, quem sabe, um vídeo! Se possível, escreva em inglês — tanto o código quanto o post. Compartilhe-os no Facebook, LinkedIn, seu site pessoal e em qualquer outro lugar que você considerar relevante. Você pode conferir o meu portfólio no meu site pessoal, no meu GitHub e no meu YouTube.
🚀 Sabe o que é mais legal que ser um MLE? Um MLE com camiseta da Insider! Use o código REDESNEURAIS e ganhe 15% de desconto nas suas compras. Invista em roupas que usam tecnologia e ciência de verdade, assim como fazemos em nossas soluções de Machine Learning! 🌐 Insider Store
E, então, gostou da minha trajetória ou dos materiais que compartilhei? Comenta aí o que você achou!