O que é Machine Learning?
Machine Learning é um subcampo de Inteligência Artificial que usa algoritmos (também conhecidos como modelos), de forma "a aprender a dar respostas sobre um problema”.
Na sua essência, Machine Learning usa modelos de forma a encontrar padrões existentes nos dados sem que sejam programados explicitamente quais são esses padrões.
É possível pensar que os modelos de Machine Learning são como crianças durante o seu processo de aprendizagem. Por exemplo, imagine que queremos ensinar uma criança a distinguir cães de gatos. Primeiro, seriam apresentadas um conjunto de imagens destes animais à criança e para cada uma das imagens mostra qual a resposta correta. Aos poucos, a criança vai associar os padrões existentes na imagem ao animal.
Quanto mais imagens a criança analisar, melhor irá distinguir cães e gatos. Chegará a um momento em que a criança irá ser capaz de reconhecer um cão ou gato sem a ajuda do professor. Mas, se apresentarmos uma imagem de uma galinha, a criança não será capaz de a identificar, pois apenas sabe distinguir cães e gatos. Da mesma forma, não saberá distinguir diferentes raças de cães e gatos.
Tudo o que é preciso em Machine Learning é escolher os dados (imagens de cães e gatos), treinar o modelo (ensinar a criança) e testar a precisão de classificação do modelo (mostrando imagens de cães e gatos que a criança não viu anteriormente).
Quais são as diferenças entre programação tradicional e Machine Learning?
Na programação tradicional, todas as regras necessárias para chegar a um determinado resultado são escritas. Voltando ao exemplo de distinguir cães e gatos, é preciso codificar todas as características existentes que permitem classificar cães e gatos, como o tamanho do animal e o comprimento do pelo.
Isto é uma tarefa complexa, difícil e morosa. Significa também que quanto maior a variância entre os dados (mais características), mais regras deverão ser escritas o que torna a solução mais complexa, complicando não só o seu entendimento como a sua manutenção.
Classificação de imagens e reconhecimento de voz são problemas demasiado complexos para que a programação tradicional os consiga resolver, mas não para Machine Learning.
Todavia, o grande potencial de Machine Learning é conseguir dar as respostas corretas para dados que não foram utilizados no processo de treino do modelo.
Consequentemente, o fator que mais contribui para a performance dos modelos de Machine Learning é a quantidade e qualidade dos dados, bem como a escolha do modelo que mais se adequa ao problema/dados.
Concluindo, em programação tradicional é necessário a escrita de todas as regras que vão representar o comportamento do programa, enquanto que em Machine Learning o modelo reconhece padrões nos dados e são estes que vão ditar o comportamento do programa.
Quantos modelos de Machine Learning existem?
Bem, existem muitos modelos e o scikit criou uma imagem interativa (que pode ser vista aqui) onde explica o processo de escolha do melhor modelo para o problema que pretendemos resolver.
Mas basicamente existem quatro categorias principais onde o tipo de treino do modelo se adequa ao tipo de problema que pretendemos resolver:
Supervised Learning: modelos que utilizam dados que contam as respostas corretas, onde a aprendizagem é feita através do reconhecimento de padrões existentes nos dados;
Unsupervised Learning: modelos que utilizam dados que não contam qualquer resposta, esperando que este reconheça padrões nos dados e devolva respostas, mesmo que não sejam as mais adequadas ou corretas;
Semi-Supervised Learning: é o meio termo entre Supervised Learning e Unsupervised Learning visto que utiliza dados que possuem e não possuem as respostas pretendidas;
Reinforcement learning: modelos cujo processo de treino é feito à base de punições e prémios.
Processo de recolha de dados, treino, teste e predição
O processo de desenvolvimento de software utilizando modelos de Machine Learning passa pelas seguintes fases: recolha e normalização de dados, treino, teste (ou avaliação) e predição. Cada uma das fases irá ajudar no processo de fine-tuning do modelo de forma a obter os melhores resultados possíveis.
Recolha e normalização dos dados
Esta é uma das fases mais importantes do processo de desenvolvimento, pois é aqui que se procede à recolha e transformação de dados em formatos passíveis de serem consumidos por modelos. É também nesta fase que se procede à escolha do modelo que mais se adequa ao problema e aos dados recolhidos.
Processo de Treino
Nesta fase, o modelo escolhido será treinado utilizando os dados previamente recolhidos. Durante o treino, o modelo irá encontrar padrões nos dados, para que consiga prever a resposta correta para novos. Para o exemplo de classificar imagens de cães e gatos, cada imagem utilizada no processo de treino irá conter a resposta correta, onde o algoritmo irá perceber as características de cada imagem e correlacioná-la com a resposta certa.
Processo de teste
O processo de teste (ou processo de avaliação) irá testar a performance do modelo utilizando dados que não foram utilizados no processo de treino de forma a simular uma utilização do modelo em produção. Tipicamente, a base de dados é dividida em dados de treino (~80%) e dados de teste (~20%) e os resultados obtidos no processo de avaliação do modelo são usados para afinar o modelo de forma a obter a melhor performance possível.
Métricas como exatidão, precisão, recall, e F-score são bastante utilizadas para perceber o quão boa é a performance do nosso modelo (ver também os conceitos
underfiting e overfiting).
Predição
É nesta fase que o modelo é consumido de forma a responder ao problema para que foi treinado.
Redes Neuronais Artificiais
As redes neuronais são a estrutura do software (ou algoritmos). Elas imitam a forma como os neurónios "biológicos” interagem com o objetivo de reconhecer padrões em dados.
São considerados os mais promissores algoritmos existentes em Machine Learning não só pela sua eficácia em encontrar padrões complexos em dados mas também pelo estado da tecnologia atual (como poder computacional, ferramentas disponíveis e impressionantes resultados em projetos de investigação).
Em 2016,
Fjodo van Venn criou um gráfico onde apresenta 27 topologias de redes neuronais que podem ser aplicadas em diferentes cenários.
O que é o Deep Learning?
Provavelmente já ouviste falar sobre Deep Learning, mas o que é em concreto?
Deep Learning é um subcampo de Machine Learning que usa redes neuronais artificiais de uma forma mais complexa (com mais neurónios e e hidden layers) que os usados tradicionalmente em Machine Learning.
Assim, a maior parte das topologias de redes neuronais apresentadas anteriormente pertencem ao campo Deep Learning devido à sua complexidade.
Resumidamente, Deep Learning é um campo que exclusivamente constrói e manipula redes neuronais.
No entanto, é a Google que está a apostar mais nesta tecnologia na tentativa de democratizá-la, lançando um conjunto de
ferramentas, documentação e tutoriais acessíveis gratuitamente, sendo um dos principais responsáveis pela sua popularização.
Mais ainda, criou e disponibilizou um conjunto de Convolutional Neuronal Networks especializadas em reconhecimento de padrões em imagens.
Mas o que é uma Convolutional Neuronal Network?
Convolutional Neuronal Network é uma topologia de rede neuronal que utiliza grupos de hidden layers responsáveis por compactar informação e destacar características em imagens de forma a facilitar o reconhecimento de padrões existentes. Em outras palavras, é um modelo de Machine Learning especializado em classificar imagens.
O mais impressionante sobre este modelo é que já ultrapassou a capacidade humana em classificar imagens.
A importância da base de dados Imagenet
A criação da base de dados Imagenet originou um concurso que teve um papel importante no aumento da precisão dos modelos Deep Learning. Em apenas 7 anos (2010-2017) a precisão de classificação de imagens aumentou de 71.8% para 97.3%.
A base de dados consiste em 3.2 milhões de imagens classificadas, divididas em 5247 categorias e organizadas em 12 categorias principais (como mamífero ou carro).
Pontos-Chave
Machine Learning é um subcampo de Inteligência Artificial que utiliza algoritmos (também conhecidos como modelos) para aprender a partir de um conjunto de dados;
Na programação tradicional, todas as regras são escritas. Em Machine Learning, modelos são criados para descobrir padrões em dados;
Existem quatro categorias em Machine Learning: Supervised, Unsupervised, Semi-Supervised and Reinforcement Learning;
O processo de desenvolvimento é dividido entre recolha e normalização de dados, treino, avaliação e predição;
Deep Learning é um subcampo de Machine Learning que utiliza redes neuronais de uma forma mais complexa;
Convolutional Neuronal Networks são especializadas em reconhecimento de padrões em imagens;
A base de dados Imagenet teve um papel fundamental no aumento da performance de modelos Deep Learning.