mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/AI/AI-llm-architecture/2.-data-sampling.md'] to pl
This commit is contained in:
parent
8271e605d5
commit
8a9f9ac74d
@ -13,7 +13,7 @@
|
||||
|
||||
LLM, takie jak GPT, są trenowane do generowania lub przewidywania tekstu poprzez zrozumienie kontekstu dostarczonego przez poprzednie słowa. Aby to osiągnąć, dane treningowe muszą być ustrukturyzowane w sposób, który pozwala modelowi nauczyć się relacji między sekwencjami słów a ich następnymi słowami. To ustrukturyzowane podejście pozwala modelowi na generalizację i generowanie spójnego oraz kontekstowo odpowiedniego tekstu.
|
||||
|
||||
### **Kluczowe Pojęcia w Próbkowaniu Danych**
|
||||
### **Kluczowe Koncepcje w Próbkowaniu Danych**
|
||||
|
||||
1. **Tokenizacja:** Rozkładanie tekstu na mniejsze jednostki zwane tokenami (np. słowa, podsłowa lub znaki).
|
||||
2. **Długość Sekwencji (max_length):** Liczba tokenów w każdej sekwencji wejściowej.
|
||||
@ -43,7 +43,7 @@ Tokens: ["Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing",
|
||||
|
||||
1. **Podejście okna przesuwającego:**
|
||||
- **Sekwencje wejściowe:** Każda sekwencja wejściowa składa się z `max_length` tokenów.
|
||||
- **Sekwencje docelowe:** Każda sekwencja docelowa składa się z tokenów, które bezpośrednio następują po odpowiadającej sekwencji wejściowej.
|
||||
- **Sekwencje docelowe:** Każda sekwencja docelowa składa się z tokenów, które natychmiast następują po odpowiadającej sekwencji wejściowej.
|
||||
2. **Generowanie sekwencji:**
|
||||
|
||||
<table><thead><tr><th width="177">Pozycja okna</th><th>Sekwencja wejściowa</th><th>Sekwencja docelowa</th></tr></thead><tbody><tr><td>1</td><td>["Lorem", "ipsum", "dolor", "sit"]</td><td>["ipsum", "dolor", "sit", "amet,"]</td></tr><tr><td>2</td><td>["ipsum", "dolor", "sit", "amet,"]</td><td>["dolor", "sit", "amet,", "consectetur"]</td></tr><tr><td>3</td><td>["dolor", "sit", "amet,", "consectetur"]</td><td>["sit", "amet,", "consectetur", "adipiscing"]</td></tr><tr><td>4</td><td>["sit", "amet,", "consectetur", "adipiscing"]</td><td>["amet,", "consectetur", "adipiscing", "elit."]</td></tr></tbody></table>
|
||||
@ -86,8 +86,8 @@ Tokens: ["Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing",
|
||||
**Zrozumienie kroku**
|
||||
|
||||
- **Krok 1:** Okno przesuwa się do przodu o jeden token za każdym razem, co skutkuje silnie nakładającymi się sekwencjami. Może to prowadzić do lepszego uczenia się relacji kontekstowych, ale może zwiększyć ryzyko przeuczenia, ponieważ podobne punkty danych są powtarzane.
|
||||
- **Krok 2:** Okno przesuwa się do przodu o dwa tokeny za każdym razem, co zmniejsza nakładanie. To zmniejsza redundancję i obciążenie obliczeniowe, ale może pominąć niektóre kontekstowe niuanse.
|
||||
- **Krok równy max_length:** Okno przesuwa się do przodu o całą wielkość okna, co skutkuje sekwencjami bez nakładania. Minimalizuje to redundancję danych, ale może ograniczyć zdolność modelu do uczenia się zależności między sekwencjami.
|
||||
- **Krok 2:** Okno przesuwa się do przodu o dwa tokeny za każdym razem, co zmniejsza nakładanie się. To zmniejsza redundancję i obciążenie obliczeniowe, ale może pominąć niektóre niuanse kontekstowe.
|
||||
- **Krok równy max_length:** Okno przesuwa się do przodu o całą wielkość okna, co skutkuje sekwencjami bez nakładania się. Minimalizuje to redundancję danych, ale może ograniczyć zdolność modelu do uczenia się zależności między sekwencjami.
|
||||
|
||||
**Przykład z krokiem 2:**
|
||||
|
||||
@ -230,9 +230,70 @@ tensor([[ 367, 2885, 1464, 1807],
|
||||
[ 3285, 326, 11, 287]])
|
||||
]
|
||||
```
|
||||
## Odniesienia
|
||||
## Zaawansowane strategie próbkowania (2023-2025)
|
||||
|
||||
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
|
||||
### 1. Ważenie mieszanki oparte na temperaturze
|
||||
Najnowocześniejsze LLM rzadko są trenowane na pojedynczym korpusie. Zamiast tego, próbkują z kilku heterogenicznych źródeł danych (kod, sieć, prace naukowe, fora…). Względny udział każdego źródła może silnie wpływać na wydajność downstream. Ostatnie modele open-source, takie jak Llama 2, wprowadziły **schemat próbkowania oparty na temperaturze**, w którym prawdopodobieństwo wybrania dokumentu z korpusu *i* staje się
|
||||
```
|
||||
p(i) = \frac{w_i^{\alpha}}{\sum_j w_j^{\alpha}}
|
||||
```
|
||||
• *w<sub>i</sub>* – surowy procent tokenów korpusu *i*
|
||||
• *α* ("temperatura") – wartość w (0,1]. α < 1 spłaszcza rozkład, nadając większą wagę mniejszym, wysokiej jakości korpusom.
|
||||
|
||||
Llama 2 używał α = 0.7 i pokazał, że zmniejszenie α zwiększało wyniki oceny w zadaniach wymagających wiedzy, jednocześnie utrzymując stabilną mieszankę treningową. Ta sama sztuczka jest stosowana przez Mistral (2023) i Claude 3.
|
||||
```python
|
||||
from collections import Counter
|
||||
|
||||
def temperature_sample(corpus_ids, alpha=0.7):
|
||||
counts = Counter(corpus_ids) # number of tokens seen per corpus
|
||||
probs = {c: c_count**alpha for c, c_count in counts.items()}
|
||||
Z = sum(probs.values())
|
||||
probs = {c: p/Z for c, p in probs.items()}
|
||||
# Now draw according to probs to fill every batch
|
||||
```
|
||||
|
||||
```
|
||||
|
||||
### 2. Sequence Packing / Dynamic Batching
|
||||
GPU memory is wasted when every sequence in a batch is padded to the longest example. "Packing" concatenates multiple shorter sequences until the **exact** `max_length` is reached and builds a parallel `attention_mask` so that tokens do not attend across segment boundaries. Packing can improve throughput by 20–40 % with no gradient change and is supported out-of-the-box in
|
||||
|
||||
* PyTorch `torchtext.experimental.agents.PackedBatch`
|
||||
* HuggingFace `DataCollatorForLanguageModeling(pad_to_multiple_of=…)`
|
||||
|
||||
Dynamic batching frameworks (e.g. FlashAttention 2, vLLM 2024) combine sequence packing with just-in-time kernel selection, enabling thousand-token context training at 400+ K tokens/s on A100-80G.
|
||||
|
||||
### 3. Deduplication & Quality Filtering
|
||||
Repeated passages cause memorization and provide an easy channel for data-poisoning. Modern pipelines therefore:
|
||||
|
||||
1. MinHash/FAISS near-duplicate detection at **document** and **128-gram** level.
|
||||
2. Filter documents whose perplexity under a small reference model is > µ + 3σ (noisy OCR, garbled HTML).
|
||||
3. Block-list documents that contain PII or CWE keywords using regex & spaCy NER.
|
||||
|
||||
The Llama 2 team deduplicated with 8-gram MinHash and removed ~15 % of CommonCrawl before sampling. OpenAI’s 2024 "Deduplicate Everything" paper demonstrates ≤0.04 duplicate ratio reduces over-fitting and speeds convergence.
|
||||
|
||||
## Security & Privacy Considerations During Sampling
|
||||
|
||||
### Data-Poisoning / Backdoor Attacks
|
||||
Researchers showed that inserting <1 % backdoored sentences can make a model obey a hidden trigger ("PoisonGPT", 2023). Recommended mitigations:
|
||||
|
||||
* **Shuffled mixing** – make sure adjacent training examples originate from different sources; this dilutes gradient alignment of malicious spans.
|
||||
* **Gradient similarity scoring** – compute cosine similarity of example gradient to batch average; outliers are candidates for removal.
|
||||
* **Dataset versioning & hashes** – freeze immutable tarballs and verify SHA-256 before each training run.
|
||||
|
||||
### Membership-Inference & Memorization
|
||||
Long overlap between sliding-window samples increases the chance that rare strings (telephone numbers, secret keys) are memorized. OpenAI’s 2024 study on ChatGPT memorization reports that raising stride from 1 × `max_length` to 4 × reduces verbatim leakage by ≈50 % with negligible loss in perplexity.
|
||||
|
||||
Practical recommendations:
|
||||
|
||||
* Use **stride ≥ max_length** except for <1B parameter models where data volume is scarce.
|
||||
* Add random masking of 1-3 tokens per window during training; this lowers memorization while preserving utility.
|
||||
|
||||
---
|
||||
|
||||
## References
|
||||
|
||||
- [Build a Large Language Model from Scratch (Manning, 2024)](https://www.manning.com/books/build-a-large-language-model-from-scratch)
|
||||
- [Llama 2: Open Foundation and Fine-Tuned Chat Models (2023)](https://arxiv.org/abs/2307.09288)
|
||||
- [PoisonGPT: Assessing Backdoor Vulnerabilities in Large Language Models (BlackHat EU 2023)](https://arxiv.org/abs/2308.12364)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user