Como funciona por dentro · Leitura de 8 min

Como uma rede neural aprende: o erro que se propaga para trás

Aprender, para uma máquina, é errar e corrigir o rumo. O método tem um nome feio e uma ideia muito elegante por trás.

Uma rede neural recém-nascida é um desastre. Traz seus pesos definidos ao acaso, então, se você lhe mostra a foto de um gato, ela responde com a mesma segurança "torradeira" que "gato" ou "eclipse". Não sabe nada. E, no entanto, algumas horas depois, essa mesma rede acerta nove de cada dez vezes. No meio não ocorreu nenhum milagre: ocorreu um método para medir o quanto ela errou e repartir a culpa desse erro entre todos os seus números. Esse método se chama backpropagation, retropropagação, e é a razão pela qual hoje como uma rede neural aprende já não é um mistério, mas uma conta.

O que é backpropagation e como uma rede neural aprende, dito de uma vez e sem enfeites: a rede faz uma previsão, compara sua resposta com a correta, mede a distância entre ambas e depois percorre essa distância para trás por toda a rede para saber qual peso empurrar, em que direção e quanto. Aprender é corrigir o rumo, um passinho de cada vez.

01 · o erroPrimeiro é preciso medir o quanto você errou

Antes de corrigir qualquer coisa, é preciso pôr número no fracasso. Quando a rede dá uma resposta, essa resposta é comparada com a verdade conhecida do exemplo, e dessa comparação sai um único valor: a perda (em inglês, loss). É uma nota ao contrário: quanto mais a previsão se afasta do correto, mais alta é a perda. Perda zero seria o acerto perfeito.

Imagine como uma distância. A resposta correta é um ponto no mapa; a resposta da rede, outro ponto. A perda é quantos metros há entre os dois. Todo o aprendizado consiste em aproximar esses pontos, e para aproximá-los primeiro é preciso saber em que direção puxar. Essa direção não se adivinha: se calcula.

Aprender não é acertar de primeira. É medir o erro com precisão e saber exatamente para onde se mover para reduzi-lo.

Figura 1 · a perda é a distância entre o que disse e o que era
previsão resposta correta perda reduzir a perda = aproximar o ponto vermelho do verde
A perda transforma "você acertou mais ou menos" em um número exato. Sem esse número não haveria nada a reduzir. Elaboração própria; esquema conceitual.

02 · a inclinaçãoA derivada diz para onde descer

Aqui entra a ideia elegante que se esconde por trás do nome feio. Pense a perda como uma paisagem de montanhas e vales. Cada peso da rede é uma coordenada; mova-o um pouco e a perda sobe ou desce. A rede está parada em algum ponto desse terreno e quer chegar ao fundo do vale, onde a perda é mínima. Como desce sem ver o mapa completo? Apalpando a inclinação sob seus pés.

Essa inclinação tem nome: gradiente. É a derivada da perda em relação a cada peso e responde a uma pergunta muito concreta: se eu mover este peso um tantinho, a perda sobe ou desce, e com que força? Com essa resposta a rede dá um passo na direção contrária à inclinação (ladeira abaixo) e repete. A esse descenso paciente se chama descida do gradiente [1]. O tamanho de cada passo é a taxa de aprendizado: passos grandes descem rápido, mas passam do ponto; passos minúsculos são seguros, mas lentos.

Por que não se testa peso por peso

Uma rede moderna tem milhões ou bilhões de pesos. Ajustá-los um a um, testando "e se eu subir este?", seria eterno. A graça do gradiente é que ele dá a direção de descida de todos os pesos de uma vez, numa única passagem. Não se adivinha qual mover: se calcula a melhor jogada para o conjunto inteiro.

03 · para trásBackpropagation: repartir a culpa camada por camada

Falta a peça central, a que lhe dá o nome. O erro é medido no fim, na camada de saída. Mas a culpa não é só da última camada: vem arrastada desde o começo, porque cada camada alimentou a seguinte. Para corrigir bem é preciso saber o quanto cada peso contribuiu para o erro, mesmo os do fundo. E essa contabilidade se faz ao contrário: começa-se pelo erro final e propaga-se para trás, camada por camada, até a entrada.

O truque matemático que o torna possível é a regra da cadeia do cálculo: para saber o quanto um peso distante influi no erro final, multiplicam-se as influências de cada elo intermediário. A retropropagação é, no fundo, aplicar essa regra de forma ordenada e reaproveitando contas, de modo que com uma única passagem para a frente e outra para trás ficam calculados todos os gradientes [2]. Sem essa ordem, o cálculo seria impraticável; com ela, é quase barato.

A ideia não caiu do céu. Em 1986, David Rumelhart, Geoffrey Hinton e Ronald Williams publicaram na Nature o artigo que ensinou o mundo a usar a retropropagação para ajustar os pesos de redes com várias camadas [2]. Não inventaram a regra da cadeia, que tem séculos, nem foram os primeiros a tocar na ideia, mas mostraram que com ela uma rede profunda podia aprender representações úteis por conta própria. Aquele trabalho destravou décadas de estagnação e é, em linha reta, o ancestral de quase tudo o que hoje chamamos de inteligência artificial.

Figura 2 · duas passagens: para a frente para prever, para trás para corrigir
entrada oculta saída → para a frente: prever ← para trás: repartir o erro
A passagem para a frente transforma a entrada em uma previsão e mede a perda. A passagem para trás leva esse erro de volta por cada conexão, atribuindo a cada peso sua parcela de responsabilidade. Elaboração própria a partir de Rumelhart, Hinton & Williams (1986) [2].

04 · o cicloRepetir o rumo até que a rede acerte

Junte as três peças e você tem o batimento completo do aprendizado. A rede olha um lote de exemplos e prevê (para a frente). Mede sua perda. Propaga o erro para trás e obtém, para cada peso, seu gradiente. Ajusta cada peso um passinho na direção que baixa a perda. E recomeça com o lote seguinte. Cada volta completa sobre os dados se chama época, e são necessárias muitas.

Visto de longe, é um mesmo gesto repetido até o cansaço: prever, medir, corrigir o rumo. Não há um instante de compreensão súbita; há um gotejar de milhões de correções minúsculas que, somadas, deixam os pesos justo onde a rede acerta. O que a rede "sabe" no fim não é uma ideia: é a posição exata de seus pesos, esculpida pelo erro que a foi empurrando ladeira abaixo.

A rede não entende de uma vez. Desce a montanha às cegas, um passo corrigido de cada vez, até que o vale seja o acerto.

E esse é o segredo inteiro, sem o nome feio atrapalhando. Backpropagation não é mais do que a contabilidade honesta do erro: cada peso recebe a parcela de culpa que lhe cabe e se move o suficiente para fazer melhor da próxima vez. Repita o bastante e uma tabela de números ao acaso termina reconhecendo um rosto, traduzindo um idioma ou escrevendo esta frase. O assombroso não é que a máquina aprenda: é que aprender, olhado de perto, acabe sendo apenas saber medir um erro e caminhar para trás para reparti-lo.

Fontes

  1. Goodfellow, I., Bengio, Y. & Courville, A. (2016). Deep Learning. MIT Press, caps. 4 y 6 (optimización y descenso por gradiente; retropropagación). Disponible en deeplearningbook.org.
  2. Rumelhart, D. E., Hinton, G. E. & Williams, R. J. (1986). Learning representations by back-propagating errors. Nature, 323, pp. 533-536. DOI: 10.1038/323533a0.
  3. LeCun, Y., Bengio, Y. & Hinton, G. (2015). Deep learning. Nature, 521, pp. 436-444. DOI: 10.1038/nature14539.

Aprenda mais sobre IA

Ver tudo Aprenda IA