BT

Disseminando conhecimento e inovação em desenvolvimento de software corporativo.

Contribuir

Tópicos

Escolha a região

Início Artigos Como ser contratado como Engenheiro de Machine Learning

Como ser contratado como Engenheiro de Machine Learning

Favoritos

Pontos Principais

  • Podemos adquirir conhecimentos relevantes de machine learning lendo livros, fazendo cursos, participando de eventos e trabalhando em projetos;

  • Certifique-se de que o currículo liste as tecnologias que dominou e os projetos práticos que trabalhou;

  • Durante uma entrevista, espere que sejam feitas perguntas técnicas, de insights e de programação sobre o tema;

  • Ao receber um teste técnico, concentre-se em demonstrar as habilidades como se já estivesse trabalhando no projeto. Isso significa que a qualidade do código e a descrição do que faz são tão importantes quanto a abordagem que utilizou.

Nos últimos dois anos, trabalhei muito para melhorar os recursos do machine learning da empresa onde trabalhava. Olhei para centenas de currículos, conduzi mais de 100 entrevistas por telefone, julguei diversas provas de codificação e fiz entrevistas presenciais com dezenas de engenheiros. Muitas vezes as pessoas me perguntam o que devem fazer para se preparar para essas entrevistas, então escrevi esse resumo com algumas dicas e truques.

Passo 1: Obter conhecimentos relevantes

Antes de mandar seu currículo para qualquer empresa, é importante adquirir conhecimentos que o levem a ser contratado. Existem muitos conhecimentos relevantes que o entrevistador procura em um engenheiro de machine learning, por isso é bom obter o máximo que puder. No geral, um bom engenheiro tem uma mix de ciência da computação (habilidades brutas de programação), matemática e estatística (conhecimento do que faz os algoritmos de machine learning funcionarem) e conhecimento de um assunto específico. Neste artigo, vou aprofundar nas partes de ciência da computação, matemática e estatística.

Uma última habilidade a se dominar é a comunicação, a capacidade de explicar para outras pessoas no que estamos trabalhando é algo crítico. Semanas podem passar sem que nenhum dos experimentos produza resultados satisfatórios e são esses momentos onde é importante ter a habilidade de explicar os problemas e como resolvê-los.

Quais tecnologias deve dominar?

Existem muitas linguagens de programação, frameworks e outras tecnologias que podemos dominar para conseguir trabalhar com machine learning. O que escolhermos irá determinar o setor que seremos contratados e, portanto, no que trabalharemos. Temos que escolher com sabedoria. Aqui estão algumas das sugestões e o motivo para dominá-las:

  • Python. Essa linguagem de programação se tornou a principal para treinar os algoritmos de machine learning. Certifique-se de saber quais recursos estão disponíveis para esta linguagem. Além do Python, sugiro que aprenda outra linguagem. Escolha C++ se deseja trabalhar com plataformas embarcadas, Java se desejar usar modelos de machine learning em um ambiente corporativo, R se quiser fazer análise de dados, e por último, mas não menos importante, Lisp se gosta de algoritmos clássicos de IA e processamento de linguagem natural;
  • TensorFlow/Pytorch. O deep learning está crescendo. Existem dois frameworks que dominam o mercado, mas existem diferenças gritantes entre quem usa o quê. Em primeiro lugar, é importante observar que, tradicionalmente, o TensorFlow era mais fácil de usar em um ambiente de implantação enquanto o Pytorch era mais fácil de usar para experimentos. Atualmente, o TensorFlow está tentando tornar a experimentação mais fácil enquanto o Pytorch está trabalhando para facilitar a implantação (inclusive em hardware embarcado). Se o objetivo é pesquisa, recomendo o Pytorch, mas se quiser trabalhar em uma empresa que deseja principalmente atualizar os modelos em um ambiente de produção, aprenderia mais sobre o TensorFlow. Em geral, aprender um framework por completo é melhor do que aprender parcialmente dois, especialmente considerando a velocidade de mudança;
  • Scikit-learn. A maioria dos algoritmos clássicos de machine learning está incluída no Scikit-learn. Se dominá-lo, permitirá a resolução de muitos problemas que envolvam poucos dados de maneira rápida. Se sabe como funcionam os algoritmos desta biblioteca, terá uma vantagem na entrevista técnica;
  • NumPy and Pandas. Quando trabalhamos com dados em Python, é importante selecionar com eficiência os dados de interesse. A maioria dos engenheiros usa o NumPy diariamente para funções básicas. Se tiver critérios de seleção mais avançados, o Pandas começa a se destacar! Vai impressionar os futuros colegas de trabalho selecionando amostras de dados específicos com apenas algumas linhas de código (sem a necessidade daqueles laços de repetição lentos e incômodos);
  • Apache Spark. As empresas que se beneficiarão com machine learning terão uma quantidade absurda de dados. Trabalhar com big data é muito importante, e o Spark irá acelerar enormemente o esforço de desenvolvimento nesta realidade. Observe que, ao trabalhar com big data, também pode ser interessante aprender sobre o Hadoop. Inicialmente, escolheria uma tecnologia para realmente dominar;
  • OpenCV. Se deseja trabalhar com visão computacional, o OpenCV é vital. Ele contém várias funções de processamento de imagem que pode ser usada para montar um protótipo rapidamente ou pré-processar imagens de uma maneira melhor. Também contém muitas abordagens para reconhecer coisas e recursos que pode usar para detectar ou localizar objetos.

O que precisa ler?

Existem vários livros que proverão conhecimentos úteis em machine learning. Pessoas diferentes têm estilos de aprendizagem diferentes e, portanto, precisarão ler livros diferentes. Certifique-se de comprar aqueles com um estilo de ensino que o motive.

Para matemática e estatística recomendo os seguintes livros:

  • Pattern Recognition and Machine Learning, escrito por Bishop. Este é um livro altamente matemático que é a base do machine learning. É um dos livros mais difíceis que já li durante o meu curso universitário. Só recomendaria a leitura se for alguém que gosta de matemática e da abordagem de aprendizagem bottom-up;
  • Deep Learning, de Ian Goodfellow, Yoshua Bengio e Aaron Courville. Outro livro matemático, só que desta vez voltado para redes neurais. Gostei de ler depois de já ter feito alguns experimentos na área para ter uma ideia melhor do que está acontecendo nos bastidores. Ler um livro como este permitirá cruzar a ponte entre "fazer coisas aleatórias com a rede para ver o que acontece" para o lado do "ter uma boa intuição sobre quais parâmetros controlam quais aspectos das redes";
  • Python Machine Learning, de Sebastian Raschka. Este livro pertence ao domínio dos livros práticos. Sebastian conseguiu dar uma visão geral bastante ampla das ferramentas disponíveis no scikit learn e, na edição mais recente, adiciona códigos do TensorFlow a leitura;
  • Artificial Intelligence: A Modern Approach, de Stuart J. Russell e Peter Norvig. O que basicamente tirei deste livro foram a teoria dos jogos e algoritmos de busca. Há também muita teoria da probabilidade e até alguma coisa de robótica! Este livro é muito inspirador, e alguns capítulos podem ser uma vantagem para algumas entrevistas.

Para conhecimentos em engenharia de software, devemos nos atualizar em linguagens de programação, algoritmos e estruturas de dados. A maioria dos trabalhos exigirá conhecimento de Python, portanto, certifique-se de saber tudo sobre essa linguagem e os recursos mais recentes. Durante as entrevistas, podemos ter que resolver algumas questões de programação em um quadro branco, e aqui o conhecimento de algoritmos e estruturas de dados é importante. Por isso, recomendo estes dois livros:

  • Introduction to Algorithms by Cormen, de Leiserson, Rivest e Stein. Este livro tem uma visão geral muito completa de diferentes algoritmos e estruturas de dados. É divertido implementar os algoritmos e as estruturas por conta própria em uma linguagem que está tentando dominar;
  • Cracking the Coding Interview de Gayle Laakmann McDowell. Examinar todos os algoritmos levará muito tempo. Este livro ensinará os algoritmos e estruturas de dados que surgirão com maior frequência.

Quais cursos deve fazer?

Em relação a cursos online, existem muitas opções atualmente. Não fiz nenhum curso nos últimos anos, mas tenho ouvido boas histórias sobre os seguintes:

Quais eventos participar?

Gosto de ir a eventos ou meetups porque nos dão uma ideia dos problemas atuais que podem ser resolvidos com o machine learning, bem como quais são as técnicas atuais e o que está sendo utilizado na indústria. Congressos acadêmicos possuem mais ênfase no estado da arte das técnicas e os eventos comerciais podem explorar técnicas mais aplicadas. Os eventos que estou de olho são:

  • QCon para aprender sobre o estado da arte do software;
  • NVIDIA's GPU Technology Conference para aprender sobre o estado da arte em machine learning, redes neurais, nas GPUs;
  • CVPR evento sobre visão computacional;
  • NeurIPS evento sobre redes neurais;
  • ICRA evento de robótica;
  • IROS evento de robótica.

Como praticar para uma entrevista?

Um segredo sobre as entrevistas é que é fácil se preparar para elas. Para avaliar se um candidato é adequado para uma vaga, as empresas oferecem pequenos desafios aos candidatos. Podemos treinar para ficarmos bons na resolução desses desafios! Aqui estão algumas coisas que podemos fazer:

  • Muitas empresas pedirão para resolver algum dos desafios do HackerRank antes mesmo de conversar conosco. Vamos ao HackerRank e vamos praticar resolvendo vários desafios para se preparar para aquele que os entrevistadores desejam que nós resolvamos.
  • Se queremos ser melhores na programação competitiva, devemos ir atrás de algumas competições existentes. As que gosto de seguir são o Google Code Jam e o Advent of Code. O primeiro sempre apresenta vários desafios de programação em vários níveis de dificuldade e fornecem uma descrição de cada solução. Desta forma, podemos aprender rapidamente quais algoritmos são importantes! Todos os anos, no mês de dezembro, o Advent of Code hospeda 25 tarefas de programação que se tornam gradualmente mais difíceis no final do mês. A melhor parte do AoC é que existem várias maneiras de resolver cada questão e compartilhar as soluções com outras pessoas irá nos ensinar muito!

Pense em um grande projeto de machine learning

Algo que gosto de observar nos candidatos é a experiência em todos os domínios de um grande projeto de machine learning. Pense em todas as etapas, desde a coleta de dados, a limpeza desses dados, o machine learning e a implantação. Certifique-se de obter toda essa experiência no trabalho atual ou tente recriá-la no tempo livre. Ter esta experiência irá diferenciá-lo de muitos dos concorrentes.

Uma alternativa para obter essa experiência é contribuir para um projeto de código aberto. Ao contribuir para um projeto existente, terá um processo de revisão difícil, mas muito útil. Depois de conseguir seu primeiro merge em um pull request, se tornará um desenvolvedor melhor, sabendo fazer aquilo que interessa aos outros desenvolvedores.

Passo 2: Candidatando-se a uma vaga

Ao se candidatar a uma vaga de emprego, certifique-se de que a carta de recomendação e o currículo demonstrem que possui as capacidades necessárias para a vaga ao qual está se candidatando e que o currículo seja legível e conciso. Isso ajuda a listar os frameworks com as quais trabalhou e os projetos que já desenvolveu. No entanto, certifique-se de responder a perguntas sobre todos frameworks e tecnologias que citou no currículo! Se estiver no currículo, é justo que perguntem sobre. Também recomendaria que um recrutador profissional ou headhunter revisasse o currículo. Eles ficarão felizes em ajudá-lo a ter mais chances de ser contratado!

Uma dica é concentrar a estrutura do currículo no trabalho que deseja, não nas coisas que fez no passado. Ajusto meu currículo para cada vaga que me inscrevo, destacando os projetos relevantes que fiz no passado. Nosso currículo deve definir quais habilidades e projetos gostamos, e definitivamente devemos destacá-los. Também devemos procurar empregos na nossa área de interesse: As empresas adoram contratar pessoas que sejam apaixonadas pelo que fazem!

A partir do crescimento da área de machine learning, muitas pessoas passaram a buscar cursos e oportunidades de trabalho nesta área. Como entrevistador, é importante saber se alguém apenas "acompanhou" alguns cursos online, ou possui "experiências práticas". Se usou machine learning no trabalho anterior, deixe isso bem claro no currículo. Se conduziu um grande projeto no tempo livre, coloque um link para ele em seu currículo!

Passo 3: A entrevista

Há muitos aspectos de machine learning sobre os quais um entrevistador pode perguntar. Certifique-se de saber o básico dos algoritmos (consulte a seção de leitura deste artigo). Também deve deixar claro onde termina seu conhecimento e quais são os pontos fortes. Como entrevistador, sempre dei uma recomendação positiva para quem me ensinou algo novo durante a entrevista. Mostrar que tem profundo conhecimento de determinados tópicos aumentará a probabilidade de ser contratado se a empresa não tiver esse conhecimento no momento.

Certifique-se de fazer perguntas esclarecedoras durante a entrevista. É fácil falar sobre um assunto diferente e não perceber que está fazendo isso. Certifique-se de estar na mesma página que o entrevistador. Um exemplo prático: Uma vez pensei que deveria me concentrar ao escrever um algoritmo de classificação eficiente para uma lista, enquanto o entrevistador estava focado apenas no contexto mais amplo. Sempre que receber uma pergunta de codificação, certifique-se de começar escrevendo um caso de teste para a pergunta. No meu caso, simplesmente afirmar que o resultado da função que tive que escrever foi o maior elemento de uma lista já seria o suficiente. Esta prática mostra que se preocupa com a clareza e os testes e isso é valorizado pelos empregadores. Ao escrever um teste em uma entrevista, também dará tempo para pensar e sentir as possíveis soluções e armadilhas antes de programar a solução.

Se está explicando uma resposta, use a STAR technique para estruturar a história. Com a STAR technique, explicamos qual a situação inicial, qual tarefa tínhamos, quais ações executamos e quais foram os resultados.

Nas primeiras vezes que for a uma entrevista, provavelmente ficará nervoso. Isso é normal, porque normalmente não sabemos o que esperar. Cada entrevista é diferente, portanto, mesmo depois de muitos anos trabalhando na indústria, provavelmente ainda estará um pouco nervoso. Infelizmente, as mentes humanas são programadas para favorecer uma pessoa confiante, por isso é super importante se preparar! Ofereço as seguintes dicas para ajudá-lo com o nervosismo:

  • Frequentemente, os entrevistadores começam com alguma conversa para quebrar o gelo. Use este período para colher algo importante sobre o entrevistador. Isso sempre me relaxa e me permite me relacionar com a experiência dele durante o resto da entrevista;
  • Controle o ambiente remoto: Certifique-se de que o telefone está desligado, que seu animal de estimação está em uma sala diferente e que a Alexa ou Siri estão desligadas. Se algo acontecer (como o entregador batendo na sua porta), fique calmo, peça licença, resolva rapidamente o problema e volte para a entrevista. Pessoalmente não me importo com uma interrupção, pois isso pode acontecer com todos nós;
  • Pratique as entrevistas antes! Peça a seus amigos que façam perguntas, algumas podem ser encontradas no livro "Cracking the Coding Interview" ou pesquisando por algumas perguntas frequentes online. Também pode trabalhar em várias dessas listas para saber as respostas para as perguntas mais comuns;
  • Prepare um "argumento de venda" (também chamado de elevator pitch). Isso deve resumir em cerca de um minuto quem é você, o que fez e o que deseja. Todos os entrevistadores pedirão que você se apresente, então esta será a resposta perfeita para se ter memorizada. Nada é tão relaxante quanto um ótimo começo para uma entrevista;
  • Saiba como pode transmitir informações de maneira fácil. Acho difícil expressar meus pensamentos apenas com palavras, então gosto de ficar na frente de um quadro branco para representar meus pensamentos enquanto falo. Talvez um pedaço de papel possa ser útil para transmitir suas ideias. O que quer que escolha fazer, certifique-se de praticar com antecedência para se sentir confortável.

O que torna as entrevistas difíceis é que nunca sabemos o que esperar. Tive experiências nos seguintes tipos de perguntas/entrevistas:

  • Perguntas sobre conhecimento. Poderá ser questionado, por exemplo, "Como funciona um LSTM?", "Quantos pesos existem em uma camada convolucional 2D?", "Qual é o truque do kernel para dar suporte a máquinas de vetores?". Se não souber nada sobre o assunto, seja transparente ou caso contrário responda à pergunta com o melhor do seu conhecimento. É importante que seja honesto, pois alguns candidatos começam a inventar coisas. Também pode indicar como normalmente encontraria a resposta a essa pergunta ou como abordaria a solução desse problema. Para se preparar para essas perguntas, é necessário ler os livros didáticos e aprender técnicas específicas para memorizar fatos e nomes específicos.

    Se está concorrendo a uma vaga para
    deep learning, certifique-se de conhecer as funções de custo mais utilizadas em deep learning (como entropia cruzada binária, entropia cruzada categórica, erro quadrático médio, similaridade do cosseno, perda de Huber e divergência de Kullback-Leibler).

    Certifique-se de conhecer as funções mais comuns de ativação e suas derivadas (como relu, elu, sigmóide, tanh, softmax, swish e selu). Conheça as camadas mais comuns que podem ser encontradas em uma rede neural (camadas densas, camada convolucional, convoluções separáveis, normalização de lote, pooling global e local [pooling máximo e pooling médio], LSTM, GRU, dropout).

    Caso precise saber mais sobre o
    machine learning clássico, a dica é começar com algoritmos que estão no scikit learn. Pense em regressão linear de mínimos quadrados, máquinas de vetores de suporte, vizinhos mais próximos, árvores de decisão e métodos de conjunto.
  • Perguntas de percepção. Os entrevistadores podem apresentar um pequeno caso durante a entrevista e perguntar como abordá-lo. Se fez alguns projetos de machine learning no passado, geralmente pode responder facilmente a essas perguntas. No entanto, é bom revisitar métodos comuns para tarefas simples.
    Exemplos de perguntas:
  • Quais métodos conhece para pré-processar os dados?
  • Quais métodos usaria para enriquecer os dados?
  • Quais métodos de regularização conhece?
  • Como adquire/coleta/anota os dados para esta tarefa?
  • Como avaliaria essa tarefa e qual desempenho seu modelo deveria ter?
  • Entrevista na prática. Algumas empresas usam o HackerRank para executar o código que escreve, outras usam um quadro branco ou apenas pedem que escreva em um pedaço de papel. Uma vez que esta técnica é comum, é importante praticá-la. Em um computador, sugiro que teste 20 linhas de código antes de escolher a melhor. Em um pedaço de papel, há uma chance de acerto. Existem ótimos tutoriais sobre como gabaritar esses tipos de entrevistas! Uma das melhores dicas aqui é expressar os pensamentos. Muitas vezes não se trata de encontrar a solução certa, mas de mostrar que é uma pessoa com quem outras pessoas podem trabalhar para resolver problemas de dificuldade semelhante.
  • Perguntas comportamentais. Existem questões comportamentais que são muito comuns nas entrevistas, como "O que os outros dizem sobre você?", "Quais são os seus maiores desafios?", "Onde você se vê daqui a X anos?". Prepare-se para as perguntas mais comuns e certifique-se de ter uma resposta curta e convincente para eles.

Passo 5: O teste técnico

Muitas empresas irão querer uma amostra da sua capacidade portanto irão lhe dar uma tarefa técnica para resolver. Gosto dessas tarefas, pois podemos mostrar do que somos capazes quando temos tempo para fazê-las. Ao revisar essas tarefas de tecnologia, vi muitas soluções excelentes, mas também tive que rejeitar algumas pessoas. Aqui estão algumas dicas práticas para resolver uma pergunta técnica:

  • Descreva o processo. Sempre entregue um breve relatório com as etapas que executou, o que tentou e como poderia melhorar se tivesse mais tempo. Gosto de usar o Jupyter Notebook para os testes técnicos, pois permite que o candidato descreva e codifique ao mesmo tempo! Se não estivermos usando um Jupyter Notebook, podemos adicionar um documento PDF bem estruturado com nossas motivações.
  • Simplicidade. Geralmente testes técnicos de machine learning possuem mais de uma resposta correta. É melhor resolver uma tarefa de forma simples e com um alto grau de qualidade do que tentar uma solução difícil e acabar tendo uma baixa qualidade.
  • Deixe claro qual código copiou e colou e qual código é de autoria própria. Para tarefas de machine learning, geralmente existem algoritmos disponíveis com a funcionalidade que precisamos implementar. Por exemplo, se tiver que fazer um detector de caixa delimitadora 2D, pode usar uma implementação YOLO já criada. No entanto, certifique-se sempre de adicionar uma funcionalidade significativa por conta própria. Deverá ser avaliado também pela maneira de codificar, portanto, certifique-se de indicar qual código é de fato de sua autoria e qual copiou e colou.
  • Escolha qualidade ao invés de quantidade. Certifique-se de seguir as convenções, diretrizes de codificação e adicionar documentação às suas funções. Pode usar o linter, uma ferramenta que analisa código em busca de possíveis bugs e violações de estilo. Sempre codifique como se fosse fazer um pull na branch master do futuro empregador. É melhor ter um pedaço de código simples com alta qualidade do que uma solução muito avançada que não pode ser entendida.
  • Teste unitário! Parte de ser um engenheiro de software profissional é escrever testes para o código que escreveu. Simples declarações de testes para funções são muito úteis, mostrar que conhece uma estrutura de teste unitário irá impressionar o revisor do teste técnico.

Conclusão

Espero que essas dicas o ajude a encontrar o emprego dos sonhos! Machine learning é muito divertido e tem potencial para resolver muitos problemas. Para esse artigo, baseei-me na minha experiência de conversar com pessoas em eventos e meetups, mas percebo que isso não dá uma visão completa do mundo de machine learning. Se tiver sugestões sobre o que aprender ou o que seria importante para sua área de trabalho, deixe um comentário para ajudar outras pessoas que desejam se tornar um profissional dessa área.

Sobre o Autor

Roland Meertens trabalhou como machine learning engineer na Autonomous Intelligent Driving (AID) na percepção para veículos autônomos. Escreve para a InfoQ e tem o blog pinchofintelligence.com, que lista todos os projetos paralelos.

Avalie esse artigo

Relevância
Estilo/Redação

Conteúdo educacional

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

BT