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^10 como "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.

  1. 2^2 = ?
  2. 2^5 = ?
  3. 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.

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).