Ir para o conteúdo principal

Primeiros Passos Machine Learning e Deep Learning

·2748 palavras·13 minutos
Autor
Matheus Pereira

Neste post vou compartilhar alguns links, vídeos, cursos e livros que me ajudaram durante meu processo de aprendizagem de Machine Learning e Deep Learning. Vou descrever a forma como eu aprendi, o que não significa que este é o único caminho existente, nem que este é o caminho correto, é apenas um dos muitos caminhos possíveis.

Como disse, o intuito deste artigo é compilar alguns dos materiais que serviram como fonte de estudo durante o meu processo de aprendizagem, então os links são diretamente ligados a minha experiência e, por consequência, ligados a Python.

O artigo está organizadas em 4 partes:

  • Python
  • Machine Learning e Deep Learning
  • MLOps e IA Aplicada
  • Links extras

Por enquanto, serão apenas links e referências para materiais externos, mas com o tempo, vou expandir alguns dos itens em posts específicos. Então fique ligado nos conteúdos do blog para não perder as novidades.

Python #

Se você fizer uma pesquisa rápida sobre Machine Learning na internet, perceberá que a maior parte dos resultados serão relacionamos com Python. Isso porque grande parte das tecnologias de Machine Learning, como NumPy, Pandas, Scikit-Learn, TensorFlow e PyTorch utilizam Python em sua fundação. Isso faz de Python uma ferramenta indispensável no seu arsenal.

Pessoalmente, aprendi Python, há quase dez anos, com três apostilas do Josué Labaki (Módulo A: Bem-Vindo a Python, Módulo B: Python Orientado a Objetos e Módulo C: Tkinter!). Não inclui referências pois acho que estes materiais não foram atualizados desde então, mas se você encontrar apostilas com as capas do Hulk, Batman e Supergirl, são estas as apostilas.

O que recomendo, atualmente são os próprios sites da linguagem: python.org e python.org.br. Se você preferir um material mais estruturado, recomendo o curso Python para Zumbis, do Fernando Masanori. Eu também estudei o livro Python para Desenvolvedores, do Luiz Eduardo Borges, que é um material voltado para quem já tem alguma experiência com programação.

Se você já tem experiência tanto com programação quanto com Python, eu ainda recomendo o Fluent Python, do Luciano Ramalho. Este é um livro que utilizo como referência até hoje e tenho uma curiosidade relacionada a ele: assim que cheguei no escritório aqui no Canadá, Fluent Python foi o primeiro livro que encontrei na mesa de um colega.

Uma observação que vale para quase todos os livros que eu citar aqui: os autores disponibilizam os exemplos utilizados nos livros em forma de código aberto no GitHub. As bibliotecas Python também são repositórios de código aberto. Você pode acessar o código fonte de NumPy, Pandas, Dask, TensorFlow, PyTorch. Você pode inclusive acessar o repositório do Python ou de quer outra linguagem de programação de código aberto.

Esteja familiarizado com o código fonte e, o mais importante, sempre leia a documentação oficial de qualquer tecnologia que você utilizar. Quanto antes você começar a desenvolver este hábito, mais rápido você chegará a um nível profissional em programação.

Machine Learning e Deep Learning #

Começando com Machine Learning (ML) e Deep Learning (DL), o conceito mais importante que você deve ter em mente, é o de que seu programa aprende a partir de dados, em oposição à programação convencional onde implementamos regras explícitas para resolver problemas específicos.

Duas playlists do canal Google Developers são excelentes para quem está começando: Machine Learning Recipes with Josh Gordon e AI Adventures, com o Yufeng Guo. Particularmente, considero AI Adventures a melhor série atualmente disponíveis para quem está começando com ML.

Também do Google Developers, a playlist Machine Learning Foundations, com o Laurence Moroney, é excelente para quem está dando os primeiros passos com redes neurais. Esta playlist acabou de ser lançada, então os algoritmos já são implementados com TensorFlow 2.0. A série apresenta exemplos de visão computacional com redes neurais convolucionais (Convolutional Neural Network, CNN ou ConvNet) e processamento de linguagem natural (Natural Language Processing, NLP) com redes neurais recorrentes (Recurrent Neural Network, RNN).

Como você pode imaginar ao assistir as playlists, os dados fazem parte da essência de ML. Em uma tradução livre de um trecho do primeiro vídeo do AI Adventures, ML pode ser simplificado em uma única frase: usar dados para responder questões.

Os dados fazem parte da etapa de construção (building) e treinamento (training) de um modelo de Machine Learning. Responder questões se refere a etapa de inferência, quando utilizamos modelos treinados para fazer previsões (predictions) a partir do que foi aprendido durante a etapa de treinamento.

Sabendo disso, as bibliotecas NumPy e Pandas são suas principais ferramentas quando o assunto é manipulação e exploração de dados em Python. Mas é preciso se familiarizar com estas bibliotecas pois elas apresentam algumas particularidades quando comparadas a outras não relacionada a ML.

Primeiramente, você precisa compreender suas estruturas de dados: NumPy Arrays, Pandas Series e Pandas Dataframe. Também é importante estar confortável com a manipulação de índices, slicing e selects, que funcionam de forma similar aos índices e slices de Python, e operações básicas como merge, join, concatenate, reshape e group_by.

Os tipos de dados também são um pouco diferente quando trabalhamos com NumPy e Pandas. NumPy suporta uma variedade de tipos numéricos maior do que Python e Pandas implementa alguns tipos de dados adicionais como categorical e integer e boolean que permitem valores nulos (missing values).

Isso nos leva a outros dois pontos que considero importante se você está iniciando com ML: missing data e dados esparsos.

Missing data, como o nome sugere, está relacionado a falta de dados. Quando trabalhamos com datasets (conjunto de dados) reais, as informações podem ser representadas de diferentes formas e muitas vezes de maneira incompleta. Estas informações incompletas são expressas por meio dos tipos NaN, NaT ou None, dependendo do tipo original (int, float, datetime, object).

Datasets contendo missing data podem causar problemas para muitos dos algoritmos de Machine Learning. Então, é uma prática comum remover estas entradas ou preencher os valores faltantes com alguma medida estatística como média ou mediana ( missing data imputation).

Dados esparsos (sparse data), por outro lado, são conjuntos de dados com muitos valores iguais a zero ou nulo. Diferentemente de missing data, estes valores em branco fazem parte da informação representada no dataset e geralmente são relacionados a dados coletados por sensores.

Em um sensor de presença que monitora uma casa vazia, por exemplo, é esperado que a maior parte do tempo não haja registro algum de movimentação. Mas, se você quiser treinar um modelo para detectar padrões de furtos, você precisará tanto de dados de quando houve alguma movimentação quanto de momentos onde não havia ninguém na casa, que podemos imaginar, será a maior parte do tempo.

Pandas conta com um tipo especial de estrutura para representar dados esparsos, SparseArray, que aproveita o fato dos dados apresentarem estes espaços em branco para otimizar a forma como as informações são armazenadas e processadas.

Finalmente, uma das tarefas relacionadas ao universo de Machine Learning é traduzir dados em insights e comunicá-los para outras pessoas. Para ajudar nesta tarefa, alguns exemplos de bibliotecas de visualização de dados são Matplotlib, Seaborn e Plotly. Comunicar suas descobertas de forma clara e significativa é uma arte, ao dominá-la, suas descobertas terão maior alcance e impacto.

Modelos #

Depois de estar familiarizado com Python, NumPy e Panda, é hora de mergulhar de cabeça nas técnicas de Machine Learning e Deep Learning.

Este é um tópico em alta, estamos em meio a um hype onde todas as atenções estão voltadas para este assunto. Isso faz com que novidades apareçam a todo instante. Por conta disso, é comum sentir a frustração de achar que não sabemos o suficiente sobre ML.

Esta foi uma experiência que vivi pessoalmente. Minha lista de estudo crescia dia após dia, enquanto eu mal aprendia os primeiros items. Cada novidade que eu encontrava em artigos, livros ou vídeos expandia minha lista, mas ao mesmo tempo me paralisava em meio a tanta informação. Meu conselho para superar essa dificuldade é o seguinte: domine a fundação, gerencie suas expectativas e aprenda novos algoritmos e técnicas gradualmente.

Playlists #

Machine Learning é sobre encontrar características e padrões que descrevem um problema a partir de dados. Por isso, grande parte da teoria por trás de ML é fundamentada nos campos da Álgebra Linear, Cálculo e Estatística. Um material divisor de águas nos meus estudos foi a playlist Neural networks do canal 3Blue1Brown.

Esta série de vídeos me fez compreender o funcionamento de redes neurais, backpropagation e gradiente descendente. Também a partir desta playlist cheguei ao livro Neural Networks and Deep Learning do Michael Nielsen, com repositório disponível no GitHub. A partir destes vídeos também cheguei ao colah’s blog.

Por conta da qualidade do canal 3Blue1Brown, foi impossível não assistir todas as outras playlists que, de qualquer forma, também são relacionadas com Machine Learning: Essence of linear algebra, Essence of calculus e Differential equations.

A série Neural Networks from Scratch in Python, do canal sentdex, também é uma ótima referência para compreender conceitos de Machine Learning que frameworks como TensorFlow e PyTorch implementam como layers e funções de ativação.

Por fim, nos canais do Google você ainda encontra playlists como Coding TensorFlow em português, Coding TensorFlow, Natural Language Processing (NLP) Zero to Hero.

No geral, os canais TensorFlow e Google Cloud Platform sempre trazem novidades interessante. Não esquecendo de AI Adventures e Machine Learning Foundations, as playlists que recomendo sem pensar duas vezes.

Cursos Online #

Depois de se familiarizar com os conceitos de ML, você pode começar com alguns cursos online. O primeiro deles é o lendário Machine Learning, do Andrew Ng. Depois deste, também o curso Deep Learning Specialization, mais um vez, do Andrew Ng. Quando fiz o curso Machine Learning pela primeira vez, eu não tinha o background suficiente para entender seu conteúdo. Acredito que assistir as playlists citadas anteriormente pode ajudar bastante se você não estiver familiarizado com o assunto.

Outro curso que também me ajudou a entender melhor os conceitos de ML, foi o Machine Larning Crash Course, do Google. Este curso traz uma visão completa da área, além de ser um dos poucos até aqui que apresenta conceitos relacionados à engenharia para ML.

Se você se interessar por visão computacional, o curso CS231n: Convolutional Neural Networks for Visual Recognition, da universidade de Stanford está disponível no youtube e em sua página oficial. Este é um curso extremamente completo e que requer uma quantidade considerável de empenho para ser finalizado. Somente em vídeo, são aproximadamente 20 horas de curso. A universidade de Stanford também disponibiliza o curso Natural Language Processing with Deep Learning, também com mais de 20 horas de vídeo. Ainda não tive a oportunidade de assistí-lo, mas ele é o próximo da minha lista “assistir mais tarde”.

Livros #

Quanto aos livros, Hands-On Machine Learning with Scikit-Learn and TensorFlow, do autor Aurélien Géron, foi minha primeira leitura na área. O livro já está na versão 2, com exemplos implementados em TensorFlow 2, que tem uma API muito mais intuitiva do que TensorFlow 1. Ambos os repositórios de exemplos estão disponíveis no GitHub, handson-ml e handson-ml2.

O segundo livro que recomendo é o Deep Learning with Python, do François Chollet. Diferente do Hands-On Machine Learning, que traz exemplos mais gerais de ML com Scikit-Learning, Deep Learning with Python se aprofunda em exemplos com TensorFlow e Keras. François Chollet é o criador do Keras, fazendo essa leitura obrigatória para quem trabalha ou deseja trabalhar com DL. Os notebooks de exemplos também podem ser encontrados no GitHub.

Na minha lista de próximos livros está The Hundred-Page Machine Learning Book do Andriy Burkov e Deep Learning, dos autores Ian Goodfellow, Yoshua Bengio and Aaron Courville.

MLOps e IA Aplicada #

Treinar seu modelo é apenas uma de muitas partes envolvidas no desenvolvimento de uma aplicação de ML. Na realidade, o treinamento de um modelo (ML Code) corresponde a aproximadamente 5% ou menos do esforço necessário para colocar um serviço de ML em produção (fonte: Machine Learning Crash Course). Por isso, aqui estão listadas algumas referências de tecnologias que utilizo no meu dia a dia, ou que pelo já tive a oportunidade de testar, e que são relacionadas com ML em produção.

ML System
Esquema de um sistema de ML, fonte: Machine Learning Crash Course

Dados que não cabem em memória será o primeiro problema que você encontrará quando começar a trabalhar com aplicações reais e, infelizmente, NumPy, Pandas e Scikit-Learn não estão preparados para lidar com dados em grande escala.

A boa notícia é que Dask é uma solução com APIs compatíveis com estas bibliotecas e que entrega escala e paralelismo a um custo praticamente zero em relação a refatoração de código.

Dask implementa Arrays e Dataframes compatíveis com NumPy e Pandas que podem carregar dados maiores do que a capacidade de memória da máquina, além de permitir que estas estruturas sejam distribuídas para processamento em cluster, Dask Distributed. Dask também implementa alguns algoritmos de ML, Dask-ML, semelhante aos modelos de Scikit-Learn, porém otimizados para processamento distribuído.

Outro problema que você possivelmente enfrentará com aplicações reais, é a execução de algoritmos em tempo viável. Se você tem restrições de tempo e performance para seus modelos, a biblioteca RAPIDS pode ser uma boa aliada. RAPIDS é uma solução relativamente nova que permite a execução de algoritmos de ML clássicos em GPU.

Outra ótima notícia é que Dask e RAPIDS integram-se muito bem, permitindo a execução de algoritmos de ML clássicos em escala, com processamento distribuído em clusters multi-nodos e até multi-GPUs. Quando menciono ML clássico, me refiro a algoritmos implementados, por exemplos, em Scikit-Learn, uma vez que Deep Learning com TensorFlow ou PyTorch suportam processamento distribuído e em GPU de forma nativa.

Como você viu na figura acima, treinar modelos é apenas uma pequena parte de um sistema de Machine Learning em produção. Quando se desenvolve uma solução de ML, é preciso se preocupar com coisas como coleta de estatísticas e metadados, preparação dos dados, treinamento, avaliação, tuning, deploy, prediction e monitoramento. Além disso, estas etapas devem ser replicáveis e idealmente agnósticas à infraestrutura, ou seja, o mesmo código deve ser capaz de executar em sua máquina, em um servidor ou um provedor cloud como AWS, Google Cloud ou Azure.

Na categoria de ferramentas que colaboram para esta tarefa estão Kubeflow, um projeto dedicado gerenciamento do ciclo de vida e deploy de workflows de ML em Kubernetes, MLFlow, outra ferramenta para gerenciamento de ciclo de vida de projetos de ML, e TensorFlow Extended (TFX), uma plataforma end-to-end também para deploy de pipelines, mas desta vez voltada para o ecossistema TensorFlow.

Todas estas tecnologias disponibilizam os componentes necessários para a implementação, deploy e monitoramento de pipelines de ML em produção. A playlist TensorFlow Extended (TFX), do canal TensorFlow, e Kubeflow 101, do canal Google Cloud Platform, são minhas recomendações, além das documentações oficiais, é claro.

Outra opção é você mesmo representar pipelines em forma de grafos acíclicos dirigidos ( Directed Acyclic Graph - DAG) e utilizar algum orquestrador de workflow como Argo workflow, Apache Airflow ou Luigi. Estas opções trazem maior flexibilidade para sua solução de Machine Learning ao preço de um maior custo de implementação e manutenção do sistema.

Obviamente muitas coisas ficaram de fora desta lista, definitivamente vale citar as diversas tecnologias Apache que muitas vezes fazem parte de uma solução de ML, como Spark, Kafka, Beam, Hadoop. Além das próprias soluções de containers e deployment como Docker e Kubernetes, que são a base para as soluções MLOps apresentadas na seção anterior.

Qualquer tecnologia poderia fazer parte desta lista, uma vez que Machine Learning pode ser integrado a qualquer tipo de sistema, seja um modelo que rode em um super-cluster, um servidor que recebe requisições através de uma API simples, seu PC ou até seu celular ou Raspberry Pi.

Links Extras #

Aqui estão algumas referências que ainda não tive a oportunidade de explorar, mas que me pareceram interessantes a primeira vista:

Introduction to Computational Thinking and Data Science - MIT, youtube

Mathematics of Big Data and Machine Learning - MIT, youtube

Artificial Intelligence - MIT, youtube

Brains, Minds and Machines Summer Course - MIT, youtube

Introduction to Neural Computation - MIT, youtube

MIT 6.S191: Introduction to Deep Learning, youtube

Lecture Collection | Machine Learning - Stanford

Deep learning at Oxford 2015

Learn End-to-End Machine Learning with TensorFlow from Google Cloud

Distill

Introduction to Machine Learning Course - Udacity

Machine Learning - Udacity

Intro to TensorFlow for Deep Learning - Udacity

Intro to Data Analysis - Udacity

Intro to Descriptive Statistics - Udacity

Deep Learning - Udacity

An Introduction to Statistical Learning - Book

TensorFlow.js - Intelligence and Learning do canal The Coding Train