Breno

Consertando a perda inicial no aprendizado

Discuti com o Claude Opus 4.7 Adaptive a respeito do estudo do curso que Karpathy tem. Estava estudando com o Claude considerando as transcrições e a base de conhecimento que o Claude tem sobre o curso do Karpathy. It really worked. Deparei-me com um vídeo sobre LLM na prática e me motivei com os estudos. Sabe, falava, no post que compartilhou, sobre os engenheiros da Anthropic que tinham aquele conhecimento. Era um vídeo de Stanford. Enfim, a motivação me ajudou a considerar o curso do Karpathy como foco. E na discussão com o Claude, ele disse que seria melhor o estudo com o Karpathy, pelos vídeos.

O notebook estava lá. Segui os estudos. Em termos de código, havia parado na parte sobre consertar a perda inicial no aprendizado.

Considera-se para investigação a primeira iteração. Lá que se identifica que o valor da perda fica alta. Dá-se um break e se observa.

Depois, investiga-se os logits. Eles são altos.

Para se ter melhor compreensão, Karpathy considera um exemplo com 4 dimensões. Temos então os seguintes cenários.

Para as 4 dimensões todas com valor 0.0, chega-se a um valor razoável e bom para a perda inicial. O softmax, considerando a distribuição uniforme, gera valores razoáveis dos logits e a perda inicial fica como esperada.

Para as 4 dimensões com um valor alto na resposta correta, a perda inicial fica então muito pequena.

Considerando as 4 dimensões agora com valores aleatórios e altos nas outras posições, já se observa que a perda inicial fica muito alta relativamente ao que se esperaria.

Depois, considerando as 4 dimensões, mas já com a inicialização com valores da distribuição normal de torch.randn, já pode se obter valores de perda inicial altos. E multiplicando esses valores, por 10, por exemplo, a perda inicial fica maior.

Então o que se observou foi que os logits precisam ser pequenos. O objetivo seria obter uma perda inicial próxima do que deveria ser com uma distribuição uniforme.

O que se ganha com isso seria um foco da rede com aprendizado difícil que a ajuda mesmo a aprender sobre a tarefa. Sem isso, tinha uma perda inicial alta e depois caía, mas foi um aprendizado simples e se perdeu oportunidade de ter aprendizado melhor.

No final, para esse exemplo pequeno, chegou-se em uma perda inicial menor comparada com o caso sem cuidar desse aspecto.

A solução em si, como já podem perceber, para se obter logits pequenos, seria a diminuição dos valores dos pesos com que se obterão os logits. Considerando duas camadas, W1 e W2, seria multiplicar o W2 por 0.1, por exemplo, para diminuição dos valores. O bias b2, zera-se. Assim, os pesos ficam com valores pequenos e se chega no resultado.

Really great learning.