Straturi Fundamentale: Linear, Embedding, LayerNorm & Dropout în PyTorch & Deep Learning Practic

Cărămizile oricărui model AI: transformarea afină (nn.Linear), dicționare de tokeni (nn.Embedding), normalizarea pe straturi (nn.LayerNorm) și regularizarea (nn.Dropout).

Sintaxă & invocare Python
import torch.nn as nn

strat_dens = nn.Linear(in_features=768, out_features=256, bias=True)
token_emb = nn.Embedding(num_embeddings=50000, embedding_dim=768)
norm = nn.LayerNorm(normalized_shape=768)
dropout = nn.Dropout(p=0.1)

Descriere & Utilizare

Modelele moderne din Deep Learning sunt construite prin compunerea câtorva straturi fundamentale din pachetul torch.nn:

1) nn.Linear(in, out): realizează transformarea afină y = xA^T + b. Este nucleul oricărui strat dens și al proiecțiilor de atenție (Q, K, V). 2) nn.Embedding(vocab_size, dim): o tabelă eficientă de căutare (look-up table) care transformă un ID întreg de token într-un vector dens de dimensiune dim. 3) nn.LayerNorm(dim): normalizează activările pe ultima dimensiune pentru a avea media 0 și dispersia 1, asigurând stabilitatea numerică în modelele Transformer. 4) nn.Dropout(p): dezactivează aleator un procent p din neuroni în timpul antrenării pentru a preveni supra-învățarea (overfitting).

Funcțiile de activare neliniare cele mai utilizate alături de aceste straturi sunt nn.GELU() (standardul în LLM-uri) și nn.ReLU().

Cum să o reții ușor

💡 nn.Embedding este dicționarul explicativ care traduce cuvântul într-o descriere, nn.Linear este sala de dezbateri unde ideile se combină, LayerNorm este moderatorul care ține tonul discuției echilibrat, iar Dropout este testul prin care te asiguri că echipa funcționează chiar dacă un coleg lipsește o zi.

Opțiuni și parametri tehnici

  • in_features & out_features (nn.Linear): numărul de trăsături de intrare și ieșire.
  • padding_idx (nn.Embedding): specifică indexul tokenului de padding (ex: 0); gradientul pentru acest index va rămâne permanent 0.
  • eps (nn.LayerNorm): constantă mică adăugată la numitor (ex: 1e-5) pentru a preveni împărțirea la zero.
  • p (nn.Dropout): probabilitatea de anulare a unui element (uzual între 0.1 și 0.3).

Exemple practice și cazuri de utilizare

  • Inițializarea greutăților: nn.init.xavier_uniform_(strat_dens.weight).
  • Trecerea unui batch de tokeni prin Embedding: id_uri = torch.tensor([[101, 2054, 102]]); vectori = token_emb(id_uri) (rezultă shape [1, 3, 768]).
  • RMSNorm (varianta modernă fără medie folosită de Llama): o poți găsi ca nn.RMSNorm(768) în PyTorch 2.4+.

Sfaturi de configurare & capcane

Nu plasa niciodată funcții de activare de tip Softmax la finalul rețelei dacă folosești funcția de pierdere nn.CrossEntropyLoss — aceasta include deja Softmax-ul combinat cu logaritmul pentru stabilitate numerică!

Comenzi și ghiduri înrudite