Translated ['todo/llm-training.md'] to tr

This commit is contained in:
Translator 2024-09-14 17:16:35 +00:00
parent e661626a6b
commit faeff2e2e5
2 changed files with 47 additions and 0 deletions

View file

@ -838,6 +838,7 @@
* [Low-Power Wide Area Network](todo/radio-hacking/low-power-wide-area-network.md) * [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) * [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) * [Industrial Control Systems Hacking](todo/industrial-control-systems-hacking/README.md)
* [LLM Training](todo/llm-training.md)
* [Burp Suite](todo/burp-suite.md) * [Burp Suite](todo/burp-suite.md)
* [Other Web Tricks](todo/other-web-tricks.md) * [Other Web Tricks](todo/other-web-tricks.md)
* [Interesting HTTP](todo/interesting-http.md) * [Interesting HTTP](todo/interesting-http.md)

46
todo/llm-training.md Normal file
View file

@ -0,0 +1,46 @@
# LLM Training
## Tokenizing
Tokenizing, verileri belirli parçalara ayırmak ve onlara belirli kimlikler (numaralar) atamak anlamına gelir.\
Metinler için çok basit bir tokenizer, bir metindeki her kelimeyi ayrı ayrı almak ve ayrıca noktalama işaretlerini almak ve boşlukları kaldırmak olabilir.\
Bu nedenle, `"Hello, world!"` şöyle olur: `["Hello", ",", "world", "!"]`
Sonra, kelimelere ve sembollere bir token ID (numara) atamak için tokenizer **sözlüğü** oluşturmak gerekir. Örneğin, bir kitabı tokenize ediyorsanız, bu **kitabın tüm farklı kelimeleri** alfabetik sırayla ve bazı ekstra tokenlerle olabilir:
* `[BOS] (Dizinin başlangıcı)`: Bir metnin başında yer alır, bir metnin başlangıcını gösterir (ilişkisiz metinleri ayırmak için kullanılır).
* `[EOS] (Dizinin sonu)`: Bir metnin sonunda yer alır, bir metnin sonunu gösterir (ilişkisiz metinleri ayırmak için kullanılır).
* `[PAD] (doldurma)`: Bir batch boyutu genellikle birden büyük olduğunda, bu token, o batch'in uzunluğunu diğerleriyle aynı boyuta çıkarmak için kullanılır.
* `[UNK] (bilinmeyen)`: Bilinmeyen kelimeleri temsil etmek için.
Örneği takip ederek, bir metni tokenize edip her kelime ve sembole sözlükte bir pozisyon atadıktan sonra, tokenize edilmiş cümle `"Hello, world!"` -> `["Hello", ",", "world", "!"]` şöyle olur: `[64, 455, 78, 467]` varsayılarak `Hello` pozisyonda 64, "`,"` pozisyonda `455`... sonuçta oluşan sözlük dizisinde.
Ancak, sözlüğü oluşturmak için kullanılan metinde `"Bye"` kelimesi yoksa, bu sonuç verir: `"Bye, world!"` -> `["[UNK]", ",", "world", "!"]` -> `[987, 455, 78, 467]` varsayılarak `[UNK]` için token 987'dir.
### BPE - Byte Pair Encoding
Tüm olası kelimeleri tokenize etme gibi sorunları önlemek için, GPT gibi LLM'ler, metnin boyutunu daha optimize bir formatta azaltmak için temelde **sık kullanılan byte çiftlerini kodlayan** BPE'yi kullanır, bu şekilde daha fazla azaltılamaz hale gelene kadar (bakınız [**wikipedia**](https://en.wikipedia.org/wiki/Byte\_pair\_encoding)). Bu şekilde, sözlükte "bilinmeyen" kelimeler yoktur ve nihai sözlük, mümkün olduğunca gruplandırılmış sık kullanılan byte'ların keşfedilen tüm setleri olacaktır; aynı byte ile sıkça bağlantılı olmayan byte'lar ise kendileri bir token olacaktır.
## Data Sampling
GPT gibi LLM'ler, önceki kelimelere dayanarak bir sonraki kelimeyi tahmin ederek çalışır, bu nedenle eğitim için bazı verileri hazırlamak amacıyla verilerin bu şekilde hazırlanması gereklidir.
Örneğin, "Lorem ipsum dolor sit amet, consectetur adipiscing elit," metnini kullanarak
Modeli, bir sonraki kelimeyi tahmin etmeyi öğrenmeye hazırlamak için (her kelimenin çok temel bir tokenizer kullanarak bir token olduğunu varsayarak) ve maksimum boyut 4 ve kaydırma penceresi 1 kullanarak, metin şu şekilde hazırlanmalıdır:
```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"],
]
```
Not edin ki, eğer kaydırma penceresi 2 olsaydı, bu, girdi dizisindeki bir sonraki girişin 2 token sonra başlayacağı anlamına gelir ve sadece bir değil, ancak hedef dizi yine de yalnızca 1 token tahmin edecektir. Pytorch'ta, bu kaydırma penceresi `stride` parametresi ile ifade edilir.