2.2 Machine Learning (ML)
2.2.7 Classificadores / Regressores
Qualquer classificador/regressor é treinado com dados de exemplo para os quais há dados de classificação ou dados numéricos conhecidos e tenta aprender com estes de forma a conseguir generalizar. A regressão é utilizada para prever valores contínuos. A classificação é utilizada para prever a classe a que determinado dado pertence, ou seja, é um valor discreto.
Decision Trees
As decision trees, são um conceito fundamental de ML. Existem várias variantes de decision trees,
como, decision forest, decision jungles e boosted decision trees. Mas todas estas funcionam da
mesma forma. Dividem o espaço das features em regiões onde agrupam as que possuem a mesma
anotação como podemos ver na Figura 1. Estas regiões podem ter uma categoria especifica ou um valor constante, dependendo se estamos a executar uma classificação ou regressão.
Figura 1 – Classificação através de uma Decision Tree (“How to choose machine learning algorithms | Microsoft Docs,” n.d.)
Como o espaço das features pode ser dividido em pequenas regiões, é fácil de imaginar que é possível dividi-lo em demasia de forma a obter no final um ponto de dados por região. Esta situação
é designada por overfiting, ou seja, temos a nossa árvore demasiado ajustada aos dados de treino,
e caso esta tente prever novos dados, não vai ser capaz de os interpretar. Para evitar que isto aconteça, podemos usar várias árvores, tentando evitar que as arvores não estejam
correlacionadas(Patterson & Gibson, 2017). Estas decision trees podem consumir muita memória.
Neural Network (NN)
Antes de explicar em que consiste uma Neural Network é importante explicar em que consiste uma
layer.
Uma layer (camada), é um bloco de construção de alto nível, esta recebe um valor de entrada,
transformando esse valor através de operações matemáticas e de seguida, transmite esse valor
input layer e outputlayer, respetivamente. Todas as restantes são as intermediárias e geralmente
são designadas por hidden layers.
As redes neuronais são algoritmos de aprendizagem inspirados no cérebro humano. Estas redes existem numa variedade infinita. De uma forma generalista funcionam da seguinte maneira, as
features de entrada são transmitidas numa sequência de layers até chegaram à layer final que irá
devolver a saída, como podemos ver na Figura 2. Em cada layer as entradas são multiplicadas por
diferentes pesos e transmitidas para a próxima layer. Esta combinação de cálculos resulta da
capacidade de aprender os limites de cada classe e a sua tendência de dados(Patterson & Gibson, 2017). As neural networks com muitas layers são chamadas redes Deep Learning, do qual irei descrever mais detalhe no tópico 2.3. Estas redes possuem um alto desempenho, mas para tal
necessitam de grandes datasets com muitos exemplos e consequentemente demoram de muito
tempo para treinar. Estas redes são muito ajustáveis pois possuem muitos parâmetros que permitem expandir o tempo de treino assim como a sua eficácia.
Figura 2 - Classificação através de uma Neural Network (“How to choose machine learning algorithms | Microsoft Docs,” n.d.)
Os limites de uma neural network podem ser por vezes muito complexos e irregulares. Existem
vários tipos de layers, em seguida irei falar de algumas delas:
Convolutional Layer - considerando um input de 32 × 32 × 3, e imaginando uma lanterna a iluminar
o canto superior esquerdo da imagem, e a área que essa luz atinge é de 5 × 5. Na terminologia de
Machine Learning, esta lanterna é intitulada de filtro e área iluminada pela mesma é chamada de
campo recetivo. Este filtro possui uma matriz de números chamados de pesos ou parâmetros. À medida que o filtro está a percorrer a imagem, está a multiplicar os seus pesos com os valores dos pixels originais da imagem. Estas multiplicações são somadas de forma a obtermos apenas um número. Este número é obtido apenas quando o filtro está posicionado no canto superior esquerdo.
Agora repetimos este processo para cada localização do nosso input. Após percorrer com o filtro
pelo input iremos obter uma matriz de 28 × 28 × 1, a que chamamos um mapa de ativação
(activation map) ou mapa de características (feature map). O motivo pelo qual é obtida uma matriz
de 28 × 28 é devido a existirem 784 localizações onde um filtro de 5 × 5 pode encaixar numa
imagem de entrada de 32 × 32.
Figura 3 - Visualização de um filtro 5 x 5 a produzir um mapa de ativação (Nielsen, 2015)
Fully Connected Layer - basicamente esta layer, lê um valor de entrada e produz uma saída que
consiste num vetor de N elementos, onde N corresponde ao número de classes. Por exemplo caso o nosso programa de classificação seja capaz de detetar dígitos, N seria 10, caso o vetor resultante fosse [0.2 0 0 0 0 0.75 0 0 0.05], então isso significaria que a probabilidade de a imagem ser o
número 1 é 20%, de ser o número 6 é 75% e de ser número 0 é 5%. O funcionamento desta layer
consiste na leitura da saída da layer anterior e determina quais são as features que mais se correlacionam com uma determinada classe.
ReLU (Rectified Linear Units) Layers - o objetivo desta camada é introduzir uma não-linearidade a
layers aumentam as propriedades não-lineares do modelo e da rede geral sem afetar os campos recetivos da convolutional layer.
Pooling Layers - existem várias opções neste tipo de layers, a mais popular é o maxpooling. Esta
layer consiste basicamente num filtro geralmente 2 × 2 e um stride com o mesmo tamanho. De
seguida, aplica o filtro ao input e obtém o valor máximo em cada sub-região onde o filtro é aplicado.
Figura 4 - Exemplo de uma layer Maxpooling de 2 x 2 com um stride de 2 (Nielsen, 2015)
Dropout Layers - estas layers tem uma função muito especifica nas redes neuronais. Esta layer
“elimina” um conjunto aleatório de ativações, ajustando-as para zero, de forma a forçar a rede a ser redundante. Isto quer dizer que a rede deve ser capaz de fornecer a classificação correta para um exemplo específico, mesmo que algumas ativações sejam descartadas. Isto garante que a rede não
está demasiado ajustada (overfitting). Esta layer é apenas usada durante o treino e não durante a
fase de testes.
Support Vector Machine (SVM)
As SVMs encontram um limite que permite separar ambas as classes por uma margem. Quando as classes não podem ser separadas, estes algoritmos tentam encontrar o melhor limite possível(Patterson & Gibson, 2017). Como esta aproximação é linear, estes algoritmos podem ser executados de forma bastante rápida e exigindo uma quantidade de memória modesta. Na Figura 5, podemos ver um exemplo de um SVM para classificar ovelhas e cabras.
Figura 5 – Classificação através de um SVM (“How to choose machine learning algorithms | Microsoft Docs,” n.d.)