Translated ['src/AI/AI-llm-architecture/2.-data-sampling.md'] to ko

This commit is contained in:
Translator 2025-08-04 12:31:43 +00:00
parent 23a312bd1f
commit 507ac40846

View File

@ -18,7 +18,7 @@ GPT와 같은 LLM은 이전 단어가 제공하는 맥락을 이해하여 텍스
1. **토큰화:** 텍스트를 토큰(예: 단어, 하위 단어 또는 문자)이라고 하는 더 작은 단위로 나누는 과정.
2. **시퀀스 길이 (max_length):** 각 입력 시퀀스의 토큰 수.
3. **슬라이딩 윈도우:** 토큰화된 텍스트 위에 창을 이동시켜 겹치는 입력 시퀀스를 생성하는 방법.
4. **스트라이드:** 슬라이딩 윈도가 다음 시퀀스를 생성하기 위해 앞으로 이동하는 토큰 수.
4. **스트라이드:** 슬라이딩 윈도가 다음 시퀀스를 생성하기 위해 앞으로 이동하는 토큰 수.
### **단계별 예제**
@ -76,7 +76,7 @@ Tokens: ["Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing",
<table><thead><tr><th width="222">토큰 위치</th><th>토큰</th></tr></thead><tbody><tr><td>1</td><td>Lorem</td></tr><tr><td>2</td><td>ipsum</td></tr><tr><td>3</td><td>dolor</td></tr><tr><td>4</td><td>sit</td></tr><tr><td>5</td><td>amet,</td></tr><tr><td>6</td><td>consectetur</td></tr><tr><td>7</td><td>adipiscing</td></tr><tr><td>8</td><td>elit.</td></tr></tbody></table>
**보폭이 1인 슬라이딩 윈도우:**
**보폭 1의 슬라이딩 윈도우:**
- **첫 번째 윈도우 (위치 1-4):** \["Lorem", "ipsum", "dolor", "sit"] → **타겟:** \["ipsum", "dolor", "sit", "amet,"]
- **두 번째 윈도우 (위치 2-5):** \["ipsum", "dolor", "sit", "amet,"] → **타겟:** \["dolor", "sit", "amet,", "consectetur"]
@ -89,7 +89,7 @@ Tokens: ["Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing",
- **보폭 2:** 윈도우가 매번 두 토큰씩 앞으로 이동하여 겹침을 줄입니다. 이는 중복성과 계산 부하를 감소시키지만, 일부 맥락적 뉘앙스를 놓칠 수 있습니다.
- **max_length와 같은 보폭:** 윈도우가 전체 윈도우 크기만큼 앞으로 이동하여 겹치지 않는 시퀀스를 생성합니다. 이는 데이터 중복성을 최소화하지만, 시퀀스 간의 의존성을 학습하는 모델의 능력을 제한할 수 있습니다.
**보폭 2의 예:**
**보폭 2의 예:**
같은 토큰화된 텍스트와 `max_length` 4를 사용하여:
@ -97,9 +97,9 @@ Tokens: ["Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing",
- **두 번째 윈도우 (위치 3-6):** \["dolor", "sit", "amet,", "consectetur"] → **타겟:** \["sit", "amet,", "consectetur", "adipiscing"]
- **세 번째 윈도우 (위치 5-8):** \["amet,", "consectetur", "adipiscing", "elit."] → **타겟:** \["consectetur", "adipiscing", "elit.", "sed"] _(계속된다고 가정)_
## 코드 예
## 코드 예
[https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb)에서 코드 예를 통해 이를 더 잘 이해해 봅시다.
[https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb](https://github.com/rasbt/LLMs-from-scratch/blob/main/ch02/01_main-chapter-code/ch02.ipynb)에서 코드 예를 통해 이를 더 잘 이해해 봅시다.
```python
# Download the text to pre-train the LLM
import urllib.request
@ -230,9 +230,70 @@ tensor([[ 367, 2885, 1464, 1807],
[ 3285, 326, 11, 287]])
]
```
## 고급 샘플링 전략 (2023-2025)
### 1. 온도 기반 혼합 가중치
최신 LLM은 단일 말뭉치에서 훈련되는 경우가 드뭅니다. 대신, 여러 이질적인 데이터 소스(코드, 웹, 학술 논문, 포럼 등)에서 샘플링합니다. 각 소스의 상대적인 비율은 하위 성능에 강한 영향을 미칠 수 있습니다. 최근 오픈 소스 모델인 Llama 2는 **온도 기반 샘플링 방식**을 도입하여 말뭉치 *i*에서 문서를 추출할 확률이 다음과 같이 됩니다.
```
p(i) = \frac{w_i^{\alpha}}{\sum_j w_j^{\alpha}}
```
*w<sub>i</sub>* 코퍼스 *i*의 원시 토큰 비율
*α* ("온도") (0,1]의 값. α < 1은 분포를 평평하게 하여 작은 고품질 코퍼스에 많은 가중치를 부여합니다.
Llama 2는 α = 0.7을 사용하였고, α를 줄이면 훈련 혼합을 안정적으로 유지하면서 지식 중심 작업에서 평가 점수를 높인다는 것을 보여주었습니다. 같은 기법이 Mistral (2023)와 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 2040 % 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. OpenAIs 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. OpenAIs 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
- [https://www.manning.com/books/build-a-large-language-model-from-scratch](https://www.manning.com/books/build-a-large-language-model-from-scratch)
- [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}}