Normalização e uniformização

Concluído

O Dimensionamento de Funcionalidades é uma técnica que altera o intervalo de valores que uma funcionalidade tem. Fazê-lo ajuda os modelos a aprenderem de forma mais rápida e robusta.

Normalização versus uniformização

A normalização significa dimensionar valores para que todos se ajustem dentro de um determinado intervalo, normalmente 0 a 1. Por exemplo, se tivesse uma lista das idades das pessoas que tinham 0, 50 e 100 anos, poderia normalizar dividindo as idades por 100, para que os seus valores fossem 0, 0,5 e 1.

A uniformização é semelhante, mas, em vez disso, subtraímos a média (também conhecida como média) dos valores e dividimos pelo desvio padrão. Se não estiver familiarizado com o desvio padrão, não se preocupe, isto significa que, após a uniformização, o nosso valor médio é zero e cerca de 95% dos valores caem entre -2 e 2.

Existem outras formas de dimensionar dados, mas as nuances estão para além do que precisamos de saber neste momento. Vamos explorar o motivo pelo qual aplicamos a normalização ou a uniformização.

Por que precisamos de dimensionar?

Existem muitos motivos pelos quais normalizamos ou normalizamos os dados antes da preparação. Pode compreendê-los mais facilmente com um exemplo. Digamos que queremos preparar um modelo para prever se um cão terá sucesso em trabalhar na neve. Os nossos dados são apresentados no gráfico seguinte como pontos e a linha de tendência que estamos a tentar encontrar é apresentada como uma linha sólida:

Diagrama a mostrar o dimensionamento num gráfico de altura de cão e resgates a partir dos 50.

O dimensionamento dá à aprendizagem um melhor ponto de partida

A linha ideal no gráfico anterior tem dois parâmetros: a interceção, que é 50, a linha em x=0 e o declive, que é 0,01; cada 1000 milímetros aumenta os resgates em 10. Vamos supor que começamos a preparação com estimativas iniciais de 0 para ambos os parâmetros.

Se as nossas iterações de preparação estiverem a alterar os parâmetros em cerca de 0,01 por iteração, em média, demora pelo menos 5000 iterações antes de a interceção ser encontrada: 50/0,01 = 5000 iterações. A uniformização pode aproximar esta interceção ideal de zero, o que significa que podemos encontrá-la muito mais rapidamente. Por exemplo, se subtrairmos a média da nossa etiqueta ( resgates anuais — e a nossa funcionalidade — altura), a interceção é -0,5 e não 50, o que podemos encontrar cerca de 100 vezes mais rápido.

Diagrama que mostra o dimensionamento num gráfico de altura de cão e resgates a partir de 0.

Existem outras razões pelas quais os modelos complexos podem ser muito lentos para preparar quando o palpite inicial está longe da marca, mas a solução continua a ser a mesma: compensar as funcionalidades para algo mais próximo do palpite inicial.

A uniformização permite que os parâmetros se preparem à mesma velocidade

Nos nossos dados recentemente desfasados, temos um desvio ideal de -0,5 e um declive ideal de 0,01. Embora a compensação ajude a acelerar as coisas, ainda é muito mais lento treinar o desvio do que treinar o declive. Isto pode abrandar as coisas e tornar o treino instável.

Por exemplo, as nossas estimativas iniciais para desvio e declive são zero. Se estivermos a alterar os nossos parâmetros em cerca de 0,1 em cada iteração, vamos encontrar o desvio rapidamente, mas será muito difícil encontrar o declive correto, porque os aumentos no declive serão demasiado grandes (0 + 0,1 > 0,01) e podem ultrapassar o valor ideal. Podemos diminuir os ajustes, mas isto irá abrandar o tempo que demora a encontrar a interceção.

O que acontece se dimensionarmos a nossa funcionalidade de altura?

Diagrama a mostrar a uniformização num gráfico de altura e salvamentos de cães dimensionados.

O declive da linha é agora 0,5. Preste atenção ao eixo x. A nossa interceção ideal de -0,5 e o declive de 0,5 são a mesma escala! Agora é fácil escolher um tamanho de passo sensato, que é a rapidez com que o gradiente descendente atualiza os parâmetros.

O dimensionamento ajuda com várias funcionalidades

Quando trabalhamos com múltiplas funcionalidades, tê-las numa escala diferente pode causar problemas de adaptação, da mesma forma que vimos com os exemplos de interceção e declive. Por exemplo, se estivermos a preparar um modelo que aceite altura em mm e peso em toneladas de métricas, muitos tipos de modelos terão dificuldade em apreciar a importância da funcionalidade de peso, simplesmente porque é tão pequena em relação às funcionalidades de altura.

Preciso sempre de dimensionar?

Nem sempre precisamos de dimensionar. Alguns tipos de modelos, incluindo os modelos anteriores com linhas retas, podem ser ajustados sem um procedimento iterativo como a descida de gradação, pelo que não se importam que as funcionalidades tenham o tamanho errado. Outros modelos precisam de dimensionamento para preparar bem, mas as respetivas bibliotecas executam frequentemente o dimensionamento de funcionalidades automaticamente.

De um modo geral, as únicas desvantagens reais para a normalização ou uniformização são que pode dificultar a interpretação dos nossos modelos e que temos de escrever um pouco mais de código. Por este motivo, o dimensionamento de funcionalidades é uma parte padrão da criação de modelos de machine learning.