Material de estudo para acompanhar os slides, com a revisão das aulas 1 e 2. Dada no encontro on-line de 13/11/2026, junto com a aula 5, por tela compartilhada.
O objetivo da aula é saber dizer o que é uma camada e escrevê-la como matriz, montar à mão a rede que calcula o XOR e explicar por que a ativação da camada oculta não pode ser linear.
Os tópicos
Sem horário marcado: o que não couber hoje entra na aula seguinte.
- Revisão das aulas 1 e 2
- Uma camada, uma matriz
- A ativação
- O código
- Fechamento
Notação
Os símbolos novos dos slides, na ordem em que aparecem. Cada um também é definido na nota do slide em que aparece primeiro; os das aulas 1 e 2 estão nos roteiros delas.
| Símbolo | Lê-se | Quer dizer | Slide |
|---|---|---|---|
| W maiúsculo | a matriz dos pesos de uma camada, com uma linha por neurônio | 5 | |
| w k j | o peso que o neurônio k dá à entrada j: linha k, coluna j de W | 5 | |
| W vezes o vetor x | matriz vezes vetor: o produto escalar de cada linha de W com | 5 | |
| o vetor b, o vetor h | os vieses e as saídas da camada oculta, um número por neurônio | 5 | |
| o vetor v, c | os pesos e o viés do neurônio de saída | 5 | |
| a matriz, o vetor em coluna | matriz e vetor escritos por extenso, entre parênteses | 5 | |
| h um, h dois | as saídas dos dois neurônios ocultos | 7 | |
| W transposta | W com as linhas trocadas pelas colunas | 8 | |
| X, Z, H | um lote: as entradas, as somas e as saídas da camada, uma por linha | 8 | |
| W dois vezes W um | produto de matrizes: W₁ e depois W₂, numa matriz só | 12 | |
| sigma de z | a sigmoide, 1/(1 + e⁻ᶻ): o degrau alisado, entre 0 e 1 | 15 | |
| e | o número de Euler, perto de 2,718 | 15 | |
| sigma linha de z | a inclinação da sigmoide, σ(z)(1 − σ(z)) | 15 | |
| k | o número que multiplica a soma, em σ(k z): k grande deixa a sigmoide perto do degrau | 16 |
No NumPy, estas peças resolvem quase tudo:
W @ x + b: uma camada inteira, com W um array de duas dimensões, uma linha por neurônio.(z >= 0).astype(int): o degrau, posição por posição; a comparação dá True ou False, eastype(int)troca por 1 e 0.W2 @ W1: o produto de duas matrizes, a camada única equivalente às duas.X @ W.T + b: a camada para um lote, uma entrada por linha de X;W.Té a transposta, e o NumPy soma b a cada linha.np.abs(a - b).max(): a maior diferença entre duas contas que deviam dar o mesmo.rng = np.random.default_rng(3)erng.normal(size=(3, 2)): uma matriz sorteada, com a semente 3.
1. Revisão das aulas 1 e 2
Slide 1: A capa
A aula 3 trata das camadas: vários neurônios que leem as mesmas entradas, escritos numa conta só com uma matriz. Com duas camadas, a rede calcula o XOR que o perceptron da aula 1 não aprendia, com pesos escolhidos à mão. Achar esses pesos sem escolher é a retropropagação, da aula 5.
A imagem são três desenhos de Santiago Ramón y Cajal publicados em 1899 no livro Comparative study of the sensory areas of the human cortex. À esquerda, o córtex visual de um adulto; no meio, o córtex motor de um adulto, os dois corados pelo método de Nissl; à direita, o córtex de um bebê de um mês e meio, corado pelo método de Golgi. O córtex cerebral tem camadas de células, da superfície para dentro. As camadas de uma rede neural são outra coisa, um grupo de neurônios artificiais que leem as mesmas entradas; a semelhança é de nome.
Slide 2: Revisão, de memória
A revisão é de memória, antes de qualquer slide de conteúdo: quatro perguntas, e a turma responde falando.
O que um neurônio calcula? A soma ponderada das entradas mais o viés, z = · + b, e o degrau decide: saída 1 se z ≥ 0, 0 se z < 0. No plano das duas entradas, os pontos com z = 0 formam uma reta, e o neurônio dispara de um lado dela.
Por que nenhum neurônio sozinho acerta o XOR? Os pontos de resposta 1, (0; 1) e (1; 0), ficam numa diagonal, e os de resposta 0, (0; 0) e (1; 1), na outra: nenhuma reta deixa uns de um lado e os outros do outro. A prova da aula 1 soma as condições de duas entradas e contradiz a de uma terceira.
O que a perda mede? O quanto a rede erra, num número só. A da aula 2 é o erro quadrático médio, a média dos quadrados das diferenças entre a saída y e a resposta certa t.
O que o gradiente descendente faz a cada passo? Calcula a derivada da perda em relação a cada parâmetro e anda contra ela, um passo do tamanho que a taxa de aprendizado η manda. Taxa pequena demais, a perda cai devagar; grande demais, o treino diverge.
Slide 3: Das aulas 1 e 2, três contas
As três contas das aulas 1 e 2 que o curso usa daqui em diante.
O neurônio: y = degrau( · + b). O vetor dos pesos e o viés b são os parâmetros, os números que o treino ajusta.
A perda: L = (1/N) Σ (yᵢ − tᵢ)², a média, nos N exemplos, do quadrado do erro de cada um.
O passo: w ← w − η ∂L/∂w, para cada parâmetro, todos andando juntos, com as derivadas calculadas antes de qualquer um mudar. Na aula 2, a reta tinha dois parâmetros, w e b, e as duas derivadas saíram à mão. A rede do XOR desta aula tem nove, e calcular a derivada da perda em relação a cada um deles é a pergunta da aula 5.
Slide 4: O fio do curso
O curso segue um fio, e este slide aparece em todas as aulas, com a aula do dia em destaque.
O começo é o XOR. Na aula 1, um neurônio desenha uma reta, e nenhuma reta separa os quatro pontos: a regra do perceptron corrige os pesos para sempre. Na aula 2, o gradiente descendente acha os pesos de um neurônio sem o degrau, e a taxa de aprendizado tem um limiar, acima do qual o treino diverge. Nesta aula, a 3, duas camadas separam o XOR, com pesos escolhidos à mão. Na 4, a regra da cadeia ganha vetores, e na 5 a retropropagação calcula as derivadas da perda em relação a todos os pesos: o gradiente descendente da aula 2 acha os pesos do XOR sozinho.
Depois, a mesma rede cresce: o MNIST, na aula 6; o PyTorch, na 7, que faz a retropropagação sozinho; os dados do CERN, na 8. O limiar da taxa da aula 2 volta no projeto, na aula 9, com uma taxa por camada, e a fronteira entre convergir e divergir é a figura que a turma apresenta na aula 10.
2. Uma camada, uma matriz
Slide 5: Uma camada é uma conta só
Uma camada é um grupo de neurônios que leem as mesmas entradas, cada um com os seus pesos e o seu viés. Na figura, os dois neurônios ocultos, h₁ e h₂, leem x₁ e x₂.
Matriz, no curso, é uma tabela de números com m linhas e n colunas. A matriz W guarda os pesos da camada: a linha k é o vetor dos pesos do neurônio k. O peso wₖⱼ, com dois índices, fica na linha k e na coluna j, e é o peso que o neurônio k dá à entrada j: w₁₂ é o peso que o neurônio 1 dá à entrada 2. Na figura, cada peso está junto da linha que ele multiplica. No dia a dia, matriz é também a sede de uma empresa, ou o molde de onde saem cópias; no curso, é só a tabela.
O produto da matriz pelo vetor, W , faz o produto escalar da aula 1 de cada linha de W com e devolve um vetor com um número por linha: z₁ = w₁₁x₁ + w₁₂x₂ e z₂ = w₂₁x₁ + w₂₂x₂. Somando o vetor dos vieses, = (b₁, b₂), sai W + , as somas dos dois neurônios numa conta só. A regra das dimensões: W com m linhas e n colunas, vezes com n números, dá um vetor com m números; aqui, 2 por 2 vezes 2 dá 2.
O degrau vale para cada posição do vetor, separadamente: = degrau(W + ) quer dizer h₁ = degrau(z₁) e h₂ = degrau(z₂). A função aplicada à soma de cada neurônio se chama função de ativação; o degrau é uma, e a sigmoide, no fim da aula, é outra.
A camada de saída tem um neurônio só, como o da aula 1, com as saídas da camada oculta como entradas: pesos = (v₁; v₂) e viés c, e y = degrau( · + c). Ao todo, a rede tem nove parâmetros: os quatro de W, os dois de , os dois de e c.
O viés entra no desenho por uma seta curta, de fora da rede. É o viés da aula 1, o peso de uma entrada que vale sempre 1; a bolinha do 1 ficou de fora, para o desenho não encher.
Na programação, matriz costuma ser um array de duas dimensões, e no NumPy W @ x faz o produto da matriz pelo vetor.
Slide 6: A matriz vezes o vetor, em vídeo
O vídeo faz o produto da matriz pelo vetor com números, para a regra ficar na mão. W = (1 −2; 3 0,5), em duas linhas, = (2; 1) e = (0,5; −1).
A linha 1 de W, (1; −2), faz o produto escalar da aula 1 com : 1 · 2 + (−2) · 1 = 0; mais o viés 0,5, dá 0,5. A linha 2, (3; 0,5): 3 · 2 + 0,5 · 1 = 6,5; mais o viés −1, dá 5,5. O vetor = (0,5; 5,5) tem um número por linha de W, isto é, um por neurônio da camada. Cada número que entra na conta é copiado do lugar dele, para se ver de onde vem: a linha de W, o vetor inteiro e um número de .
Depois, o degrau vale para cada posição, separadamente: 0,5 ≥ 0 e 5,5 ≥ 0, e = (1; 1).
No fim, as dimensões, embaixo de cada peça: W é 2 por 2, duas linhas e duas colunas; tem 2 números; a saída tem 2. A regra: o número de colunas de W é o número de entradas, e o de linhas, o número de neurônios. A camada oculta da aula 6, com 784 entradas e 256 neurônios, tem W de 256 linhas e 784 colunas.
Slide 7: O XOR com pesos escolhidos à mão
Os pesos escolhidos à mão reaproveitam os neurônios da aula 1. O neurônio h₁ tem pesos (1; 1) e viés −0,5: dispara quando x₁ + x₂ ≥ 0,5, isto é, com pelo menos uma entrada em 1; calcula o OU. O neurônio h₂ tem os mesmos pesos e viés −1,5: dispara quando x₁ + x₂ ≥ 1,5, só com as duas entradas em 1; é o neurônio da tabela do E da aula 1. Em matriz, W tem as duas linhas iguais a (1; 1), e = (−0,5; −1,5).
O neurônio de saída tem pesos = (1; −1) e viés c = −0,5: y = degrau(h₁ − h₂ − 0,5). Ele dispara só com h₁ = 1 e h₂ = 0: o OU disse sim e o E disse não, isto é, exatamente uma entrada em 1. É o XOR.
A tabela confere as quatro entradas. Em (0; 0), nenhum neurônio oculto dispara, e y = 0. Em (0; 1) e (1; 0), só o OU dispara, e y = 1. Em (1; 1), os dois disparam, h₁ − h₂ − 0,5 = −0,5, e y = 0. O programa codigo/xor_a_mao.py faz a mesma conta, com a matriz, e confere.
Outros pesos também calculam o XOR; estes foram escolhidos porque reaproveitam o E e o OU da aula 1. A rede treinada na aula 5 acha uma solução diferente.
Slide 8: As quatro entradas numa conta só
Na rede, cada entrada passa pela mesma camada. Em vez de fazer W + quatro vezes, as quatro entradas do XOR vão juntas, uma por linha de uma matriz X, de 4 linhas e 2 colunas.
Wᵀ, a transposta de W, é W com as linhas trocadas pelas colunas: a coluna k de Wᵀ guarda os pesos do neurônio k. O produto X Wᵀ faz o produto escalar de cada linha de X, uma entrada, com cada coluna de Wᵀ, um neurônio. A linha i de Z = X Wᵀ + guarda as somas dos dois neurônios para a entrada i, e se soma a cada linha. Na rede do XOR, as duas linhas de W são iguais, (1; 1), e Wᵀ é a própria W; em geral, não.
As contas: (0; 0) dá as somas (−0,5; −1,5); (0; 1) e (1; 0) dão (0,5; −0,5); (1; 1) dá (1,5; 0,5). O degrau, posição por posição, dá as linhas (0; 0), (1; 0), (1; 0) e (1; 1): as colunas h₁ e h₂ da tabela do slide anterior.
Lote, no curso, é o grupo de entradas que passa junto pela rede; aqui, as quatro. No NumPy, a camada inteira para o lote é X @ W.T + b, e o NumPy soma b a cada linha sozinho, o que ele chama de broadcasting. É a forma que o código da aula 6 usa, com X de 64 linhas, uma por imagem, e 784 colunas.
Slide 9: A camada oculta muda o plano
O vídeo mostra o que a camada oculta faz com os quatro pontos. À esquerda, o plano das entradas, (x₁; x₂). O neurônio h₁, o OU, tem a reta x₁ + x₂ = 0,5, cheia; o neurônio h₂, o E, a reta x₁ + x₂ = 1,5, tracejada.
Cada ponto passa pela camada oculta e vira o par (h₁; h₂), um ponto de outro plano, o da direita. (0; 0) vai para (0; 0); (0; 1) e (1; 0) vão os dois para (1; 0), porque nos dois só o OU dispara; (1; 1) vai para (1; 1). Os dois círculos chegam ao mesmo lugar.
No plano novo, uma reta separa os círculos dos quadrados: a do neurônio de saída, h₁ − h₂ = 0,5, que deixa (1; 0) de um lado e (0; 0) e (1; 1) do outro. O problema que não tinha reta no plano das entradas ganhou uma reta no plano da camada oculta. É o que a camada oculta faz aqui: troca a descrição de cada ponto por outra, em que o problema fica fácil.
No fim, a região em que a rede inteira dispara volta ao plano das entradas: a faixa entre as duas retas. Uma reta só não separa o XOR; duas retas, combinadas pelo neurônio de saída, separam.
Slide 10: Camada, camada oculta e MLP
Uma camada é um grupo de neurônios que leem as mesmas entradas; a saída de uma camada é a entrada da seguinte. A camada de saída dá a resposta da rede. As camadas do meio, entre a entrada e a saída, são as camadas ocultas: não recebem os dados nem dão a resposta, e de fora só se veem a entrada e a saída. A entrada não tem neurônio nenhum: é só a lista dos números que entram.
O perceptron multicamadas, o MLP, do inglês multilayer perceptron, é uma rede de camadas empilhadas assim, com cada neurônio ligado a todos os da camada seguinte. O nome guarda o perceptron de Rosenblatt, mas os neurônios de um MLP usam outras funções de ativação, como a sigmoide de dois slides adiante, e não o degrau. A rede do XOR é um MLP 2-2-1: duas entradas, dois neurônios ocultos e uma saída.
O artigo de 1986 de Rumelhart, Hinton e Williams, que volta na aula 5, chama de ocultas, hidden em inglês, as unidades internas que não são parte da entrada nem da saída.
Slide 11: Quantos números a rede guarda
Quantos números uma rede guarda? Cada camada tem uma matriz W, com um peso por par de entrada e neurônio, e um viés por neurônio. Uma camada de n entradas e m neurônios guarda n · m + m números. A rede inteira soma as camadas.
A rede do XOR, 2-2-1: a camada oculta, 2 · 2 + 2 = 6; a saída, 2 · 1 + 1 = 3; ao todo, 9, os nove da aula. A rede pequena da aula 7, que volta na aula 9, 784-16-10: 784 · 16 + 16 = 12.560 e 16 · 10 + 10 = 170, ao todo 12.730. A rede do MNIST da aula 6, 784-256-10: 200.960 e 2.570, ao todo 203.530. A rede da massa invariante, da aula 8, 8-256-256-1: 2.304, 65.792 e 257, ao todo 68.353.
Quase todos os números ficam nas matrizes, e a primeira camada da rede do MNIST guarda quase todos, porque cada um dos 784 pixels liga a cada um dos 256 neurônios. Escolher 203.530 números à mão é impossível: é a razão da retropropagação, da aula 5.
3. A ativação
Slide 12: O plano inteiro, em vídeo
O vídeo mostra o que uma matriz faz com o plano inteiro, e não só com um ponto: cada ponto da grade vai para W .
À esquerda, W₁ = (1 0,5; 0 1) inclina a grade: o ponto (x₁; x₂) vai para (x₁ + 0,5 x₂; x₂). As retas continuam retas, as paralelas continuam paralelas, e a origem fica no lugar: é isso que linear quer dizer. O viés , que o vídeo deixa de fora, só deslocaria a grade inteira. Depois, W₂ = (1 0; −0,5 1) inclina na outra direção, e a grade continua feita de retas.
À direita, a matriz do produto, W₂W₁ = (1 0,5; −0,5 0,75), faz numa vez o que as duas fizeram em duas, e as grades ficam iguais: duas camadas lineares valem uma.
Por fim, a direita recomeça: W₁, e depois a sigmoide em cada coordenada. O plano inteiro cabe no quadrado de 0 a 1, e as retas entortam. É essa curva que deixa uma rede de várias camadas desenhar fronteiras que não são retas.
É a ideia do capítulo 3 da série sobre álgebra linear do 3Blue1Brown, do estudo da aula 2: uma matriz é uma transformação do plano, e as colunas dela dizem para onde vão os vetores (1; 0) e (0; 1).
Slide 13: Sem ativação, duas camadas valem uma
Por que a camada oculta precisa do degrau, ou de outra função que não seja linear? Sem ela, duas camadas seguidas valem uma.
A conta: a primeira camada dá W₁ + ₁; a segunda aplica W₂ a isso e soma ₂. Distribuindo, W₂ (W₁ + ₁) + ₂ = (W₂ W₁) + (W₂ ₁ + ₂), que tem a forma W + de uma camada só, com W = W₂ W₁ e = W₂ ₁ + ₂. Uma camada só desenha de novo uma reta por neurônio de saída, e o XOR volta a não ter solução.
W₂ W₁ é o produto de duas matrizes, definido para que (W₂ W₁) dê o mesmo que W₂ (W₁ ) para todo : a matriz do produto faz numa conta só o que W₁ e depois W₂ fazem em duas. É a composição do capítulo 4 da série sobre álgebra linear do 3Blue1Brown, do estudo da aula 2. A regra das dimensões continua: W₂ com 1 linha e 3 colunas vezes W₁ com 3 linhas e 2 colunas dá uma matriz de 1 por 2. A ordem importa: em geral, W₂ W₁ é diferente de W₁ W₂, que pode nem existir, se as dimensões não casarem.
O xor_a_mao.py confere com matrizes sorteadas, semente 3: uma camada de 2 entradas para 3 neurônios e outra de 3 para 1. Em cem entradas sorteadas, duas camadas e uma dão o mesmo número, com diferença de 7 · 10⁻¹⁵, o tamanho do arredondamento do computador.
Linear, no curso, é uma conta da forma W + , que leva retas a retas. Na matemática, com o a conta se diz afim, e linear fica para W sem o ; a área de redes neurais chama as duas de linear. No dia a dia, linear quer dizer em linha reta.
Slide 14: Duas camadas lineares, com números
A conta do slide anterior com números pequenos, para conferir à mão. A primeira camada tem W₁ = (1 2; 0 1) e ₁ = (1; −1); a segunda, um neurônio só, tem W₂ = (1 −1), uma linha, e b₂ = 3.
A camada única: W₂W₁ é a linha (1 −1) vezes cada coluna de W₁. Com a coluna (1; 0), 1 · 1 + (−1) · 0 = 1; com a coluna (2; 1), 1 · 2 + (−1) · 1 = 1. Então W₂W₁ = (1 1). O viés: W₂₁ + b₂ = 1 · 1 + (−1) · (−1) + 3 = 5.
Conferindo com = (2; 1). Pelas duas camadas: W₁ + ₁ = (2 + 2 + 1; 0 + 1 − 1) = (5; 0), e W₂ (5; 0) + 3 = 5 − 0 + 3 = 8. Pela camada única: (1 1) · (2; 1) + 5 = 3 + 5 = 8. O mesmo número, para qualquer , porque as duas contas são a mesma função.
O produto de matrizes é o produto escalar de cada linha da primeira com cada coluna da segunda; por isso o número de colunas da primeira tem de ser o número de linhas da segunda.
Slide 15: Do degrau à sigmoide
A função de ativação é a função aplicada à soma z de cada neurônio. O degrau da aula 1 é uma, e foi a dos pesos à mão. Para o gradiente descendente, o degrau não serve: é plano em todo ponto fora do zero, a derivada é zero, e o passo, −η · 0, não sai do lugar.
A sigmoide, σ(z) = 1/(1 + e⁻ᶻ), faz a mesma passagem de 0 a 1, mas lisa. O e é o número de Euler, perto de 2,718. Para z muito negativo, e⁻ᶻ é enorme, e σ fica perto de 0; para z muito positivo, e⁻ᶻ é quase 0, e σ fica perto de 1; em z = 0, σ = 1/2. A saída fica sempre entre 0 e 1, e y ≥ 0,5 se lê como resposta 1. A letra σ é o sigma minúsculo; o Σ da soma é o maiúsculo da mesma letra.
A inclinação da sigmoide sai dela mesma: σ′(z) = σ(z)(1 − σ(z)). O maior valor é 0,25, em z = 0; longe do zero, a inclinação some, e o neurônio quase não aprende. A conta dessa derivada fica como caixa-preta: entra z, sai a inclinação, e ela não se abre agora porque pede a derivada da exponencial. O código da aula 5 a confere com a derivada numérica, junto com as outras derivadas.
A sigmoide é a função logística, que Pierre François Verhulst criou entre 1838 e 1847 como modelo do crescimento de uma população. O projeto da aula 9 usa outra ativação, a tangente hiperbólica, tanh, que vai de −1 a 1 com o mesmo formato de S.
Slide 16: Do degrau à sigmoide, em vídeo
O vídeo compara as duas ativações. O degrau vale 0 antes do zero e 1 depois, com um salto no zero. A sigmoide faz a mesma passagem sem salto, e σ(0) = 0,5.
Com a soma multiplicada por um número k, a sigmoide de k z fica mais íngreme; com k = 12, quase não se distingue do degrau. É o que acontece quando os pesos de um neurônio crescem: a sigmoide se aproxima do degrau, e o slide seguinte mostra isso na rede do XOR.
Depois, com k = 1, a reta tangente percorre a curva, e a inclinação, σ(z)(1 − σ(z)), aparece ao lado: 0,018 em z = −4, 0,25 em z = 0, o máximo, e 0,045 em z = 3. O degrau tem inclinação zero em todo ponto fora do zero, e no zero não tem inclinação nenhuma. O gradiente descendente anda contra a derivada; com derivada zero, o passo é zero, e o degrau não treina. A sigmoide treina, e treina mais devagar longe do zero, onde a inclinação some.
Slide 17: Os pesos do XOR com a sigmoide
A rede do XOR com os pesos à mão e a sigmoide no lugar do degrau, com todos os pesos e vieses multiplicados por k. A cor é a saída y da rede em cada ponto do plano, do fundo, 0, ao azul, 1, e a linha escura é y = 0,5, a fronteira entre responder 0 e 1.
Com k = 1, os pesos à mão, a saída fica entre 0,42 e 0,44 nos quatro pontos, abaixo de 0,5 em todos: a rede erra (0; 1) e (1; 0), e o plano inteiro tem quase a mesma cor. Com k = 5, a saída é 0,107 em (0; 0) e (1; 1) e 0,851 em (0; 1) e (1; 0): acerta, com margem, e a faixa do XOR aparece entre as duas retas. Com k = 25, a saída é 0,000 e 1,000 até a terceira casa: o degrau de volta.
Duas lições. Com a sigmoide, a saída é um número entre 0 e 1, e y ≥ 0,5 se lê como resposta 1. E o tamanho dos pesos importa: os mesmos pesos, pequenos, dão uma rede indecisa. Na aula 5, os pesos e o tamanho deles saem do treino.
Os números saem de codigo/figuras_slides.py, que imprime a tabela.
Slide 18: Como achar os nove números?
A pergunta que fecha a aula 3 e abre a aula 5. Os pesos do XOR foram escolhidos à mão porque a rede é pequena e o problema é conhecido. Com nove parâmetros, testar valores ao acaso já é loteria, e uma rede de hoje tem milhões de pesos. O gradiente descendente da aula 2 resolve, desde que se saiba a derivada da perda em relação a cada parâmetro. Com a reta, eram duas derivadas, feitas à mão. Com camadas, cada peso da primeira camada mexe na perda através da camada seguinte, e a derivada passa pela regra da cadeia, da aula 4. A aula 5 junta as duas coisas: a retropropagação.
4. O código
Slide 19: O código
O código da aula fica pronto e testado antes: codigo/xor_a_mao.py, que roda na tela.
Ele monta a rede do XOR com os pesos à mão como lista de camadas, cada uma o par (W, ), e faz a passada para a frente com o degrau: imprime a tabela das quatro entradas, com as somas e as saídas da camada oculta e a soma z e a saída y do neurônio de saída, e confere que y é o XOR. A função da passada para a frente serve para qualquer número de camadas: recebe a lista das camadas e leva a saída de uma para a entrada da seguinte. Depois, o programa confere com matrizes sorteadas, semente 3, que duas camadas lineares seguidas valem uma, com diferença de 7 · 10⁻¹⁵.
Quatro peças do NumPy resolvem quase tudo. W @ x + b faz a camada inteira. (z >= 0).astype(int) é o degrau, posição por posição: a comparação dá True ou False, e o astype troca por 1 e 0. W2 @ W1 é o produto das matrizes. E np.abs(a - b).max() mede a maior diferença entre duas contas que deviam dar o mesmo.
A entrega pede a passada para a frente para qualquer número de camadas e a conferência de que duas camadas lineares valem uma; o xor_a_mao.py é a solução de referência e não vai para a turma antes do prazo.
5. Fechamento
Slide 20: Para estudar e entregar
O estudo prepara as aulas 4 e 5, que usam a regra da cadeia. O capítulo 4 da série sobre cálculo do 3Blue1Brown mostra a regra da cadeia e a regra do produto com desenhos. Os vídeos da Khan Academy sobre o Jacobiano mostram a matriz das derivadas parciais de uma função que recebe um vetor e devolve outro, o assunto da aula 4.
A entrega: a passada para a frente para qualquer número de camadas, a conferência em NumPy de que duas camadas lineares seguidas valem uma e uma pergunta sobre o estudo.
A seguir, a aula 4 escreve a regra da cadeia com vetores, uma camada de cada vez, e a aula 5 usa essa conta, de trás para a frente, para achar os nove pesos da rede do XOR sem escolher à mão.
Perguntas que podem aparecer
- Por que dois neurônios na camada oculta, e não um? Com um só, e sem ligação direta da entrada para a saída, a saída lê um número que depende de uma reta só, e a rede inteira continua desenhando uma reta.
- A entrada é uma camada? Não tem neurônio, só passa os números adiante; por isso a rede do XOR se diz de duas camadas, a oculta e a de saída, embora o desenho tenha três colunas.
- Outros pesos calculam o XOR? Sim, muitos: qualquer par de retas que deixe os dois círculos de um lado e os dois quadrados do outro, combinado pela saída. A rede treinada na aula 5 acha uma solução diferente desta.
- Por que não usar a sigmoide desde o começo? Com pesos à mão, o degrau deixa as contas exatas, com 0 e 1; com a sigmoide, as saídas seriam números perto de 0 e de 1, e a tabela ficaria com decimais. Para treinar, na aula 5, a sigmoide é necessária.
Para estudar
O estudo da turma, que é também o seu:
- 3Blue1Brown, série sobre cálculo, capítulo 4, "Visualizing the chain rule and product rule", 2017, youtube.com/watch?v=YG15m2VwSjA. Tem legenda em português.
- Khan Academy, cálculo multivariável, os vídeos "Jacobian prerequisite knowledge", "The Jacobian matrix" e "Computing a Jacobian matrix": khanacademy.org/math/multivariable-calculus/multivariable-derivatives/jacobian. Entre o primeiro e o segundo, a página tem um quarto, "Local linearity for a multivariable function", que ajuda a entender o segundo.
Além dele, para preparar a aula:
- 3Blue1Brown, série sobre álgebra linear, capítulos 3, "Linear transformations and matrices", youtube.com/watch?v=kYB8IZa5AuE, e 4, "Matrix multiplication as composition", youtube.com/watch?v=XkY2DOUCWMU, do estudo da aula 2: a matriz como transformação e o produto como composição.
Fontes dos fatos citados
Só para conferência; o estudo é a lista de cima.
- Wikimedia Commons, a página do arquivo "Cajal cortex drawings.png", com a descrição dos três desenhos, o livro de 1899 e a licença.
- David E. Rumelhart, Geoffrey E. Hinton e Ronald J. Williams, 1986, "Learning representations by back-propagating errors", Nature 323(6088):533-536, doi:10.1038/323533a0: o resumo, com as unidades "hidden".
- Verbete "Logistic function" da Wikipedia em inglês: Verhulst, entre 1838 e 1847, e a derivada f(x)(1 − f(x)).
- A página do vídeo do 3Blue1Brown, com título, data e as faixas de legenda, e a página da unidade sobre o Jacobiano da Khan Academy, com os títulos dos vídeos.
- Os números: codigo/xor_a_mao.py, com os pesos à mão e, na conferência das camadas lineares, a semente 3; o 2-2-1 do projeto e a tanh, em projeto/varredura.py.
