3. Ενσωματώσεις token
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Ενσωματώσεις token
Μετά την τοκενικοποίηση των δεδομένων κειμένου, το επόμενο κρίσιμο βήμα στην προετοιμασία των δεδομένων για την εκπαίδευση μεγάλων γλωσσικών μοντέλων (LLMs) όπως το GPT είναι η δημιουργία των token embeddings. Οι ενσωματώσεις token μετατρέπουν διακριτά tokens (όπως λέξεις ή υπολέξεις) σε συνεχείς αριθμητικούς διανύσματα που το μοντέλο μπορεί να επεξεργαστεί και να μάθει. Αυτή η εξήγηση αναλύει τις ενσωματώσεις token, την αρχικοποίησή τους, τη χρήση τους και τον ρόλο των positional embeddings στη βελτίωση της κατανόησης της σειράς των tokens από το μοντέλο.
Tip
Ο στόχος αυτής της τρίτης φάσης είναι πολύ απλός: Αντιστοιχίστε σε κάθε ένα από τα προηγούμενα tokens στο λεξιλόγιο ένα διάνυσμα με τις επιθυμητές διαστάσεις για να εκπαιδεύσετε το μοντέλο. Κάθε λέξη στο λεξιλόγιο θα είναι ένα σημείο σε έναν χώρο X διαστάσεων.
Σημειώστε ότι αρχικά η θέση κάθε λέξης στον χώρο αρχικοποιείται “τυχαία” και αυτές οι θέσεις είναι παραμετροποιήσιμες (θα βελτιωθούν κατά τη διάρκεια της εκπαίδευσης).Επιπλέον, κατά την ενσωμάτωση token δημιουργείται ένα επιπλέον επίπεδο ενσωματώσεων που αναπαριστά (σε αυτή την περίπτωση) την απόλυτη θέση της λέξης στην πρόταση εκπαίδευσης. Με αυτόν τον τρόπο μια λέξη σε διαφορετικές θέσεις στην πρόταση θα έχει διαφορετική αναπαράσταση (νόημα).
Τι είναι οι ενσωματώσεις token;
Οι ενσωματώσεις token είναι αριθμητικές αναπαραστάσεις των tokens σε έναν συνεχή διανυσματικό χώρο. Κάθε token στο λεξιλόγιο συσχετίζεται με ένα μοναδικό διάνυσμα σταθερών διαστάσεων. Αυτά τα διανύσματα καταγράφουν σημασιολογικές και συντακτικές πληροφορίες για τα tokens, επιτρέποντας στο μοντέλο να κατανοεί σχέσεις και μοτίβα στα δεδομένα.
- Μέγεθος λεξιλογίου: Ο συνολικός αριθμός μοναδικών tokens (π.χ., λέξεις, υπολέξεις) στο λεξιλόγιο του μοντέλου.
- Διαστάσεις ενσωμάτωσης: Ο αριθμός των αριθμητικών τιμών (διαστάσεων) σε κάθε διάνυσμα token. Μεγαλύτερες διαστάσεις μπορούν να συλλάβουν πιο λεπτές πληροφορίες αλλά απαιτούν περισσότερους υπολογιστικούς πόρους.
Παράδειγμα:
- Μέγεθος λεξιλογίου: 6 tokens [1, 2, 3, 4, 5, 6]
- Διαστάσεις ενσωμάτωσης: 3 (x, y, z)
Αρχικοποίηση των ενσωματώσεων token
Στην αρχή της εκπαίδευσης, οι ενσωματώσεις token συνήθως αρχικοποιούνται με μικρές τυχαίες τιμές. Αυτές οι αρχικές τιμές προσαρμόζονται (fine-tuned) κατά την εκπαίδευση ώστε να εκπροσωπούν καλύτερα τα νοήματα των tokens βάσει των δεδομένων εκπαίδευσης.
Παράδειγμα PyTorch:
import torch
# Set a random seed for reproducibility
torch.manual_seed(123)
# Create an embedding layer with 6 tokens and 3 dimensions
embedding_layer = torch.nn.Embedding(6, 3)
# Display the initial weights (embeddings)
print(embedding_layer.weight)
I don’t have the contents of src/AI/AI-llm-architecture/3.-token-embeddings.md. Please paste the markdown content you want translated (or attach the file text). I’ll translate the English text to Greek, preserving all markdown/html/tags/paths/code as you specified.
luaCopy codeParameter containing:
tensor([[ 0.3374, -0.1778, -0.1690],
[ 0.9178, 1.5810, 1.3010],
[ 1.2753, -0.2010, -0.1606],
[-0.4015, 0.9666, -1.1481],
[-1.1589, 0.3255, -0.6315],
[-2.8400, -0.7849, -1.4096]], requires_grad=True)
Επεξήγηση:
- Κάθε σειρά αντιστοιχεί σε ένα token στο λεξιλόγιο.
- Κάθε στήλη αντιπροσωπεύει μια διάσταση στο διάνυσμα ενσωμάτωσης.
- Για παράδειγμα, το token στη θέση
3έχει διάνυσμα ενσωμάτωσης[-0.4015, 0.9666, -1.1481].
Πρόσβαση στην ενσωμάτωση ενός token:
# Retrieve the embedding for the token at index 3
token_index = torch.tensor([3])
print(embedding_layer(token_index))
Δεν βλέπω το περιεχόμενο του αρχείου για μετάφραση. Παρακαλώ επικόλλησε εδώ το markdown από το src/AI/AI-llm-architecture/3.-token-embeddings.md και θα μεταφράσω το αγγλικό κείμενο στα Ελληνικά, διατηρώντας ανέπαφα code, tags, links, paths και markdown.
tensor([[-0.4015, 0.9666, -1.1481]], grad_fn=<EmbeddingBackward0>)
Ερμηνεία:
- Το token στη θέση
3αναπαρίσταται από το διάνυσμα[-0.4015, 0.9666, -1.1481]. - Αυτές οι τιμές είναι εκπαιδεύσιμες παράμετροι που το μοντέλο θα προσαρμόσει κατά την εκπαίδευση για να αναπαραστήσει καλύτερα το πλαίσιο και το νόημα του token.
Πώς λειτουργούν τα Token Embeddings κατά την εκπαίδευση
Κατά την εκπαίδευση, κάθε token στα εισερχόμενα δεδομένα μετατρέπεται στο αντίστοιχο διάνυσμα embedding. Αυτά τα διανύσματα χρησιμοποιούνται στη συνέχεια σε διάφορους υπολογισμούς μέσα στο μοντέλο, όπως μηχανισμοί attention και στρώματα νευρωνικού δικτύου.
Παράδειγμα Σεναρίου:
- Batch Size: 8 (αριθμός δειγμάτων που επεξεργάζονται ταυτόχρονα)
- Max Sequence Length: 4 (αριθμός token ανά δείγμα)
- Embedding Dimensions: 256
Δομή Δεδομένων:
- Κάθε batch αναπαρίσταται ως 3D tensor με σχήμα
(batch_size, max_length, embedding_dim). - Για το παράδειγμά μας, το σχήμα θα ήταν
(8, 4, 256).
Οπτικοποίηση:
cssCopy codeBatch
┌─────────────┐
│ Sample 1 │
│ ┌─────┐ │
│ │Token│ → [x₁₁, x₁₂, ..., x₁₂₅₆]
│ │ 1 │ │
│ │... │ │
│ │Token│ │
│ │ 4 │ │
│ └─────┘ │
│ Sample 2 │
│ ┌─────┐ │
│ │Token│ → [x₂₁, x₂₂, ..., x₂₂₅₆]
│ │ 1 │ │
│ │... │ │
│ │Token│ │
│ │ 4 │ │
│ └─────┘ │
│ ... │
│ Sample 8 │
│ ┌─────┐ │
│ │Token│ → [x₈₁, x₈₂, ..., x₈₂₅₆]
│ │ 1 │ │
│ │... │ │
│ │Token│ │
│ │ 4 │ │
│ └─────┘ │
└─────────────┘
Επεξήγηση:
- Κάθε token στη σειρά αναπαρίσταται από ένα 256-διαστασιακό διάνυσμα.
- Το μοντέλο επεξεργάζεται αυτές τις ενσωματώσεις για να μάθει γλωσσικά πρότυπα και να παράγει προβλέψεις.
Ενσωματώσεις θέσης: Προσθήκη πλαισίου στις ενσωματώσεις token
Ενώ οι ενσωματώσεις token αποτυπώνουν το νόημα των μεμονωμένων token, δεν κωδικοποιούν εγγενώς τη θέση των token μέσα σε μια ακολουθία. Η κατανόηση της σειράς των token είναι κρίσιμη για την κατανόηση της γλώσσας. Εδώ επεμβαίνουν οι ενσωματώσεις θέσης.
Γιατί χρειάζονται οι ενσωματώσεις θέσης:
- Η σειρά των token έχει σημασία: Στις προτάσεις, το νόημα συχνά εξαρτάται από τη σειρά των λέξεων. Για παράδειγμα, «Η γάτα κάθισε πάνω στο χαλάκι» vs. «Το χαλάκι κάθισε πάνω στη γάτα».
- Περιορισμός ενσωματώσεων: Χωρίς πληροφορία θέσης, το μοντέλο αντιμετωπίζει τα token ως «σακούλα λέξεων», αγνοώντας τη σειρά τους.
Τύποι ενσωματώσεων θέσης:
- Απόλυτες ενσωματώσεις θέσης:
- Αναθέτουν ένα μοναδικό διάνυσμα θέσης σε κάθε θέση στην ακολουθία.
- Παράδειγμα: Το πρώτο token σε οποιαδήποτε ακολουθία έχει την ίδια ενσωμάτωση θέσης, το δεύτερο token έχει άλλη, κ.ο.κ.
- Χρησιμοποιείται από: OpenAI’s GPT models.
- Σχετικές ενσωματώσεις θέσης:
- Κωδικοποιούν τη σχετική απόσταση μεταξύ token αντί για τις απόλυτες θέσεις τους.
- Παράδειγμα: Δείχνουν πόσο μακριά βρίσκονται δύο token, ανεξάρτητα από τις απόλυτες θέσεις τους στην ακολουθία.
- Χρησιμοποιείται από: Μοντέλα όπως Transformer-XL και ορισμένες παραλλαγές του BERT.
Πώς ενσωματώνονται οι ενσωματώσεις θέσης:
- Ίδιες διαστάσεις: Οι ενσωματώσεις θέσης έχουν την ίδια διάσταση με τις ενσωματώσεις token.
- Πρόσθεση: Προστίθενται στις ενσωματώσεις token, συνδυάζοντας την ταυτότητα του token με πληροφορία θέσης χωρίς αύξηση της συνολικής διάστασης.
Παράδειγμα πρόσθεσης ενσωματώσεων θέσης:
Υποθέστε ότι ένα διάνυσμα ενσωμάτωσης token είναι [0.5, -0.2, 0.1] και το διάνυσμα ενσωμάτωσης θέσης του είναι [0.1, 0.3, -0.1]. Η συνδυασμένη ενσωμάτωση που χρησιμοποιεί το μοντέλο θα ήταν:
Combined Embedding = Token Embedding + Positional Embedding
= [0.5 + 0.1, -0.2 + 0.3, 0.1 + (-0.1)]
= [0.6, 0.1, 0.0]
Οφέλη των Ενσωματώσεων Θέσης:
- Επίγνωση Συμφραζομένων: Το μοντέλο μπορεί να διακρίνει μεταξύ των tokens βάσει των θέσεών τους.
- Κατανόηση Ακολουθίας: Επιτρέπει στο μοντέλο να κατανοεί γραμματική, σύνταξη και σημασίες που εξαρτώνται από το συμφραζόμενο.
Ενσωματώσεις Θέσης σε Σύγχρονα LLMs
Περιστροφικές ενσωματώσεις θέσης (RoPE)
Το RoPE κωδικοποιεί τη θέση εφαρμόζοντας μια θέσης-εξαρτώμενη περιστροφή σε ζεύγη διαστάσεων στα query/key διανύσματα, μετατρέποντας τις απόλυτες θέσεις σε σχετικές διαφορές φάσης. Αυτό παρέχει πληροφορία σχετικά με τις σχετικές θέσεις ενώ διατηρεί την αμετάβλητη διαστατικότητα των ενσωματώσεων και χρησιμοποιείται ευρέως σε πρόσφατα decoder-only LLMs.
Για το πώς οι token και positional embeddings συνδυάζονται μέσα στο μοντέλο, δείτε the LLM architecture page.
Επέκταση παραθύρων συμφραζομένων σε μοντέλα βασισμένα σε RoPE
Πρόσφατες μελέτες δείχνουν ότι το μήκος του συμφραζομένου συχνά περιορίζεται από το σχήμα κωδικοποίησης θέσης και όχι από τη μήτρα ενσωμάτωσης token από μόνη της.
- Παρεμβολή Θέσης (PI): Ανακλιμακώνει τους δείκτες θέσης ώστε μεγαλύτερες αλληλουχίες να χαρτογραφούνται στο εύρος που φάνηκε κατά την εκπαίδευση, επιτρέποντας επέκταση με ελάχιστο fine-tuning. Παράδειγμα:
# Position Interpolation (PI) intuition
orig_ctx = 2048
new_ctx = 8192
scaled_pos = pos * (orig_ctx / new_ctx)
- YaRN: Μια υπολογιστικά αποδοτική στρατηγική επέκτασης RoPE που τροποποιεί την κλιμάκωση/παρεμβολή του RoPE ώστε να επεκτείνεται σε μεγαλύτερα συμφραζόμενα με λιγότερα επιπλέον βήματα εκπαίδευσης.
Παράδειγμα Κώδικα
Ακολουθεί το παράδειγμα κώδικα από https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb:
# Use previous code...
# Create dimensional emdeddings
"""
BPE uses a vocabulary of 50257 words
Let's supose we want to use 256 dimensions (instead of the millions used by LLMs)
"""
vocab_size = 50257
output_dim = 256
token_embedding_layer = torch.nn.Embedding(vocab_size, output_dim)
## Generate the dataloader like before
max_length = 4
dataloader = create_dataloader_v1(
raw_text, batch_size=8, max_length=max_length,
stride=max_length, shuffle=False
)
data_iter = iter(dataloader)
inputs, targets = next(data_iter)
# Apply embeddings
token_embeddings = token_embedding_layer(inputs)
print(token_embeddings.shape)
torch.Size([8, 4, 256]) # 8 x 4 x 256
# Generate absolute embeddings
context_length = max_length
pos_embedding_layer = torch.nn.Embedding(context_length, output_dim)
pos_embeddings = pos_embedding_layer(torch.arange(max_length))
input_embeddings = token_embeddings + pos_embeddings
print(input_embeddings.shape) # torch.Size([8, 4, 256])
Αναφορές
Tip
Μάθετε & εξασκηθείτε στο AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.


