Série: Deep Learning With Python — Parte 4

Original article was published by Preta Tech — (Carol Silva) on Deep Learning on Medium


Overfitting e Underfitting

Em alguns exemplos usados nos últimos artigos eu falei “Vamos evitar overfitting” ou “Podemos perceber que teve overfitting” e você deve ter pensado algo como:

”O que raios é esse overfitting?”

É hoje que vamos explicar esse negócio!!

Através da imagem nós temos três visualizações da performance do modelamento da máquina. Então vamos por partes.

Quando o modelo começa a ser treinado, ainda com poucas iterações (épocas), nós temos o underfitted.

“Ah então quer dizer que o underfitting acontece só em início do treinamento?”

Não, mas é uma boa forma da gente entender o porquê disso acontecer. No início do treinamento os dados são poucos e a máquina não extraiu características o suficiente para ter uma boa performance. Então podemos dizer que quando o resultado final do nosso modelo for um gráfico parecido com o primeiro apresentado na imagem o nosso modelo “underfitou”, e muito provavelmente é porque a rede precisa de mais dados, iterações, épocas, camadas, etc.

Beleza então.

No gráfico ao meio temos o “Good fit/Robust”, esse é o resultado ideal. Perceba que a curva do gráfico ficou entre os valores. Esse é o desejado.

No terceiro gráfico perceba que a curva acompanhou cada ponto do espaço. Você pode pensar que isso é ótimo porque significa que o modelo acertou tudo, mas lembra que falamos sobre o jogo da memória e que não é legal que a rede fique viciada nos nossos dados? Pois então, é mais ou menos isso. No overfitting nossa rede fica treinada demais, de uma forma que se apresentarmos um dado diferente, muito provavelmente a rede não conseguirá prever o resultado.

Algumas metodologias utilizadas para evitar o overfitting são:

  • Validação Cruzada
  • Aumentar a quantidade de dados de treinamento/Adquirir mais dados
  • Utilizado do processo de Data Augmentation (veremos em breve)
  • Técnicas de Regularização (L1, L2 e Dropout)
  • Parada antecipada (stop early)

Acredito que até aqui você já pegou a ideia de como funciona o machine learning, agora a dúvida pode ser em como trabalhar com problemas de machine learning. François nos apresenta um “passo-a-passo”.

  1. Definindo o problema e o dataset a ser trabalho. Essa etapa é de fundamental importância. Antes de mais nada é preciso fazer perguntas fundamentais como:

“Qual vai ser o input data? O que estou tentando prever? Qual o tipo de problema estou trabalhando? É uma classificação? Binária? Multiclasses? Regressão? “

Essas são perguntas que irão te guiar no processo de definição do problema e de como trabalhar com o seu conjunto de dados.

Para passar para o próximo estágio você precisa estar consciente de duas coisas:

-Você acredita que com os dados que você tem, você vai conseguir prever resultados

– Você acredita que os seus dados são suficientes e que contem informações relevantes para associas saída e entrada.

2. Escolhendo a medida do sucesso

Bom, tendo um conjunto de dados, você precisa pensar numa forma de avaliar o seu modelo. Qual será essa sua métrica de avaliação? É Acurácia? Precisão? Lembre-se que a sua métrica é o que vai te guiar, o que vai te dizer se o seu modelo esta performando bem ou não. É a forma que você vai ter de visualizar para que caminho está indo a sua rede.

3. Decidindo um protocolo de avaliação dos dados

Já vimos aqui as fomas de avaliação, então é nessa etapa que você vai decidir entre Hold-out, K-fold e outras formas.

4. Pré-processamento

É preciso preparar os dados para alimentar a rede neural. Se preciso for, normalize, vetorize e retire os dados faltantes/nulos.

5. Desenvolvendo um modelo que performa melhor que o padrão/baseline

Nessa etapa você já tem tudo pra fazer um primeiro modelo. Não apenas isso.

Aqui você vai trabalhar para obter um modelo que tenha um poder estatístico, ou seja, que alcance resultados possíveis de serem trabalhados. Aqui serão tomadas três decisões importantes para construção de um modelo com poder estatístico: função de ativação da ultima camada, função de perda e configuração do otimizador. Essas são as três chaves para o sucesso inicial do seu programa computacional.

6. Progredindo: Evitando o overfit

Alcançou um modelo que tenha um poder estatístico? Os resultados são bons? Então é hora de melhorar!

Sabemos que todos os modelos tendem a ser ‘overfitados’, então é nessa etapa que vamos aplicar algumas técnicas para evitar o overfitting da nossa aplicação. Seja aplicando novas camadas, fazendo camadas maiores ou treinando o modelo por mais épocas.

7. Regularizando o modelo

Essa é a etapa mais demorada, pois é aqui que você vai modificar o modelo repetidamente, treinar, avaliar e validar os dados. E depois disso? Realiza tudo novamente. Adicionando camada de dropout, testando diferentes arquiteturas (adicionando ou retirando camadas), regularizando em L1 e/ou L2, até que o modelo alcance a melhor performance possível.

Alcançado a melhor performance? Prontinho então! Hora de salvar o modelo ^^

Vai falar que essa parte não foi legal?

Espera que a partir da parte 5 vai ficar mais top ainda!

Uma dica útil para a próxima semana: Prepare seu melhor workstation porque vamos codar MUITO!