Phase 00 - Lesson 17
Potencias e Expoentes
This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.
Se multiplicacao e adicao repetida, um expoente e multiplicacao repetida. O pequeno numero elevado e uma contagem de quantas vezes voce multiplica.
Tipo: Aprender Linguagens: Python Pre-requisitos: Operacoes Repetidas e a Virada da Contagem (00-16) Tempo: ~35 minutos
Objetivos de Aprendizagem
- Ler
2^10como "multiplique 2 por ele mesmo, dez vezes" e calcular potencias pequenas a mao - Conectar o expoente com a contagem de dobras da licao 00-16
- Usar potencias de dois para raciocinar sobre bits, bytes e tamanhos de modelo
- Explicar por que 16 bits = 2 bytes, por que um codigo de 2 bits tem 4 valores, e o que significa 2^10 = 1024
O Conceito
A licao 00-16 lhe deu a escada de movimentos. Aqui esta o simbolo para ela.
Um expoente e multiplicacao repetida
A multiplicacao era adicao repetida. Pegue exatamente a mesma ideia um andar acima: um expoente e multiplicacao repetida.
2^3 = 2 x 2 x 2 = 8
Leia 2^3 como "2 elevado a 3" ou "2 multiplicado por ele mesmo 3 vezes". O numero grande embaixo (2) e a base, a coisa que esta sendo multiplicada. O pequeno numero elevado (3) e o expoente, a contagem de quantas vezes. Essa e a escada de dobras da licao passada: dobrar 3 vezes a partir de 1 chega a 8, e 2^3 = 8. Mesma coisa, agora com um simbolo.
2^1 = 2
2^2 = 2 x 2 = 4
2^3 = 2 x 2 x 2 = 8
2^4 = 2 x 2 x 2 x 2 = 16
Cada degrau a mais no expoente dobra o resultado. O expoente E a contagem de dobras.
Duas ancoras que voce precisa saber
2^10 = 1024 "cerca de mil", o salto de uma classe de tamanho para a proxima
2^0 = 1 qualquer coisa elevada a 0 e 1 (voce multiplicou zero vezes, ainda esta no inicio)
2^0 = 1 parece estranho ate voce lembrar que a escada comeca em 1. Zero dobras significa que voce nunca saiu do 1.
Exemplo resolvido: bits, bytes e codigos
Um bit e um slot que e 0 ou 1, entao tem 2^1 = 2 valores possiveis. Adicione um segundo bit e voce pode fazer 00, 01, 10, 11: isso e 2^2 = 4 valores. Cada bit extra dobra o numero de padroes:
1 bit -> 2^1 = 2 valores
2 bits -> 2^2 = 4 valores (um "codigo de 2 bits" armazena uma de 4 coisas)
8 bits -> 2^8 = 256 valores (isto e um byte)
Entao um byte (8 bits) guarda 2^8 = 256 valores distintos. E um numero de 16 bits (FP16, um formato comum de peso) usa 16 bits, que e 16 / 8 = 2 bytes. E dai que veio o "2 bytes por peso" da licao 00-14.
Agora a ancora do projeto. Um modelo NeuroGrid tem aproximadamente 2^10 = 1024 blocos de mil pesos, e a versao completa em FP16 pesa cerca de 1.75 GB. Cortar cada peso de 16 bits em direcao aos log2(3) bits ternarios (as proximas licoes constroem esse numero) e o que encolhe 1.75 GB para algo que cabe em um unico dispositivo pequeno.
Pratica de memoria
Produza a resposta. Mais facil primeiro.
2^2= ?2^5= ?- Quantos valores distintos um codigo de 2 bits pode armazenar?
Respostas: 4; 32 (2x2x2x2x2); 4 (que e 2^2).
Alerta de equivoco
A armadilha e trocar a base e o expoente. 2^3 e 2 x 2 x 2 = 8, NAO 3 x 3 = 9 e NAO 2 x 3 = 6. A base e o numero que voce repete; o expoente apenas conta as repeticoes. Quando o aluno confunde isso, o resultado esta sempre errado por uma larga margem. Diga em voz alta: "base, multiplicada por ela mesma, expoente vezes."
Construa
python phases/00-setup-and-tooling/17-powers-and-exponents/code/powers.py
Por que isso importa para IA
Tudo sobre tamanho de modelo sao potencias de dois. Larguras de bit (16, 8, 4, 2 e o ternario 1.58), o numero de valores que um codigo pode armazenar, memoria em bytes, tamanhos de vocabulario, comprimentos de contexto: todos eles sao 2^algo. Quando um artigo diz "fomos de 16 bits para 2 bits", esta dizendo que o armazenamento por peso caiu por um fator de 2^16 / 2^2. Potencias sao a lingua nativa do hardware.