Objetivo: construir mentalmente um MLP e contar seus parâmetros.
Um MLP é uma rede de propagação direta formada por camadas totalmente conectadas.
a⁽⁰⁾ = x
z⁽ˡ⁾ = W⁽ˡ⁾a⁽ˡ⁻¹⁾ + b⁽ˡ⁾
a⁽ˡ⁾ = φ(z⁽ˡ⁾)Uma camada Linear(p, q) contém p × q pesos e q vieses, ou seja (p + 1)q
parâmetros. Um modelo 784 → 128 → 10 contém, portanto, 784×128+128 + 128×10+10 = 101 770 parâmetros.
from torch import nn
model = nn.Sequential(
nn.Flatten(),
nn.Linear(28 * 28, 128),
nn.ReLU(),
nn.Linear(128, 10),
)« Oculta » significa que sua saída não é nem a entrada bruta nem a predição entregue. Ela constrói uma representação intermediária. Não se deve supor que cada neurônio tenha um sentido humano simples; uma representação é frequentemente distribuída por várias unidades.
A saída depende da tarefa:
| Tarefa | Saída bruta |
|---|---|
| Regressão escalar | 1 valor |
| Classificação binária | 1 logit |
| Classificação em K classes | K logits |
| Multilabel com K rótulos | K logits independentes |
Um logit é uma pontuação não normalizada. Em classificação multiclasse, o PyTorch espera em
geral os logits diretamente; CrossEntropyLoss aplica a transformação numericamente
estável apropriada.
softmax no modelo antes de CrossEntropyLoss.Quantos parâmetros contém Linear(20, 5)? Qual dimensão de saída para 7
classes exclusivas?
20×5 + 5 = 105. São necessários 7 logits.
Calcule formas e parâmetros de um MLP 20 → 8 → 5 → 3, vieses incluídos. Em seguida, proponha
uma variante duas vezes menor e especifique o que você mantém constante para comparar as
duas. Sucesso: cada matriz está orientada corretamente e o protocolo não toca no teste.
Leitura: uma camada linear muda a última dimensão, nunca o tamanho do lote. Para
uma classificação em K classes, a última camada produz exatamente K logits. A
principal armadilha é aplicar uma ativação de saída incompatível com a função de
perda, por exemplo softmax antes de CrossEntropyLoss.