Como evitar overfitting?

Não existe uma bala-de-prata para evitar overfitting. Boas práticas na condução de procedimentos experimentais, aliado ao entendimento do significado desse fenômeno, 99-ou-overfitting
contribuem para amenizar esse indesejável problema. Seguem alguns pontos a considerar para combater o overfitting.

treinar com mais dados

Se a máquina de aprendizagem usada é complexa, em termos da quantidade de parâmetros a ajustar, uma alternativa é adquirir mais dados com o intuito de equilibrar a quantidade de parâmetros versus a quantidade de instâncias de treinamento. Ou, simplesmente, deve-se escolher uma máquina mais simples, que tenha menos parâmetros.

validação cruzada

Uma das formas de realizar validação cruzada é usar o procedimento k-fold cross-validation. Nesse procedimento, o conjunto de dados é dividido em k partes, aproximadamente do mesmo tamanho, das quais, k-1 partes são usadas para treinar o modelo e a parte restante é usada para avaliar o modelo. Esse processo é repetido k vezes, de forma que cada parte será usada tanto para treinar como para avaliar o modelo. De maneira geral, a validação cruzada, por si só, não evita overfitting, mas segue uma boa prática ao separar o conjunto de teste e ao realizar um revezamento dos dados para uma melhor avaliação, no que tange a generalização do modelo em instâncias não vistas. Uma observação: o k-fold cross-validation não é uma boa opção quando o conjunto possui poucos dados.

parar o treinamento mais cedo (early stopping)

Máquinas de aprendizagem, tais como redes neurais artificiais, árvores de decisão, deep learning, entre outras, aprendem iterativamente. A cada passo, a máquina ajusta seus parâmetros aos dados e isso pode ser monitorado. Pode-se usar esse monitoramento para decidir qual é o melhor momento de interromper o treinamento da máquina. Espera-se que a precisão no conjunto de treinamento aumente com o tempo, mas, em relação ao conjunto de validação, a acurácia deve atingir um pico e depois cair. Esse pode ser um bom momento para frear o treinamento, antes que a máquina se sobreajuste aos dados.

regularização

Regularização é um conceito amplo que envolve várias técnicas com o propósito de produzir modelos que melhor se ajustem aos dados, evitando overfitting. Um exemplo é o procedimento de poda em uma árvore de decisão. Esse consiste em eliminar alguns “galhos” que, uma vez removidos, reduzirá a árvore, tornando-a mais simples e menos específica às instâncias de treinamento. Outros exemplos de técnicas de regularização envolvem dropout em redes neurais e adição de parâmetros de penalização na função de custo.

ensemble

Ensemble learning, ou sistema de múltiplos classificadores – SMC -,  combina as saídas de vários modelos com o intuito de melhorar a resposta final do sistema. Os SMCs têm alcançado resultados melhores do que o uso de modelos isolados. Esse sucesso deve-se a divisão de tarefas que é o espírito dessa área. Baseado no princípio de dividir-para-conquistar, cada modelo que compõe o SMC é treinado com parte do conjunto de treinamento e, consequentemente, acaba por se tornar um especialista nessa porção. Essa estratégia ajuda a amenizar o overfitting, e além disso, é robusta à presença de ruído nos dados.

 

Como representar uma tarefa de aprendizagem de máquina: handcrafted features vs feature learning

Quando tomamos uma decisão, usamos uma grande quantidade de variáveis e de hierarquias de variáveis. Muitas vezes, nem nos apercebermos da importância dessas variáveis, pois, a complexidade de algumas decisões está além do nosso entendimento. Para ilustrar: você poderia me explicar, em detalhes, como reconhece seu amigo? Quais características, seus sistemas (visual, auditivo, …) analisam, a fim de identificá-lo com precisão?

Ok, vamos para um exemplo mais palpável. Suponha que desejamos comprar um carro. De pronto, nos vem a mente, uma série de variáveis que devemos avaliar: preço, cor, consumo de combustível, procedência, entre outras. Essas características nos ajudam a decidir, se iremos ou não comprar o carro.

De maneira similar, o conjunto de características, que apresentamos à máquina de aprendizagem, é de imperativa importância para que ela consiga tomar a melhor decisão. A escolha dessas características é uma tarefa não trivial, principalmente, quando não temos um especialista para nos ajudar no problema que desejamos resolver (e.g., comprar um carro usado sem a ajuda de um mecânico).

Em aprendizagem de máquina, essas características (features, em inglês), também chamadas de variáveis ou atributos, são fundamentais para o sucesso do processo de aprendizagem. Mas, geralmente, não sabemos quais são as características mais relevantes, consequentemente, decidimos por usar um grande número de características.  Assim, corre-se o risco de que algumas delas sejam irrelevantes ou mesmo prejudiciais para o treinamento da máquina de aprendizagem. Com o objetivo de reduzir essa quantidade de características e por conseguinte, aliviar a maldição da dimensionalidade, a alternativa mais comum é usar algoritmos de seleção de características. Esses algoritmos têm o papel de buscar o melhor subconjunto de características, a fim de realizar com sucesso, a tarefa que temos em mãos.

Mas, para selecionar características, precisamos, em primeiro lugar, ter as características. Essas características podem ser obtidas de duas formas: manual (handcrafted features) ou podem ser aprendidas (feature learning).

hand-crafted-vs-feature-learningNa primeira forma, handcrafted features, um conjunto de características é recomendado por um especialista, com a ajuda de um cientista de dados, e esse processo é chamado de feature engineering. Tal processo é mostrado no caminho superior da figura acima, no qual, o trabalho do especialista é definir as características (e/ou algoritmos extratores de características), que serão usadas para representar uma árvore. Após essa definição, um modelo é treinado, com o intuito de rotular como “árvore”, toda imagem de árvore que for dada como entrada ao sistema. Vale salientar, que se poucos especialistas estiverem disponíveis no mercado, o custo de seus serviços será alto. Todavia, mesmo se os especialistas estiverem disponíveis, a tarefa é inerentemente difícil. Não é incomum que especialistas discordem (links: 1, 2, 3, 4).

Dado que <manual> feature engineering é uma tarefa cara e difícil, como evitá-la? Uma alternativa é construir máquinas capazes de realizar essa tarefa automaticamente. Ou seja, ao invés da busca ser feita por humanos, podemos delegar a tarefa de encontrar as melhores características para um algoritmo. Esse procedimento é chamado de feature learning (mostrado como sendo o caminho inferior da imagem acima). A boa notícia é que algumas máquinas já fazem esse trabalho. Arquiteturas de aprendizado profundo (deep learning – DL) estão sendo usadas para esse fim, especialmente, para tarefas que envolvam imagens, voz e texto.

Não é à toa, que DL tem se destacado nas manchetes dos noticiários ultimamente. Ela tem obtido resultados bem superiores às handcrafted features em várias aplicações, e esse sucesso deve-se ao fato de que as características são aprendidas a partir dos dados do problema. Em outras palavras, essas características são automaticamente extraídas dos dados originais, por algoritmos que buscam minimizar o erro global do sistema. Logo, o conjunto de características gerado é dependente do problema, ou seja, são personalizadas para cada conjunto de dados de treinamento.

Ganha-se em precisão, perde-se em interpretabilidade. Essa é uma desvantagem de DL. As características aprendidas não possuem explicação conhecida no mundo real. Nesse sentido, o processo realizado pela DL, ao aprender as características, é, de certa forma, semelhante ao processo que trilhamos, por exemplo, ao reconhecer uma pessoa. Sabemos que funciona… mas não conseguimos explicar em detalhes como realizamos essa tarefa.

Outro fator limitante está relacionado à abrangência. Sabemos como aprender automaticamente características interessantes, quando os dados de entrada são imagens, voz e texto. O desafio agora é expandir esse aprendizado automático para outras aplicações, que ainda requerem a manufatura de características.