mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-21 20:23:18 +00:00
Translated ['todo/llm-training.md'] to kr
This commit is contained in:
parent
9a196b36bd
commit
7092330d0e
2 changed files with 47 additions and 0 deletions
|
@ -838,6 +838,7 @@
|
|||
* [Low-Power Wide Area Network](todo/radio-hacking/low-power-wide-area-network.md)
|
||||
* [Pentesting BLE - Bluetooth Low Energy](todo/radio-hacking/pentesting-ble-bluetooth-low-energy.md)
|
||||
* [Industrial Control Systems Hacking](todo/industrial-control-systems-hacking/README.md)
|
||||
* [LLM Training](todo/llm-training.md)
|
||||
* [Burp Suite](todo/burp-suite.md)
|
||||
* [Other Web Tricks](todo/other-web-tricks.md)
|
||||
* [Interesting HTTP](todo/interesting-http.md)
|
||||
|
|
46
todo/llm-training.md
Normal file
46
todo/llm-training.md
Normal file
|
@ -0,0 +1,46 @@
|
|||
# LLM Training
|
||||
|
||||
## Tokenizing
|
||||
|
||||
Tokenizing은 데이터를 특정 청크로 분리하고 각 청크에 특정 ID(숫자)를 할당하는 것입니다.\
|
||||
텍스트에 대한 매우 간단한 토크나이저는 텍스트의 각 단어를 개별적으로 가져오고, 구두점 기호도 포함하여 공백을 제거하는 것일 수 있습니다.\
|
||||
따라서, `"Hello, world!"`는: `["Hello", ",", "world", "!"]`가 됩니다.
|
||||
|
||||
그런 다음 각 단어와 기호에 토큰 ID(숫자)를 할당하기 위해 토크나이저 **어휘**를 생성해야 합니다. 예를 들어 책을 토크나이징하는 경우, 이는 **책의 모든 다른 단어**를 알파벳 순서로 나열하고 몇 가지 추가 토큰을 포함할 수 있습니다:
|
||||
|
||||
* `[BOS] (Beginning of sequence)`: 텍스트의 시작 부분에 배치되어 텍스트의 시작을 나타냅니다(관련 없는 텍스트를 구분하는 데 사용됨).
|
||||
* `[EOS] (End of sequence)`: 텍스트의 끝에 배치되어 텍스트의 끝을 나타냅니다(관련 없는 텍스트를 구분하는 데 사용됨).
|
||||
* `[PAD] (padding)`: 배치 크기가 일반적으로 1보다 클 때, 이 토큰은 해당 배치의 길이를 다른 배치와 같게 늘리는 데 사용됩니다.
|
||||
* `[UNK] (unknown)`: 알려지지 않은 단어를 나타냅니다.
|
||||
|
||||
예를 따라, 텍스트를 토크나이징하여 각 단어와 기호에 어휘에서의 위치를 할당한 경우, 토크나이징된 문장 `"Hello, world!"` -> `["Hello", ",", "world", "!"]`는 다음과 같이 될 것입니다: `[64, 455, 78, 467]`라고 가정할 때 `Hello`는 위치 64에, "`,"`는 위치 `455`에... 결과 어휘 배열에서.
|
||||
|
||||
그러나 어휘를 생성하는 데 사용된 텍스트에 `"Bye"`라는 단어가 존재하지 않는 경우, 이는 다음과 같은 결과를 초래합니다: `"Bye, world!"` -> `["[UNK]", ",", "world", "!"]` -> `[987, 455, 78, 467]`라고 가정할 때 `[UNK]`의 토큰이 987에 있습니다.
|
||||
|
||||
### BPE - Byte Pair Encoding
|
||||
|
||||
모든 가능한 단어를 토크나이징해야 하는 문제를 피하기 위해, LLMs는 BPE를 사용합니다. 이는 기본적으로 **빈번한 바이트 쌍을 인코딩**하여 텍스트의 크기를 더 최적화된 형식으로 줄이는 것입니다. 더 이상 줄일 수 없을 때까지 진행됩니다(자세한 내용은 [**wikipedia**](https://en.wikipedia.org/wiki/Byte\_pair\_encoding)를 확인하세요). 이 방법에서는 어휘에 "알려지지 않은" 단어가 없으며, 최종 어휘는 발견된 빈번한 바이트 세트가 가능한 한 많이 그룹화된 것입니다. 빈번하게 연결되지 않은 바이트는 자체적으로 토큰이 됩니다.
|
||||
|
||||
## Data Sampling
|
||||
|
||||
LLMs는 이전 단어를 기반으로 다음 단어를 예측하여 작동하므로, 훈련을 위한 데이터를 준비하기 위해서는 데이터를 이와 같이 준비해야 합니다.
|
||||
|
||||
예를 들어, 텍스트 "Lorem ipsum dolor sit amet, consectetur adipiscing elit,"를 사용하여,
|
||||
|
||||
모델이 다음 단어를 예측하도록 학습하도록 준비하기 위해(각 단어가 매우 기본적인 토크나이저를 사용하여 토큰이라고 가정하고), 최대 크기를 4로 하고 슬라이딩 윈도우를 1로 사용하여, 텍스트는 다음과 같이 준비되어야 합니다:
|
||||
```javascript
|
||||
Input: [
|
||||
["Lorem", "ipsum", "dolor", "sit"],
|
||||
["ipsum", "dolor", "sit", "amet,"],
|
||||
["dolor", "sit", "amet,", "consectetur"],
|
||||
["sit", "amet,", "consectetur", "adipiscing"],
|
||||
],
|
||||
Target: [
|
||||
["ipsum", "dolor", "sit", "amet,"],
|
||||
["dolor", "sit", "amet,", "consectetur"],
|
||||
["sit", "amet,", "consectetur", "adipiscing"],
|
||||
["amet,", "consectetur", "adipiscing", "elit,"],
|
||||
["consectetur", "adipiscing", "elit,", "sed"],
|
||||
]
|
||||
```
|
||||
슬라이딩 윈도우가 2였다면, 입력 배열의 다음 항목이 1개가 아니라 2개의 토큰 후에 시작된다는 것을 의미합니다. 그러나 목표 배열은 여전히 1개의 토큰만 예측할 것입니다. pytorch에서 이 슬라이딩 윈도우는 매개변수 `stride`로 표현됩니다.
|
Loading…
Reference in a new issue