Dicas para aprender Machine Learning

Luís Gonçalves
luisfredgs
Published in
12 min readJan 18, 2018
Créditos da imagem: Unsplash

Você não precisa ser um PhD para trabalhar com Machine Learning. Mesmo assim, há conceitos importantes a serem entendidos que te ajudariam bastante nessa caminhada. Esse post vai te mostrar alguns tópicos bem relevantes para a área e importantes para te colocar em uma posição bem vantajosa, ao ponto de você conseguir se virar bem com machine learning, caso se dedique a entendê-los [Post com vídeo].

Antes de prosseguir, aproveita que já veio aqui e participa do grupo que criei no Telegram, para promover discussões sobre o tema de aprendizagem de máquina e tirar dúvidas: https://t.me/joinchat/Omx7D1hGjM2K_8YfwwntYw

O que será mencionado aqui:

  1. Do que você precisa para aprender Machine Learning (além do básico);
  2. Quais livros poderá usar para aprender sobre o assunto;
  3. Qual linguagem de programação precisa aprender?
  4. Quais ferramentas são mais usadas?
  5. Preciso mesmo aprender tudo isso?

Machine learning significa criar modelos matemáticos que representem alguma situação ou problema real com base em dados observados e contidos em matrizes de dados. Usualmente, esses modelos são utilizados posteiormente para fazer predições sobre entradas de dados que não foram utilizadas antes para contruir o modelo. Esse processo de criar modelos é conhecido como “aprendizagem” e daí vem o nome da área.

O objetivo mais comum é que esses modelos suportem a tomada de decisões a partir das predições que eles são capazes ou foram criados para fazer. Coisas como: 1) qual o limite de crédito devemos oferecer para um cliente específico?; 2) quais clientes provavelmente vão deixar de assinar nosso serviço no primeiro ano?; 3) quais são os clientes da empresa com maior risco de inadimplência? e 4) qual a estimativa para o volume de vendas de um produto específico considerando os próximo três meses?

A ideia é que o conhecimento a priori utilizado para criar os modelos esteja contido em massas de dados reunidas ao longo do tempo. Essas massas de dados podem estar disponíveis publicamente na internet, vindas de aplicativos móveis, de sensores, câmeras, nos HD's das empresas, enfim.

Na maior parte do tempo, Machine Learning representa a necessidade de fazer previsões com base no conhecimento obtido a partir de dados.

Um algoritmo é normalmente exposto a esse conhecimento, explorando padrões importantes, com a intenção de obter uma função matemática que seja capaz de usar esses padrões para fazer extrapolações em dados inéditos (mas normalmente dentro do mesmo domínio).

Tipicamente, essa função é obtida por meio de algum processo de otimização, que busca diferentes soluções até chegar numa que seja robusta o suficiente para fazer boas generalizações com base no conhecimento extraído dos dados pelo tal algoritmo.

Durante esse processo, algumas ferramentas matemáticas fundamentais para entender machine learning costumam ser utilizadas. Entre tais, devo citar: álgebra linear, cálculo vetorial, otimização, probabilidade e geometria analítica. Contudo, esses conceitos são quase sempre abstraídos pelo uso de bibliotecas e frameworks de machine learning. De maneira que você sequer terá percebido quando um tensor foi criado, ou quando os valores desse tensor foram alterados por meio de alguma operação. Amigável assim!

Apesar disso, o entendimento desses conceitos matemáticos é algo super importante, e vai te colocar numa posição vantajosa, uma vez que as bibliotecas de machine learning não fazem tudo sozinhas. Lembre-se de que nem todo problema é igual. Às vezes, você precisará expandir os recursos dessas bibliotecas, criando funcionalidades novas — uma nova arquitetura de modelo, um novo otimizador ou coisa parecida, para atender a uma ou outra demanda muito específica. Nessas horas, ter o conhecimento necessário faz toda a diferença.

Pensando nisso, listarei aqui alguns tópicos que vão te ajudar bastante a praticar Machine Learning de uma maneira mais confortável, caso você esteja disposto a estudá-los e entendê-los. Começando com a álgebra liberar, vamos lá….

Porque a álgebra linear é tão importante para o Machine Learning?

A álgebra linear é uma área da matemática que é largamente utilizada em diversos ramos da engenharia e da ciência. Uma boa compreensão da álgebra linear será imensamente útil se você pretende trabalhar com ML, principalmente na parte de modelagem. Você até pode praticar machine learning sem ter um domínio sequer razoável de álgebra linear, mas algumas coisas não farão muito sentido para você nestas condições.

Não é meu objetivo aprofundar o assunto de álgebra linear neste post, mas se eu puder resumir em poucas palavras no que você deveria se concentrar, a princípio eu diria: Escalares, Vetores, Matrizes e Tensores. Além disso, é importante que você compreenda os seguintes tópicos:

  • Soma e multiplicação entre matrizes e vetores
  • Matriz identidade, diagonal e matriz inversa
  • Produto interno e produto escalar (eles codificam várias propriedades geométricas importantes dos espaços vetoriais, incluindo a noção de tamanhos, ângulos e distâncias entre vetores)
  • Ângulos e ortogonalidade
  • Concatenação e normalização de matrizes e vetores
  • Transformações lineares
  • Autovalores e Autovetores
  • Aprenda as notações, como as estruturas são representadas
Créditos da imagem: Deep Learning with PyTorch — Eli Stevens

Aprender sobre as notações será bastante útil se você pretende trabalhar na área de pesquisa, ou se pretende ler papers para pegar algumas ideias. Há outros tópicos, é claro, e álgebra linear é uma área muito ampla, mas começar por estes tópicos já representa muita coisa.

Em machine learning, fazemos um uso intensivo de operações envolvendo os tópicos acima mencionados, sem os quais seria muito difícil trabalhar. Muito provavelmente você vai aprender álgebra linear enquanto estuda e pratica machine learning.

Cálculo e otimização

No geral, os principais passos executados em um problema de machine learning são 1) projetar um algoritmo que vai gerar o modelo, 2) definir uma função objetivo e 3) encontrar um ponto extremo dessa função. Encontrar um ponto extremo, nesse contexto, significa encontrar um ponto máximo ou mínimo da função objetivo para determinar os parâmetros do modelo. Os primeiros dois passos envolvem problemas de modelagem, enquanto que o terceiro passo envolve encontrar o melhor modelo usando algum método de otimização.

Assim sendo, métodos de otimização têm uma influência significativa em Machine Learning, considerando que os algoritmos usados, em sua maioria, podem ser formulados em termos de um problema de otimização.

O interesse é encontrar o ponto extremo de uma função objetivo. Em outras palavras, isso implica em minimizar (encontrar o ponto mínimo) ou maximizar (encontrar o ponto máximo) o valor de uma função. A maioria das tarefas em machine learning consiste em minimizar uma função. De tal modo, uma vez que a função objetivo tenha sido determinada, métodos de otimização costumam ser usados para resolver o problema. Portanto, conhecer alguns conceitos básicos dentro deste tópico é algo desejado.

A diferenciação, sendo uma das mais importantes ferramentas do cálculo na ciência, é utilizada em vários métodos de otimização para machine learning. Basicamente, as diferenciações relacionam a taxa de variação no valor de uma quantidade em direção a um valor desejado. Seria realmente difícil falar desse assunto sem mencionar o cálculo com derivadas. Mesmo assim, vamos falar delas aqui apenas de maneira superficial.

Para citar um exemplo, uma rede neural utiliza diferenciação (derivação parcial) como parte de um processo de otimização para atualizar os parâmetros (também chamados de pesos) de uma função envolvendo múltiplas variáveis, visando encontrar um conjunto de parâmetros que resulte na melhor capacidade de generalização possível.

Um exemplo mais concreto dentro do mesmo contexto seria o algoritmo de retropropagação do erro (backpropagation) que, com base na perspectiva da informação do gradiente, utiliza derivadas parciais para atualizar os pesos da rede com base no sinal de erro produzido pelos neurônios na camada de saída (ou no valor da função objetivo). Aqui, um vetor gradiente é usado para “apontar” a direção dos valores que minimizam a função mais rapidamente — importante mencionar que esses ajustes nos valores dos parâmetros são ponderados por um fator conhecido como taxa de aprendizagem. A intenção, em outras palavras, é encontrar um conjunto de pesos que minimize o erro produzido pela rede em função dos dados de entrada. Podemos dizer, na verdade, que a retropropagação é apenas um outro nome que deram para a regra da cadeia do cálculo.

a dinâmica de um modelo neural em deep learning utiliza diferenciação (derivação parcial) para atualizar os pesos da rede a partir do gradiente descendente da função de perda

Será de grande utilidade se você tentar entender pelo menos o básico de:

  • Cálculo multivariado (é o calculo envolvendo múltiplas variáveis), bem como as derivadas parciais e regra da cadéia (lembrando que a derivada fornece a inclinação de uma função f(x) num ponto x, sendo usada pelos algoritmos de otimização para encontrar o “melhor caminho” até um mínimo, ou um máximo global)
  • O conceito de gradiente (em qualquer livro de cálculo você vai encontrar)
  • Cálculo vetorial
O gradiente descendente da função de perda é computado com base nas derivadas parciais da função de perda respectivamente a cada valor peso, sendo utilizado para atualizar os pesos da rede até obter um conjunto de valores que minimize o valor da função. Perceba que a derivada é nula quando não há inclinação. Isso não quer dizer, contudo, que o ponto representa um mínimo global (penúltimo ponto).

A figura acima ilustra o uso da derivada por algoritmos de otimização. A visão em 2D é apenas uma simplificação para facilitar o entendimento, visto que, na verdade, a função percorre uma superfície, e a derivada parcial fornece a inclinação da função em cada ponto. Essa inclinação na verdade é uma espécie de “apontamento”, que orienta os pesos a “caminharem” na direção de valores que permitam minimizar o valor da função custo gradativamente, em pequenos passos. Esse é o papel da derivada em um otimizador, componente importante de muitos algoritmos de machine learning, não apenas em redes neurais.

Não! Você não vai precisar calcular derivadas manualmente para que seus modelos funcionem. Como já foi dito, tudo isso é abstraído por pacotes de ferramentas que foram desenvolvidas especialmente para o caso. A falta desse conhecimento não vai te impedir de baixar um código do Github e colocar para rodar, seguindo as devidas orientações do autor. A mensagem que precisa ser entendida aqui é: Você precisa ao menos saber onde está pisando, ter uma noção do que está acontecendo enquanto seu modelo está sendo treinado. Se algum problema acontecer, você terá uma ideia do que precisa ser melhorado. Esse entendimento vai te colocar no controle da situação, influenciando na escolha dos hiper parâmetros do algoritmo que vão alterar a dinâmica da aprendizagem do seu modelo, por exemplo. Apesar de eu ter citado redes neurais, conceitos de cálculo não são uma exclusividade desses algoritmos em machine learning.

Teoria da probabilidade

A incerteza é um conceito chave em inteligência artificial e reconhecimento de padrões. É neste ponto que surge a necessidade de uma ferramenta para quantificar e representar a incerteza. Por tal motivo, a probabilidade é uma ferramenta de grande interesse em ML. Um entendimento básico em teoria da probabilidade é desejável para que você possa trabalhar com os algoritmos e gerar modelos preditivos.

Qual a probabilidade de um determinado e-mail ser um SPAM? Qual a probabilidade de um cliente ser um bom pagador ou um inadimplente? Frequentemente, a saída do seu modelo será uma distribuição de probabilidades correspondente às categorias que você está tratando na variável resposta. Modelos probabilísticos de machine learning, tais como as redes bayesianas, fazem uso intensivo de conceitos de probabilidade.

Estatística inferencial

Muita gente não menciona isso. Mas, se você treinou um modelo, viu que acurácia dele estava boa e o aceitou como solução definitiva, provavelmente sua solução está incompleta. Um passo crucial para a aceitação e implantação de um modelo de machine learning em produção é a validação dele. Como saber se um modelo é bom o suficiente para sair da fase de “laboratório”? Quantos modelos você treinou (com diferentes parâmetros)?

Você precisará planejar com cuidado uma série de experimentos, treinar diferentes modelos, testá-los e validá-los estatisticamente (não é só olhar para a acurácia depois de o modelo ter sido treinado). O modelo X é melhor do que o modelo Y? O quanto ele é melhor? O quanto custaria um erro de predição? Para responder a essas questões, você terá que se apoiar em importantes ferramentas da estatística inferencial, tais como os testes de hipótese. Qualquer livro de estatística vai te ensinar como conduzir tais testes, fora inúmeros vídeos que se encontram no Youtube. É questão aplicar esses testes no problema em que você está trabalhando.

Linguagens de programação e outras ferramentas

Imagem de Maximilian Weisbecker em Unsplash

Não adianta você estudar os conceitos acima e não poder colocar em prática usando uma linguagem de programação. Eu diria que Machine Learning, ao menos na indústria, é 80% usando códigos e 20% aprendendo conceitos teóricos (que fazem muita diferença). Você precisa entender os conceitos, o que é importantíssimo, mas não significa que vai implementar todos os cálculos na unha, isso é impraticável. Você vai precisar de alguma linguagem de programação e frameworks de machine learning.

Se você ainda não programa em nenhuma linguagem, ou pelo menos em nenhuma das que vou listar aqui, então tente começar por aquelas mais valorizadas no mercado. As linguagens de programação mais utilizadas pela comunidade e mais exigidas pelas empresas são:

  • Python
  • R
  • C++
  • Java
  • Scala
  • Fique de olho na Rust

Se você pretende atuar no mercado como profissional destas áreas, então tente buscar conhecimento principalmente em Python ou R, se possível nas duas linguagens, visto que são as mais usadas. Se seu interesse é ir para a academia, vale as duas também, mas se souber alguma coisa de C++, então você terá “o poder” em suas mãos!

Hoje em dia, Python e R são as mais utilizadas, seja por pesquisadores ou por empresas na área de Data Science e IA. Quase não se vê anúncios de vagas exigindo conhecimentos em Matlab, C++, Java ou Scala para atuar na área. Se você pretende atuar no mercado como profissional de Data Science ou Machine Learning, então tente buscar conhecimento principalmente em Python ou R, se possível nas duas linguagens.

Uma grande maioria das toolboxes disponíveis para machine learning que existem hoje estão implementadas nestas duas linguagens; a maior parte dos cursos online ou dos livros voltados para este tema se baseiam nestas duas ferramentas. Então, é fundamental que você tente se aprofundar no uso destas linguagens de programação.

Além disso, existem alguns frameworks e libraries que são muito requisitados nas vagas que costumo encontrar no Linkedin, por exemplo. No conjunto de ferramentas criadas na linguagem Python, posso citar alguns:

São ferramentas bastante completas e bem consolidadas, na indústria e na academia. Numpy, por exemplo, possui recursos completos para aplicações de álgebra linear; Pytorch e Tensorflow são bibliotecas especialmente voltadas para a construção de arquiteturas neurais, com o Tensorflow dominando as aplicações em ambientes de produção (até agora); Scikit-learn se tornou o toolbox padrão quando o assunto é modelagem usando algoritmos robustos, sem ênfase ao deep learning; Pandas é o queridinho durante as análises exploratórias, onde é indispensável o uso de dataframes. Enfim, vale a pena investir tempo em entender o funcionamento dessas ferramentas. Mas não se contente com apenas essas ferramentas, pois há outras inúmeras disponíveis.

Além disso, não podemos esquecer de alguns ambientes voltados para prototipagem e testes de modelos, tais como os Jupyter Notebooks. Além disso, a Google te oferece o Google Colab com GPU grátis para você já sair brincando sem precisar instalar nada, já que a maioria dos pacotes python para machine learning estão previamente instalados, inclusive as ferramentas citadas acima (você também pode instalar outras libraries facilmente usando o comando “!pip install”).

E sobre materiais de estudo?

Imagem de Sylvia Yang em Unsplash

Para responder essa pergunta, decidi gravar o vídeo abaixo, onde eu indico alguns dos livros que utilizo para estudar. No vídeo eu também apresento um resumo dos pré-requisitos que mencionei nos parágrafos anteriores, bem como algumas dicas sobre onde buscar as informações mais atualizadas sobre o tema.

Leia também: 7 Livros essenciais para aprender Machine Learning

ATENÇÃO: Aos 07:54 do vídeo abaixo, eu na verdade estou querendo me referir ao k-Nearest Neighbors (o K-NN). Há uma grande diferença em relação ao K-Means, o qual tenta fornecer um agrupamento de dados, com separações bem definidas, baseado na similaridade entre estes dados. Falo mais sobre o K-means nesse post. Peço desculpas pelo equívoco, pois só notei depois de rever o vídeo, logo após ser publicado no canal. Todos os links aos quais me refiro durante a apresentação dos slides estão presentes na descrição do vídeo.

E se eu não quiser aprender tudo isso para poder usar machine Learning?

As APIs cognitivas da Google (Google Cloud Machine Learning), Microsoft (Azure Machine Learning) e IBM (IBM Watson) existem para facilitar a vida de quem não quer ter o trabalho de estudar tudo o que foi dito nos parágrafos anteriores para poder criar sistemas de inteligência artificial. De fato, se você tiver o conhecimento em programação necessário para utilizar os endpoits destas APIs, poderá criar sistemas inteligentes usando modelos prontos e sem se preocupar com teoria.

Apenas tenha em mente que este uso tem um custo envolvido, pois normalmente estes serviços cobram um valor específico a partir de um determinado volume de requisições. Entretanto, aprender a teoria continua sendo importante se você quiser extrair o máximo do potencial destas APIs e modelar sistemas mais robustos.

--

--

Luís Gonçalves
luisfredgs

Machine Learning Researcher and PhD student in Computer Science at Universidade Federal de Pernambuco, Brazil.