Regularização de esparsidade: regularização L1

Os vetores esparsos geralmente contêm muitas dimensões. Criar um cruzamento de atributos resulta em ainda mais dimensões. Considerando esses vetores de atributo de alta dimensão, o tamanho do modelo pode ficar enorme e exigir grandes quantidades de RAM.

Em um vetor esparso de alta dimensão, seria bom incentivar os pesos a cair para exatamente 0 sempre que possível. Um peso exatamente 0 remove essencialmente o atributo correspondente do modelo. zerar os recursos vai economizar RAM e pode reduzir o ruído no modelo.

Por exemplo, considere um conjunto de dados habitacionais que abrange não apenas a Califórnia, mas todo o mundo. O agrupamento por classes de latitude global no nível de minuto (60 minutos por grau) fornece cerca de 10.000 dimensões em uma codificação esparsa. A longitude global no nível de minuto fornece cerca de 20.000 dimensões. Um cruzamento desses dois atributos resultaria em cerca de 200.000.000 dimensões. Muitas dessas 200 milhões de dimensões representam áreas de residência tão limitada (por exemplo, o meio do oceano) que seria difícil usar esses dados para generalizar de maneira eficaz. Seria ótimo pagar o custo de RAM para armazenar essas dimensões desnecessárias. Portanto, é recomendável incentivar os pesos das dimensões sem significado a caírem exatamente para zero, o que nos permitiria evitar pagar pelo custo de armazenamento desses coeficientes do modelo no momento da inferência.

Podemos codificar essa ideia no problema de otimização feito no momento do treinamento adicionando um termo de regularização escolhido corretamente.

A regularização L2 realizaria essa tarefa? Infelizmente, não. A regularização L2 incentiva os pesos a serem pequenos, mas não os força a exatamente 0,0.

Uma ideia alternativa seria tentar criar um termo de regularização que penalize a contagem de valores de coeficiente diferentes de zero em um modelo. Isso só seria justificado se houvesse um ganho suficiente na capacidade do modelo de ajustar os dados. Infelizmente, embora essa abordagem baseada em contagem seja intuitivamente atraente, ela transformaria nosso problema de otimização convexa em um problema de otimização não convexo. Portanto, essa ideia, conhecida como regularização L0, não é algo que podemos usar efetivamente na prática.

No entanto, há um termo de regularização L1 que serve como uma aproximação para L0, mas tem a vantagem de ser convexo e, portanto, eficiente de computação. Assim, podemos usar a regularização de L1 para incentivar muitos dos coeficientes não informativos em nosso modelo a serem exatamente 0 e, assim, conseguir economia de RAM no momento da inferência.

Regularização de L1 x L2.

L2 e L1 penalizam as ponderações de forma diferente:

  • O L2 penaliza o peso2.
  • L1 penaliza por |peso|.

Consequentemente, L2 e L1 têm derivados diferentes:

  • A derivada de L2 é 2 * peso.
  • A derivada de L1 é k (uma constante, cujo valor é independente do peso).

Pense na derivada de L2 como uma força que sempre remove x% do peso. Como a Zeno sabia, mesmo que você remova x por cento de um número bilhões de vezes, o número reduzido ainda nunca chegará a zero. O Zeno estava menos familiarizado com as limitações de precisão de ponto flutuante, o que poderia produzir exatamente zero. De qualquer forma, L2 não costuma levar os pesos a zero.

Pense na derivada de L1 como uma força que sempre subtrai alguma constante do peso. No entanto, graças aos valores absolutos, L1 tem uma descontinuidade em 0, o que faz com que os resultados de subtração que cruzem 0 sejam zerados. Por exemplo, se a subtração tiver forçado um peso de +0,1 a -0,2, L1 definirá o peso como exatamente 0. Eureka, L1 zerou o peso.

A regularização L1, que penaliza o valor absoluto de todos os pesos, é bastante eficiente para modelos esparsos.

A descrição é verdadeira para um modelo unidimensional.

Clique no botão Reproduzir () abaixo para comparar o efeito que a regularização L1 e L2 têm em uma rede de pesos.