L'activation function è quella funzione non-lineare che si applica all'output di ogni neurone di una rete. Sembra dettaglio: invece è quello che rende le reti neurali capaci di imparare cose complicate.
Senza activation non-lineari, una rete a 100 strati equivale matematicamente a una rete a 1 strato. Hai sprecato tutto. Tutto il "deep" nel deep learning è inutile senza non-linearità.
Le activation che vedi davvero:
- ReLU: max(0, x). Il classico. Semplicissima, veloce, funziona.
- Sigmoid: comprime in (0,1). Antica, sopravvive solo come output binario.
- Tanh: comprime in (-1,1). Vecchia, surclassata da ReLU.
- GELU: variante "morbida" di ReLU. Standard nei Transformer (BERT, GPT).
- SiLU / Swish: x · sigmoid(x). Usata in Llama, Mistral, modelli recenti.
- SwiGLU: variante con gating, ancora migliore. Usata in Llama 2/3, PaLM.
- Softmax: per output multi-classe. Trasforma logits in probabilità. Sempre l'ultimo strato di un classificatore.
Perché tutte queste varianti? Cercando la migliore: che passi bene il gradiente all'indietro (no backprop morta), che sia veloce da calcolare, che spinga il modello a imparare meglio.
In pratica oggi: nei Transformer si usa GELU o SwiGLU, in CNN classiche ReLU, sigmoid solo all'ultimo strato per output binari.