A chatGPT az egy nyelvi modell, amire azt szokták mondani, hogy a következő legvalósznűbb szót köpi vissza. Mégis sztochasztikus, mitől van ez?
A nagy nyelvi modellekre azt szokták mondani, hogy a következő legvalósznűbb szót köpik vissza, de ez ilyen formában egyszerűsítés, mert ugyanarra a promptra többnyire mást válaszolnak, ha még egyszer kérjük. Szóval mi az igazság az alábbiak közül?
1: A nyelvi modell egy valószínűség eloszlást számol, de annak a maximumát csak becsli, és ez a becslés nem tökéletes, és nem is determinisztikus. Ha így van, akkor miért nem determinisztikus?
2: A nyelvi modell nem is "számolja" ki a valószínűség eloszlást, hanem elve csak mintavételezi, és a következő szót is csak mintavételezi, tehát nem a legnagyobb valószínűségűt adja vissza, csak nagy valószínűséggel az eloszlás magas részéből mintavételez. (Tehát valójában rosszul mondják, akik imseretterjesztő előadásokban azt mondják, hogy a legvalószínűbb szót adja vissza, mert még csak nem is azt akarja visszaadni)
3: Direkt bele van téve egy inicializáló sztohaszticitás, mint a diffúziós képgenerátor modellekbe.
4: vagy valami más oka van?
Tudtommal a legvalószínűbb tokenek közül választ a valószínűségeknek megfelelően súlyozva, de random módon. Emiatt nem ugyanazt generálja. Ez a temperature metaparaméter ( [link]
Vannak egyéb metaparaméterei, hogy ne generálja ugyanazt körbe-körbe.
Ha kicsit bővebben érdekel, Andrej Karpathynak van youtube-on egy videósorozata erről ( https://www.youtube.com/watch?v=VMj-3S1tku0&list=PLAqhIrjkxb.. ). Nem árt hozzá Python tudás, meg 1-2 epizódhoz (pl. a Backprop ninja-hoz) valamennyi matek.
Ő a tutorialjában a torch.multinomial-t használja ( [link] ), szépen látszik, hogy mintavételez a megadott (vagy kiszámolt) valószínűségek alapján a hozzájuk tartozó indexekből:
>>> weights = torch.tensor([0, 10, 3, 0], dtype=torch.float) # create a tensor of weights
>>> torch.multinomial(weights, 2)
tensor([1, 2])
>>> torch.multinomial(weights, 4) # ERROR!
RuntimeError: invalid argument 2: invalid multinomial distribution (with replacement=False,
not enough non-negative category to sample) at ../aten/src/TH/generic/THTensorRandom.cpp:320
>>> torch.multinomial(weights, 4, replacement=True)
tensor([ 2, 1, 1, 1])
Szóval létrehozunk egy vektort a [0, 10, 3, 0] listából, (valószínűségként persze normálni kellene, hogy 1 legyen az összeg), a fenti függvénnyel elkérünk először 2 indexet (visszaadja a nem 0 valószínűségűeket), 4-et alapból már nem tud, de ha bekapcsoljuk a visszatevéses mintavételt, akkor már igen. A 10-eshez tartozó 1-es indexet 3 alkalommal, a 3-ashoz tartozó 2-eset meg 1 alkalommal választja, ez kb. reális is. (a GPT esetén 1 token indexe elég)
A tutorialos kódban a softmax már gondoskodik a normalizálásról, az
idx_next = torch.multinomial(probs, num_samples=1)
sor meg a mintavételről.
Lehet, hogy az éles ChatGPT kódban ez kicsit szofisztikáltabb, de a véletlen mintavétel ott is jelen van. (különben tényleg ugyanazt generálná)
Nezz bele a videóiba!
Az elméleti hátter mellett le is kódolja, amit nem baj, ha értesz. Amúgy ezen a területen ez a nyelv elégge elterjedt, szóval nem baj, ha ismered (másra is hasznos).
Amit a csatornájára posztolt legutóbb (ez nincs benne a playlistben), az egy alap bevezető, kb. 1 óra csak, és nem mutat kódot sem. Viszont ebből pont az olyan kérdéseidre nem kapsz választ, hogy hogy választ tokent véletlelszerűen, miután a NN végigszámolta a valószínűségeket.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!