3
respostas

Perdas (loss) escala de exibição e eficiencia computacional

A professora mostrou uma das formas que podemos utilizar para normalizar uma escala.

imagens_treino = imagens_treino/255

Desta forma os valores de loss caem significativamente. Entretanto parecer ser uma questão de escala. Um exemplo:

350 gramas de perda
0.35 kg de perda

Apesar de numericamente o segundo ser menor, ele representa a mesma coisa, mas em outra escala de medida.

Para tirar a prova, peguei o código e fiz o seguinte:

imagens_treino = imagens_treino * 10000

Os valores de loss foram superiores, o que pode indicar que temos uma perda similar mas em outra escala.

3 respostas

Eficiência Computacional com a Normalização

Na escala de 1 a 255 em números inteiros, temos uma quantidade limitada de números, o que permite ter precisão.

Quando normalizamos temos uma escala de 0 a 1, o que representa uma quantidade virtualmente infinita e com imprecisão da própria máquina.

Então, ao normalizar saltamos de números inteiros e limitados para um leque muito maior de números. Chegamos ao x da questão. A forma como o Python trabalha com a memória.


a = [1, 2, 3, 4]
b = [4, 3, 2, 1]

# O endereço que o 4 ocupa na memória na lista a
id(a[3])
1615067104

# O endereço que o 4 ocupa na memória na lista b
id(b[0])
1615067104

Como vimos, o número 4 pode estar em várias listas, mas ocupando apenas um lugar na memoria.

Ao normalizar e cairmos em uma escala maior não corremos o risco de exigir mais recursos (locais na memória) quando passarmos a trabalhar com uma faixa maior de números?

Ou até mesmo quando for preciso realizar o cruzamento de dados a quantidade de locais que terão que ser consultados sendo maior não consumiria mais recursos?

Ou ainda é precoce me preocupar com este ponto neste momento do estudo?

Olá Bruno.

O motivo de normalizarmos os dados é um assunto mais profundo, e quando usamos bibliotecas como Keras que abstraem os conceitos acabamos tendo dificuldade de entender.

Mas o ganho em normalizar os dados está relacionado com o tempo que a rede vai demorar para convergir, você pode ler mais detalhes sobre normalização nesse Artigo.

Entendi a sua preocupação com performance, mas pensando que teremos uma rede que aprende mais rápido, vemos que seremos mais rápidos se optarmos pela normalização.

Espero ter ajudado, mas se tiver mais duvidas ou se quiser direcionamento de como se aprofundar mais nesse assunto, não hesite em perguntar.

Bons Estudos.

Tudo bem, Igor!

Acho que os modelos usados nas aulas não são os melhores para os testes que tenho feito a respeito de normalização.

Em geral, a normalização tem uma convergência relativamente mais rápida.

Ela consegue resultados melhores com o mesmo número de epochs, mas leva um tempo maior em relação ao outro método. O tempo que sobra para o método com pior resultado, mas mais rápido, pode ser usado para rodar mais epochs.

A ideia que estou testando é: "um método, mesmo sendo menos eficaz, pode ter resultados melhores tirando partido da sua eficiência (tendo mais tempo para rodar mais vezes, por exemplo)"?

Não tenho uma resposta para isto, mas testar é algo que me agrada.

Abraço!