Data Science Academy - Deep Learning II

Regularização

A regularização é uma técnica que reduz o overfitting, que ocorre quando as redes neurais tentam memorizar os dados de treinamento, em vez de aprender sobre eles. Os seres humanos também sofrem de "overfitting". Antes de examinar as formas que leval um algoritmo a sofrer de overfitting, primeiro exploraremos como isso ocorre com os seres humanos.

Os desenvolvedores humanos geralmente fazem exames de certificação para mostrar sua competência em uma determinada linguagem de programação. Para ajudar a se preparar para esses exames, os provedores de testes geralmente oferecem simulados. Considere um desenvolvedor que começa fazendo esses simulados, estudando cada vez mais e repetindo o simulado diversas vezes. Em algum momento, o desenvolvedor memorizou grande parte do simulado, ao invés de aprender as técnicas necessárias para resolver as questões. O desenvolvedor agora se supera no simulado. Quando este desenvolvedor realizar o exame real, sua pontuação provavelmente será menor do que a obtida no simulado. Por que? O desenvolvedor não aprendeu, ele memorizou. E essas ações são diferentes. Quando apresentado a um novo exame, a performance é ruim, pois o conhecimento necessário para resolver as questões não foi aprendido. Você deve se lembrar de um outro termo muito usado na época da escola. É o que chamamos de "decorar" a matéria. E isso é diferente de aprender.   Um computador também possui o mesmo problema. Embora uma rede neural tenha recebido uma pontuação elevada em seus dados de treinamento, esse resultado não significa que a mesma rede neural tenha uma pontuação alta em dados que não estavam dentro do conjunto de treinamento. A regularização é uma das técnicas que podem impedir este problema, chamado de overfitting. Existe uma série de diferentes técnicas de regularização.

Regularização L1 e L2

A regularização L1 e L2 são duas técnicas comuns de regularização que podem reduzir os efeitos do overfitting. Ambos os algoritmos podem trabalhar com uma função objetiva ou como parte do algoritmo de backpropagation. Em ambos os casos, o algoritmo de regularização é anexado ao algoritmo de treinamento acrescentando um objetivo adicional. Ambos os algoritmos funcionam adicionando uma penalidade de peso ao treinamento da rede neural. Esta penalidade encoraja a rede neural a manter os pesos em pequenos valores. L1 e L2 calculam essa penalidade de forma diferente. Para algoritmos baseados na descida do gradiente, como backpropagation, você pode adicionar este cálculo de penalidade aos gradientes calculados.

Ambos L1 e L2 funcionam de forma diferente na forma como eles penalizam o tamanho de um peso. L1 forçará os pesos a um padrão semelhante a uma distribuição de Laplace; O L2 forçará os pesos a um padrão similar a uma distribuição Gaussiana, conforme demonstrado na figura abaixo:

Como você pode ver, o algoritmo L1 é mais tolerante aos pesos além de 0, enquanto o algoritmo L2 é menos tolerante. Vamos destacar outras diferenças importantes entre L1 e L2 nas seções a seguir. Você também precisa notar que L1 e L2 contam suas penalidades com base apenas em pesos; Eles não contam penalidades em valores de bias.

Em resumo:

Regressão Lasso: Executa a regularização L1, ou seja, adiciona penalidade equivalente ao valor absoluto da magnitude dos coeficientes Objetivo de minimização = LS Obj + α * (soma do valor absoluto dos coeficientes)

Regressão Ridge: Executa a regularização L2, ou seja, adiciona penalidade equivalente ao quadrado da magnitude dos coeficientes Objetivo de minimização = LS Obj + α * (soma do quadrado de coeficientes)

Note-se que aqui 'LS Obj' refere-se ao 'objetivo de mínimos quadrados' (Leats Square Objective), ou seja, o objetivo de regressão linear sem regularização.

Regularização L1 (LASSO)

Você deve usar a regularização L1 para criar esparsidade na rede neural. Em outras palavras, o algoritmo L1 irá empurrar muitas conexões de peso para perto de 0. Quando um peso é próximo de 0, o programa o descarta da rede. Descartar conexões ponderadas criará uma rede neural dispersa. A seleção de recursos é um subproduto útil de redes neurais dispersas. Os recursos são os valores que o conjunto de treinamento fornece aos neurônios de entrada. Uma vez que todos os pesos de um neurônio de entrada atingem 0, o treinamento de rede neural determina que o recurso é desnecessário. Se o seu conjunto de dados tiver um grande número de recursos de entrada que podem não ser necessários, a regularização L1 pode ajudar a rede neural a detectar e ignorar recursos desnecessários.

Essencialmente, um desenvolvedor deve equilibrar dois objetivos concorrentes. Ele deve decidir o maior valor de alcançar uma baixa pontuação para a rede neural ou regularizar os pesos. Ambos os resultados têm valor, mas o desenvolvedor deve escolher a importância relativa. Se a regularização for o objetivo principal, o valor λ (lambda) determina que o objetivo L1 é mais importante do que o erro da rede neural. Um valor de 0 significa que a regularização L1 não é considerada. Nesse caso, um erro de rede baixo teria mais importância. Um valor de 0,5 significa que a regularização L1 é metade tão importante quanto o objetivo do erro. Os valores típicos de L1 estão abaixo de 0,1 (10%). Abaixo a fórmula para L1.

O cálculo principal realizado por L1 é o somatório dos valores absolutos (conforme indicado pelas barras verticais) de todos os pesos. Os valores de bias não são somados. Se você estiver usando um algoritmo de otimização, como o simulated annealing, você pode simplesmente combinar o valor retornado pela equação acima com a pontuação. Você deve combinar esse valor com a pontuação de forma a que tenha um efeito negativo. Se você está tentando minimizar a pontuação, então você deve adicionar o valor L1. Da mesma forma, se você está tentando maximizar a pontuação, então você deve subtrair o valor L1. Se você estiver usando a regularização L1 com um algoritmo de treinamento baseado em descida do gradiente, como backpropagation, você precisa usar um termo de erro ligeiramente diferente, como mostrado pela equação abaixo:

A Equação 2 é quase a mesma que a Equação 1, exceto que nós dividimos por n. O valor n representa o número de avaliações de conjunto de treinamento. Por exemplo, se houvesse 100 elementos de conjunto de treinamento e três neurônios de saída, n seria 300. Derivamos esse número porque o programa possui três valores a serem avaliados para cada um desses 100 elementos. É necessário dividir por n porque o programa aplica a Equação 2 em cada avaliação de treinamento. Essa característica contrasta com a Equação 1, que é aplicada uma vez por iteração de treinamento.

Para usar a Equação 2, precisamos tomar sua derivada parcial em relação ao peso. A Equação 3 abaixo mostra a derivada parcial da Equação 2:

Para usar este gradiente, adicionamos esse valor a cada gradiente de peso calculado pelo algoritmo de descida do gradiente. Esta adição é realizada somente para valores de peso; Os bias são deixados sozinhos.

Regularização L2 (Ridge)

Você deve usar a regularização L2 quando você está menos preocupado com a criação de uma rede espacial e está mais preocupado com valores baixos de peso. Os valores de peso mais baixos geralmente levam a um overfitting menor. A Equação abaixo mostra o cálculo de penalidade realizado por L2:

Como o algoritmo L1, o valor λ (lambda) determina a importância do objetivo L2 com o erro da rede neural. Os valores típicos de L2 estão abaixo de 0,1 (10%). O cálculo principal realizado por L2 é o somatório dos quadrados de todos os pesos. Os valores de bias não são somados. Se você estiver usando um algoritmo de otimização, como o simulated annealing, você pode simplesmente combinar o valor retornado pela Equação acima com a pontuação. Você deve combinar esse valor com a pontuação de tal forma que tenha um efeito negativo. Se você está tentando minimizar a pontuação, então você deve adicionar o valor L2. Da mesma forma, se você está tentando maximizar a pontuação, então você deve subtrair o valor L2.

Se você estiver usando a regularização de L2 com um algoritmo de treinamento baseado em descida do gradiente, como backpropagation, você precisa usar um termo de erro ligeiramente diferente, como mostrado pela Equação abaixo:

A Equação 2 é quase a mesma que a Equação 1, exceto que, ao contrário de L1, tomamos os quadrados dos pesos. Para usar a Equação 2, precisamos tomar a derivada parcial em relação ao peso. A Equação 3 abaixo mostra a derivada parcial da Equação 2:

Para usar esse gradiente, você precisa adicionar esse valor a cada gradiente de peso calculado pelo algoritmo de descida do gradiente. Esta adição é realizada apenas em valores de peso; Os bias são deixados sozinhos.

Fim