Funções de ativação
Sem não linearidade, uma rede profunda se reduz a uma única camada: demonstração, saturação da sigmoide, ReLU, GELU e a armadilha do softmax.
Funções de ativação
Retire as funções de ativação de uma rede de cinquenta camadas. Você não obtém uma rede de cinquenta camadas menos performática: você obtém, exatamente e de forma demonstrável, uma regressão linear. Cinquenta milhões de parâmetros que calculam o que uma única matriz calcularia. Este é o resultado mais importante desta lição, e cabe em duas linhas de álgebra.
Essas funções, que se escrevem num gesto — um nn.ReLU() colocado entre dois nn.Linear — são portanto o que faz a profundidade existir. E a escolha não é cosmética. A história do aprendizado profundo entre 1990 e 2010 é em grande parte a história de um fracasso atribuído erroneamente à profundidade, quando na verdade vinha da função de ativação utilizada: a sigmoide esmaga os gradientes, e uma rede de dez camadas sigmoides não consegue, estruturalmente, ser treinada. A passagem para a ReLU, por volta de 2011, fez mais pela viabilidade das redes profundas do que qualquer truque de otimização.
Há também, nesta lição, o erro mais frequente de todo o PyTorch: adicionar um Softmax na saída de um modelo treinado com CrossEntropyLoss. O código roda, a perda diminui, os resultados são medíocres e ninguém entende por quê. Vamos quantificar precisamente quanto esse erro custa.