Çfarë ndodh vërtet brenda AI?
Nga fjalët tuaja te tokenët, vektorët, matricat, attention, probabilitetet dhe përgjigja përfundimtare — eksploro çfarë ndodh brenda një modeli modern gjuhësor.
Si funksionon AI, në mënyrën më të thjeshtë
Harroji fjalët e vështira për një çast. AI bën tri gjëra të thjeshta, vazhdimisht, shumë shpejt: Shikon, Mendon (hamendëson), dhe Thotë. Shiko kutitë duke u rrotulluar.
Fjalët tuaja bëhen tokenë
Rrjetet nervore nuk i përpunojnë fjalët si koncepte njerëzore. Teksti kthehet fillimisht në <b>tokenë</b> — copëza teksti të përfaqësuara numerikisht.
ID-të e tokenëve varen tërësisht nga tokenizuesi/fjalori i modelit specifik — këto ID janë ilustruese, jo universale.
Fjalët e gjata ose të rralla shpesh ndahen në pjesë më të vogla. Për shembull, "unbelievable" mund të bëhet:
Ky është vetëm një shembull ilustrues — ndarja e vërtetë varet nga tokenizuesi konkret që përdoret.
Në detaje
Një model gjuhësor nuk mund t'i lexojë drejtpërdrejt shkronjat ose fjalët. Ai punon me numra, ndaj hapi i parë është ta presim tekstin në copëza të quajtura tokenë dhe ta zëvendësojmë çdo copëz me një numër identifikues (ID) të marrë nga një fjalor i fiksuar.
Një token mund të jetë një fjalë e tërë, një pjesë fjale, një shkronjë e vetme, një shenjë pikësimi, ose një fjalë së bashku me hapësirën para saj. Shumica e modeleve të sotme përdorin tokenizim në nënfjalë (subword), për shembull byte-pair encoding (BPE). Fjalori ndërtohet duke nisur nga njësi të vogla dhe duke bashkuar vazhdimisht çiftet që shfaqen më shpesh në një mostër të madhe teksti. Fjalët e shpeshta zakonisht bëhen një token i vetëm; fjalët e rralla ose të gjata ndahen në disa pjesë. Kështu fjalori mbetet i një madhësie të menaxhueshme (zakonisht dhjetëra mijëra deri në disa qindra mijëra hyrje), por prapë mund të paraqitet çdo tekst, shpesh duke u kthyer te bajtet individuale.
Pse ka rëndësi në praktikë:
- Dritarja e kontekstit dhe, në shumë shërbime, çmimi llogariten në tokenë, jo në fjalë. Në anglisht, një token është mesatarisht pak më pak se një fjalë (rregull i zakonshëm: rreth tre të katërtat e një fjale), por raporti ndryshon. Gjuhët që përfaqësohen më pak në tekstin e trajnimit të tokenizuesit, si shqipja, shpesh kërkojnë më shumë tokenë për fjalë.
- Numrat, kodi dhe shkrimet e pazakonta mund të ndahen në mënyra të papritura. Kjo është një nga arsyet pse modelet mund të vështirësohen në detyra si numërimi i shkronjave në një fjalë.
- ID-të e tokenëve i përkasin një tokenizuesi të vetëm. I njëjti tekst merr ID të ndryshme në modele të ndryshme, dhe një ID nuk ka kuptim vetvetiu. Hapi tjetër e kthen në vektor.
Thjeshtim: ndarjet dhe ID-të në vizualizim janë ilustruese. Tokenizuesit realë kanë fjalorët dhe rregullat e tyre.
Tokenët bëhen vektorë
Çdo ID tokeni kërkohet në një tabelë dhe kthehet në një <b>vektor</b> — një listë numrash. Fjalë me kuptime të ngjashme priren të kenë vektorë të afërt me njëri-tjetrin.
Hapësira e embeddings më poshtë është reduktuar në 2 dimensione për sy njerëzor — modelet reale përdorin qindra ose mijëra dimensione.
Vizualizim i thjeshtuar për qëllime edukative — pozicionet janë ilustruese, jo koordinata reale nga një model prodhimi.
Ky është shembulli klasik i asaj që kapin embeddings: marrëdhëniet mes fjalëve sillen pak si shigjeta që mund t'i mbledhësh dhe zbresësh.
Gjeometri ilustruese në një hapësirë 2D të thjeshtuar — aritmetika reale e embeddings ndodh në qindra dimensione dhe nuk del gjithmonë kaq e pastër.
Në detaje
Pas tokenizimit, çdo ID tokeni përdoret për të gjetur një rresht në një tabelë të madhe të quajtur matrica e embedding-ut. Ai rresht është një vektor, një listë numrash (768 numra në GPT-2 small, mijëra në modele më të mëdha), dhe është përfaqësimi fillestar i token-it te modeli. Vlerat e tabelës janë parametra të mësuar gjatë trajnimit, jo të dizajnuar me dorë.
Trajnimi i shtyn tokenët që përdoren në mënyra të ngjashme drejt vektorësh të ngjashëm, ndaj drejtimet në këtë hapësirë shpesh pasqyrojnë aspekte të kuptimit ose të gramatikës. Prandaj "mace" dhe "qen" priren të jenë më afër njëra-tjetrës sesa me "karburator". Ilustrimi klasik është analogjia king − man + woman ≈ queen, e raportuar për embeddings si word2vec (Mikolov et al., 2013). Merre si ilustrim, jo si ligj: në ato eksperimente fjalët e pyetjes zakonisht përjashtohen nga kandidatët, rezultatet ndryshojnë, dhe embeddings hyrëse të modeleve moderne nuk sillen kaq pastër.
Dy pika të rëndësishme:
- 1. Embedding-u i një token-i është i njëjtë kudo që shfaqet. "Bank" nis nga i njëjti vektor në "river bank" dhe në "bank account". Shtresat e mëvonshme, mbi të gjitha attention, e bëjnë përfaqësimin të varet nga konteksti.
- 2. Hapësirat reale të embedding-ut kanë qindra deri në mijëra dimensione. Pamja 2D është një projeksion për sytë e njeriut dhe humb informacion.
Thjeshtim: pozicionet në vizualizim janë ilustruese, jo koordinata nga një model real.
Modeli është plot me numra të quajtur "pesha"
Çdo lidhje mes neuroneve ka një peshë. Ndrysho peshat më poshtë dhe shiko si ndryshon dalja në kohë reale. Kliko "Ekzekuto Forward Pass" për të parë vlerat duke kaluar nëpër rrjet.
Kjo është formula bazë: <span class="mono">hyrje × peshë = kontribut</span>. Kontributet nga shumë hyrje mblidhen së bashku për të formuar aktivizimin e një neuroni.
Në detaje
Një peshë është një numër që kontrollon sa fort një vlerë ndikon në një tjetër. Në një neuron artificial, çdo hyrje shumëzohet me peshën e saj, rezultatet mblidhen, shtohet një bias (një numër tjetër i mësuar) dhe totali kalon nëpër një funksion aktivizimi:
dalja = f(w₁x₁ + w₂x₂ + … + b)
Një peshë e madhe pozitive do të thotë që hyrja e shtyn rezultatin lart, një peshë negative e shtyn poshtë, dhe një peshë afër zeros do të thotë që hyrja gati nuk ka rëndësi. Një peshë e vetme nuk të tregon pothuajse asgjë. Sjellja e një rrjete del nga miliona ose miliarda pesha që punojnë së bashku.
Peshat janë lloji kryesor i parametrit që mëson një model. Trajnimi i rregullon me shumë hapa të vegjël që parashikimet të përmirësohen. Pas trajnimit, peshat janë të fiksuara: nuk ndryshojnë ndërsa bisedon me modelin.
Peshat nuk janë fakte të ruajtura si fjali. Dija në një rrjetë është e shpërndarë në shumë pesha, dhe nuk ka një tabelë të thjeshtë ku mund të kërkohet një fakt.
Thjeshtim: vizualizimi tregon një shumëzim (hyrje × peshë). Një neuron i plotë mbledh shumë produkte të tilla, shton një bias dhe aplikon një funksion aktivizimi.
Rrjetet nervore shumëzojnë numra
Shumëzimi i matricave lejon transformimin e madh të informacionit brenda rrjetit, në një hap të vetëm matematikor. Kliko një qelizë rezultati për të parë saktësisht cilën rresht dhe kolonë u kombinuan.
Ngjyrë qelibar = rreshti nga A që po përdoret. Ngjyrë çian = kolona nga B që po përdoret. Çdo qelizë rezultati është prodhimi skalar (dot product) i atij rreshti me atë kolonë.
Në detaje
Një shtresë e një rrjete nervore ka shumë neurone, dhe secili ka nevojë për një shumë produktesh. Shumëzimi i matricave i llogarit të gjitha njëherësh.
Nëse A ka m rreshta dhe n kolona, dhe B ka n rreshta dhe p kolona, atëherë C = AB ka m rreshta dhe p kolona. Çdo hyrje C[i][j] është prodhimi pikë (dot product) i rreshtit i të A me kolonën j të B: shumëzohen hyrjet përkatëse dhe rezultatet mblidhen. Madhësitë "e brendshme" (n) duhet të përputhen.
Në një shtresë nervore, vektori hyrës x shumëzohet me një matricë peshash W, shtohet një vektor bias-esh dhe rezultati kalon nëpër një funksion aktivizimi: y = f(xW + b).
Dy arsye pse ka rëndësi:
- Shpejtësia. Procesorët grafikë (GPU) janë ndërtuar të kryejnë numra të mëdhenj të këtyre shumëzimeve paralelisht. Pjesa më e madhe e llogaritjes në një transformer është shumëzim matricash.
- Kuptimi i prodhimit pikë. Një prodhim pikë është më i madh kur dy vektorë shënjojnë në drejtim të ngjashëm. Kjo ide është në zemër të attention-it (seksionet 09 dhe 10).
Vër re që rendi ka rëndësi: në përgjithësi AB nuk është e njëjta gjë me BA.
Thjeshtim: matricat këtu janë shumë të vogla. Në modelet reale kanë mijëra rreshta dhe kolona.
Çfarë bën vërtet një matricë: përkul hapësirën
Çdo matricë 2×2 është një rregull që transformon çdo pikë në një plan — e shtrin, e rrotullon, e prin, ose e kthen përmbys. Lëviz sliderat, ose provo një parazgjedhje, dhe shiko si shtrembërohet krejt rrjeta në kohë reale.
Determinant pozitiv: hapësira ruan orientimin e vet — asgjë s'kthehet përmbys.
Në detaje
Një matricë mund të shihet si një funksion që lëviz çdo pikë të hapësirës. Në dy dimensione, një matricë 2×2 tregon ku shkojnë dy shigjetat bazë: kolona e parë është ku zbret shigjeta (1, 0), dhe kolona e dytë është ku zbret (0, 1). Çdo pikë tjetër i ndjek këto dy.
Transformime të tilla përfshijnë rrotullimin, shkallëzimin, shtrembërimin (shear), pasqyrimin dhe projeksionin. Quhen lineare sepse e mbajnë origjinën të fiksuar, vijat e drejta i mbajnë të drejta dhe vijat e rrjetës paralele dhe me largësi të barabarta. (Kur shtohet një bias, operacioni quhet afin.)
Përcaktori (determinant) tregon me çfarë faktori ndryshojnë sipërfaqet. Një përcaktor negativ do të thotë që orientimi përmbyset. Një përcaktor zero do të thotë që rrafshi është shtypur në një vijë ose në një pikë; informacion është humbur dhe transformimi nuk mund të kthehet mbrapsht.
Pse ka rëndësi: matrica e peshave e një shtrese aplikon një transformim linear mbi vektorin e saj hyrës, në qindra ose mijëra dimensione në vend të dyve. Shtresë pas shtrese, këto transformime e riformojnë hapësirën ku modeli përfaqëson informacionin. Por disa transformime lineare radhazi janë ekuivalente me një të vetëm, prandaj rrjetat kanë nevojë edhe për hapin jolinear që shpjegohet tani.
Funksionet e aktivizimit
Pas çdo shumëzimi, rezultati kalon nëpër një funksion aktivizimi që i jep rrjetit aftësinë të mësojë modele jo-lineare.
Në detaje
Pa funksione aktivizimi, një grumbull shtresash do të shembej në një transformim linear të vetëm, pavarësisht sa shtresa ka. Një funksion aktivizimi aplikon një funksion të thjeshtë jolinear mbi çdo numër, dhe kjo i lejon rrjetat të mësojnë lidhje të lakuara e komplekse.
- ReLU: f(x) = max(0, x). Vlerat negative bëhen zero; ato pozitive kalojnë të pandryshuara. E thjeshtë dhe e shpejtë.
- Sigmoid: f(x) = 1 / (1 + e^(−x)). Shtyp çdo numër në intervalin nga 0 në 1.
- Tanh: shtyp numrat në intervalin nga −1 në 1.
Sigmoid dhe tanh bëhen shumë të sheshta për hyrje shumë të mëdha pozitive ose negative, gjë që mund ta ngadalësojë të mësuarit. ReLU e shmang këtë për hyrje pozitive, por një neuron mund të ngecë duke dhënë zero për gjithçka.
Modelet e mëdha transformer përdorin kryesisht variante më të buta. GPT-2 dhe BERT përdorin GELU, dhe shumë modele të fundit përdorin variante me porta si SwiGLU. Parimi është i njëjtë: një hap jolinear pas çdo hapi linear.
Shiko rrjetin duke llogaritur
Laborator interaktiv feed-forward — forward pass, matrica, trajnim në të dhëna lodër, autopsi neuroni. Të gjitha numrat vijnë nga simulimi real.
Në detaje
Një rrjetë nervore është një grumbull shtresash. Çdo shtresë merr një vektor numrash, e shumëzon me një matricë peshash, shton bias-e dhe aplikon një funksion aktivizimi. Dalja bëhet hyrja e shtresës tjetër. "Feed-forward" do të thotë që informacioni rrjedh në një drejtim, nga hyrja te dalja. Ky proces quhet kalimi përpara (forward pass).
Trajnimi i rregullon peshat që daljet të përputhen me objektivat e dëshiruar në shumë shembuj (seksionet 17 dhe 18). Një rrjetë me të paktën një shtresë të fshehur dhe një aktivizim jolinear mund të përafrojë çdo funksion të vazhdueshëm në një zonë të kufizuar me çdo saktësi të dëshiruar, nëse ka mjaftueshëm neurone (teorema e përafrimit universal). Ajo teoremë thotë që është e mundur, jo që është e lehtë të gjenden peshat e duhura.
Edhe transformerat përmbajnë rrjeta feed-forward: MLP në çdo bllok (seksioni 13). Laboratori më poshtë përdor një rrjetë shumë të vogël për një problem lodër. Modelet reale gjuhësore përdorin të njëjtat gurë ndërtimi në shkallë shumë më të madhe.
Ku duhet të fokusohet modeli?
Zgjidh një fjalë dhe shiko sa "vëmendje" i kushton çdo fjale tjetër në fjali — si vija lidhëse ashtu edhe si heatmap.
Attention nuk do të thotë thjesht "AI-ja e kupton çfarë është e rëndësishme" — është një mekanizëm matematikor që lejon çdo token të përfshijë informacion nga tokenët e tjerë, me shkallë të ndryshme peshe.
Në detaje
Attention i lejon çdo token të mbledhë informacion nga tokenë të tjerë. Për çdo pozicion, modeli llogarit një bashkësi peshash mbi pozicionet që i lejohet t'i shikojë (peshat janë jonegative dhe mblidhen në 1) dhe ndërton një përfaqësim të ri si përzierje e peshuar e informacionit që gjen aty.
Merr fjalinë "The animal didn't cross the street because it was too tired." Për ta përfaqësuar "it" në mënyrë të dobishme, modeli ka nevojë për informacion nga "animal". Attention është mekanizmi i mësuar që e bën këtë të mundur. Te modelet vetëm-dekoder si GPT, çdo token mund të shikojë vetëm veten dhe tokenët para tij (maska shkakësore, causal mask), sepse modeli gjeneron tekst nga e majta në të djathtë.
Një kujdes: peshat e attention-it tregojnë ku një kokë lexon, por nuk janë një shpjegim i plotë pse modeli dha një dalje. Kërkimet kanë treguar se një peshë e lartë vëmendjeje nuk do të thotë gjithmonë që tokeni ishte vendimtar (Jain & Wallace, 2019; Wiegreffe & Pinter, 2019). Gjithashtu, një model real ka shumë koka në shumë shtresa; një hartë nxehtësie tregon vetëm një fetë.
Thjeshtim: fjalia dhe peshat në vizualizim janë ilustruese.
Query, Key, Value
Çdo token gjeneron tre vektorë me role të ndryshme në mekanizmin e attention. Këndi mes vektorit Query dhe Key përcakton sa fort përputhen.
Në detaje
Vektori x i çdo token-i shumëzohet me tri matrica të ndryshme të mësuara për të dhënë tre vektorë:
- Query (pyetja) q = x·W_Q: çfarë kërkon ky pozicion.
- Key (çelësi) k = x·W_K: çfarë ofron ky pozicion për përputhje.
- Value (vlera) v = x·W_V: informacioni që ky pozicion e kalon më tej nëse zgjidhet.
Përputhja mes pozicionit i dhe pozicionit j është prodhimi pikë q_i · k_j. Rezultat më i lartë do të thotë më shumë vëmendje. Prodhimi pikë është i barabartë me |q|·|k|·cos θ, pra varet edhe nga këndi edhe nga gjatësitë e vektorëve. Te rrëshqitësi më sipër gjatësitë mbahen të fiksuara, prandaj aty ka rëndësi vetëm këndi. Në modelet reale rëndësi kanë edhe gjatësitë.
Rezultatet ndahen me √d_k (seksioni 10), kthehen në pesha me softmax dhe përdoren për të përzier vektorët value: dalja në pozicionin i është Σ_j pesha(i, j) · v_j.
Pse tri matrica të veçanta? Sepse ajo që kërkon një token nuk duhet të jetë e njëjtë me atë që ofron ose që kalon më tej. Kjo i jep modelit fleksibilitet.
"Query", "key" dhe "value" janë metafora të dobishme. Në realitet janë thjesht projeksione lineare të mësuara, dhe ajo që kodojnë duhet zbuluar duke analizuar modelin e trajnuar.
Brenda Transformerit: si shumëzohen vërtet Q, K dhe V
Një shpjegim i plotë dhe real i scaled dot-product attention: llogaritja e Q, K dhe V, transpozimi i K, shumëzimi, shkallëzimi, zbatimi i maskës trekëndore shkakësore (causal), dhe softmax — me numra realë, për një shembull të vogël me 4 tokenë.
Numrat këtu janë një shembull i vogël, i krijuar për t'u ndjekur lehtë me dorë — modelet reale përdorin qindra dimensione dhe vlera të tjera, por operacionet (shumëzim, transpozim, shkallëzim, maskim, softmax) janë saktësisht këto.
Kjo maskë trekëndore përdoret në modelet autoregresive (tip decoder) si GPT, që gjenerojnë tekst nga e majta në të djathtë. Modelet tip encoder (si BERT) zakonisht e anashkalojnë këtë maskë dhe lejojnë çdo token të shohë të gjithë sekuencën.
Në detaje
I gjithë operacioni është një formulë:
Attention(Q, K, V) = softmax( Q Kᵀ / √d_k + M ) V
ku M është maska: 0 për pozicionet e lejuara dhe −∞ për ato të ndaluara. Hapat në shembullin hap pas hapi janë:
- 1. Hyrja X: një rresht për çdo token.
- 2. Projeksionet: Q = X·W_Q, K = X·W_K, V = X·W_V.
- 3. Transpozimi i K, që shumëzimi të funksionojë.
- 4. Rezultatet S = Q Kᵀ: një tabelë n × n; hyrja (i, j) tregon sa mirë përputhet pyetja i me çelësin j.
- 5. Shkallëzimi me √d_k. Prodhimet pikë të vektorëve të gjatë priren të rriten me dimensionin d_k (nëse hyrjet janë të pavarura me variancë 1, varianca e prodhimit pikë është d_k). Rezultate shumë të mëdha e shtyjnë softmax drejt një rezultati pothuajse "one-hot" me gradientë shumë të vegjël. Ndarja me √d_k i mban rezultatet në një gamë të mirë.
- 6. Maska shkakësore: −∞ i shtohet pozicioneve të ndaluara (të ardhshme), ndaj ato marrin peshë saktësisht 0 pas softmax.
- 7. Softmax në çdo rresht: çdo rresht bëhet pesha që mblidhen në 1.
- 8. Shumëzimi me V: çdo rresht i daljes është mesatare e peshuar e rreshtave të value.
Format: Q dhe K janë n × d_k, V është n × d_v, tabela e rezultateve është n × n dhe dalja është n × d_v. Për shkak të tabelës n × n, kostoja e attention-it rritet me katrorin e gjatësisë së sekuencës, prandaj kontekstet e gjata janë të shtrenjta.
Thjeshtim: numrat në këtë shembull janë të vegjël dhe të shpikur që të mund t'i ndjekësh me dorë. GPT-2 small, për shembull, përdor d_k = 64 për kokë.
Disa "koka" vëmendjeje njëkohësisht
Modeli ekzekuton disa mekanizma attention paralelisht ("koka"), secili mund të mësojë modele të ndryshme.
Koka të ndryshme mund të mësojnë modele të ndryshme — shembujt këtu janë interpretime të thjeshtuara për vizualizim, jo role fikse të vërtetuara në çdo model.
Në detaje
Në vend të një operacioni të vetëm attention, një shtresë transformer ekzekuton disa paralelisht, të quajtura koka (heads). Çdo kokë ka matricat e veta W_Q, W_K dhe W_V, që i projektojnë vektorët në një madhësi më të vogël (zakonisht d_model pjesëtuar me numrin e kokave; në GPT-2 small, 12 koka × 64 = 768). Daljet e të gjitha kokave bashkohen dhe përzihen nga një matricë dalëse W_O, dhe rezultati i shtohet rrjedhës rezidiale (seksioni 13).
Pse disa koka? Çdo kokë mund të mësojë të shikojë pozicione të ndryshme me një model të ndryshëm. Kërkimet kanë gjetur koka që shikojnë kryesisht tokenin e mëparshëm, koka që e ndihmojnë modelin të kopjojë modele të përsëritura (induction heads), dhe koka që duket se ndjekin marrëdhënie sintaksore. Por jo çdo kokë ka rol të pastër e të lexueshëm nga njeriu, shumë duken të tepërta, dhe ajo që bën një kokë mund të ndryshojë mes modeleve.
Thjeshtim: rolet e treguara në vizualizim janë shembuj për intuitë, jo role të fiksuara të provuara për çdo model.
Informacioni i pozicionit
Në detaje
Attention vetëm nuk ka kuptim të rendit. Nëse tokenët hyrës do të permutoheshin dhe asgjë tjetër nuk do të ndryshonte, daljet thjesht do të permutoheshin në të njëjtën mënyrë. Por rendi mbart kuptim ("the dog bit the man" nuk është "the man bit the dog"), ndaj modelet shtojnë informacion pozicioni.
- Transformer-i origjinal i 2017-ës shtoi sinjale pozicioni sinusoidale të fiksuara te embeddings e tokenëve.
- GPT-2 shtoi embeddings pozicioni të mësuara, një vektor i mësuar për çdo pozicion deri në kufirin e tij prej 1,024.
- Shumë modele të fundit përdorin rotary position embeddings (RoPE), që i rrotullojnë vektorët query dhe key me një kënd që varet nga pozicioni, ndaj rezultatet e attention-it varen nga largësia mes dy tokenëve.
- Ekzistojnë skema të tjera. Zgjedhja ndikon sa mirë i përballon një model tekstet më të gjata se ato që pa gjatë trajnimit.
Te modelet vetëm-dekoder, maska shkakësore mund t'i lejojë modelit të nxjerrë edhe disa informacione pozicioni në mënyrë implicite. Detajet ndryshojnë nga modeli në model, por ideja e përbashkët është që pozicioni duhet furnizuar, sepse attention nuk e jep vetë.
Blloku Transformer
Kliko çdo bllok për të parë shpjegimin e tij. Shumë blloqe si ky vendosen njëri mbi tjetrin.
Në detaje
Një transformer është një grumbull blloqesh identike. Dizajni origjinal i 2017-ës kishte një enkoder dhe një dekoder; modelet bisedore të tipit GPT përdorin vetëm pjesën e dekoderit ("decoder-only"). Çdo bllok ka dy nënshtresa: multi-head self-attention dhe një rrjetë feed-forward (MLP).
- Lidhjet rezidiale. Dalja e çdo nënshtrese i shtohet hyrjes në vend që ta zëvendësojë. Kjo i jep çdo pozicioni një vektor që rritet, rrjedhën rezidiale (residual stream), nga e cila çdo shtresë lexon dhe në të cilën shton. Gjithashtu i bën rrjetat e thella shumë më të lehta për t'u trajnuar.
- Normalizimi i shtresës (layer normalization). E rishkallëzon vektorin e çdo token-i që numrat të qëndrojnë në një gamë të qëndrueshme. Dizajni i 2017-ës e aplikonte pas çdo nënshtrese; GPT-2 dhe shumica e modeleve të mëvonshme e aplikojnë para ("pre-LN"), që zakonisht e bën trajnimin më të qëndrueshëm.
- Nënshtresa e attention-it. Lëviz informacion mes pozicioneve.
- Nënshtresa MLP. Dy shtresa lineare me një aktivizim jolinear mes tyre. Fillimisht e zgjeron vektorin (zakonisht me faktor katër: 768 në 3,072 në GPT-2 small) dhe pastaj e ngushton përsëri. Aplikohet veçmas në çdo pozicion. Kërkimet sugjerojnë që shtresat MLP veprojnë pjesërisht si depo asociacionesh të mësuara (Geva et al., 2021), edhe pse ky është një fushë aktive kërkimi.
Pas bllokut të fundit, një normalizim përfundimtar dhe matrica e unembedding-ut e kthejnë vektorin e pozicionit të fundit në një rezultat për çdo token të fjalorit (seksioni 14). GPT-2 small ka 12 blloqe dhe rreth 124 milionë parametra; modelet më të mëdha kanë më shumë blloqe dhe vektorë më të gjerë.
Thjeshtim: diagrami tregon pjesët kryesore. Modelet reale ndryshojnë në detaje si lloji i normalizimit, funksioni i aktivizimit dhe skema e pozicionit.
Si zgjedh AI fjalën tjetër?
Modeli prodhon një numër ("logit") për çdo token të mundshëm, pastaj <b>softmax</b> i kthen në probabilitete.
Temperaturë e ulët → shpërndarje më e përqendruar. Temperaturë e lartë → shpërndarje më e shpërndarë/e rastësishme. Kjo nuk e bën AI-në "më të zgjuar" apo "më budallaqe" — thjesht ndryshon rastësinë e zgjedhjes.
Në detaje
Vektori përfundimtar në pozicionin e fundit shumëzohet me matricën e unembedding-ut. Rezultati është një vlerë, e quajtur logit, për çdo token të fjalorit (50,257 në GPT-2). Logit-et mund të jenë çdo numër real; nuk janë probabilitete.
Softmax i kthen në probabilitete: p_i = e^(z_i) / Σ_j e^(z_j). Të gjitha rezultatet janë pozitive dhe mblidhen në 1. Vetëm diferencat mes logit-eve kanë rëndësi: shtimi i të njëjtit numër te të gjitha nuk ndryshon asgjë.
Temperatura (T) i pjesëton logit-et para softmax. Me T nën 1 shpërndarja bëhet më e mprehtë, ndaj tokenët e mundshëm bëhen edhe më të mundshëm. Me T mbi 1 bëhet më e sheshtë dhe tokenët më pak të mundshëm kanë më shumë shans. Kur T i afrohet 0, zgjedhja i afrohet marrjes gjithmonë të token-it më të lartë, dhe implementimet e trajtojnë T = 0 si "zgjidh gjithmonë më të lartin". Temperatura nuk ndryshon çfarë di modeli; ndryshon si mostron nga shpërndarja e vet. Temperaturat shumë të larta shpesh japin tekst të pakuptimtë.
Strategji të zakonshme mostrimi:
- Greedy: merr gjithmonë tokenin më të mundshëm.
- Top-k: mbaj vetëm k tokenët më të mundshëm, rinormalizo dhe mostro.
- Top-p (nucleus sampling): mbaj bashkësinë më të vogël tokenësh probabilitetet e të cilëve mblidhen në të paktën p, dhe mostro prej saj (Holtzman et al., 2019).
Produktet bisedore zakonisht i zgjedhin këto cilësime për ty.
Simulatori i gjenerimit të tokenit tjetër
Modeli gjeneron një token në herë, e shton në kontekst, dhe përsërit. Kliko një token kandidat për ta shtuar.
Në detaje
Një model gjuhësor prodhon tekst një token në herë:
- 1. Merr tekstin aktual (kontekstin) dhe kaloje nëpër model.
- 2. Merr një shpërndarje probabiliteti mbi tokenin tjetër.
- 3. Zgjidh një token (me mostrim ose duke marrë atë më të mundshmin).
- 4. Shtoje te teksti dhe përsërit.
Gjenerimi ndalon kur modeli prodhon një token të veçantë fund-sekuence ose arrin një kufi gjatësie. Meqë çdo token varet nga ata para tij, zgjedhjet e hershme ndikojnë në gjithçka që vijon, dhe meqë zgjedhja zakonisht përfshin rastësi, i njëjti prompt mund të japë përgjigje të ndryshme.
Kjo është edhe arsyeja pse përgjigjet më të gjata zgjasin më shumë: çdo token i ri kërkon një kalim tjetër nëpër model. Në praktikë, implementimet ruajnë çelësat dhe vlerat e tokenëve të mëparshëm (KV cache, shih rrugën Advanced) që të mos rillogariten çdo herë.
Thjeshtim: simulatori të lejon të zgjedhësh nga disa tokenë kandidatë. Një model real llogarit një probabilitet për çdo token të fjalorit.
Sa mund të "mbajë mend" modeli njëherësh
Modeli mund të shohë vetëm një numër të kufizuar tokenësh njëkohësisht — dritarja e kontekstit.
Dritaret e kontekstit matëhen në tokenë dhe ndryshojnë sipas modelit.
Në detaje
Dritarja e kontekstit është numri maksimal i tokenëve që modeli mund t'i marrë parasysh njëherësh. Përfshin promptin tënd, bisedën e mëparshme dhe përgjigjen e vetë modelit deri tani. GPT-2 kishte dritare 1,024 tokenësh; modelet moderne shkojnë nga mijëra deri në qindra mijëra tokenë ose më shumë, sipas modelit.
Kufijtë ekzistojnë sepse attention krahason çdo token me të gjithë ata të mëparshëm, ndaj kostoja e tij rritet me katrorin e gjatësisë në një implementim të drejtpërdrejtë, dhe sepse çelësat e vlerat e ruajtura zënë memorie.
Çfarë ndodh kur teksti nuk futet varet nga aplikacioni. Mund të refuzojë, të presë mesazhet më të vjetra ose t'i përmbledhë. Disa arkitektura përdorin sliding-window attention, ku çdo token mund të shohë vetëm një dritare të fundit.
Dy pika të tjera:
- Të futesh në dritare nuk garanton që modeli e përdor gjithë informacionin njësoj mirë. Studime kanë gjetur që modelet mund të jenë më të dobëta në përdorimin e informacionit të vendosur në mes të një konteksti të gjatë (Liu et al., 2023).
- Modeli nuk i mban mend bisedat e mëparshme, të veçanta, përveç nëse aplikacioni ruan informacion dhe e furnizon sërish në kontekst.
Nga vijnë të gjitha këto pesha?
Peshat mësohen duke krahasuar parashikimet e modelit me shënjestrën reale dhe duke i rregulluar gradualisht.
Në detaje
Qëllimi kryesor i para-trajnimit (pretraining) të një modeli gjuhësor është të parashikojë tokenin tjetër. Modeli sheh një sasi të madhe teksti. Për çdo pozicion, merr tekstin para tij dhe jep një probabilitet për tokenin e vërtetë tjetër. Humbja (loss) (cross-entropy) është −log p(tokeni i vërtetë): e vogël kur modeli i dha tokenit të saktë probabilitet të lartë, e madhe kur i dha probabilitet të ulët.
Humbja mesatarizohet mbi shumë pozicione. Backpropagation llogarit si do të ndryshonte humbja nëse çdo parametër ndryshonte pak (gradienti), dhe një optimizues e ndryshon çdo parametër pak në drejtimin që e ul humbjen. Kjo përsëritet për një numër shumë të madh hapash.
Vër re që asgjë në këtë objektiv nuk thotë "ji i vërtetë" ose "ji i dobishëm". Një model bazë i para-trajnuar është një vazhdues teksti. Asistentë si ChatGPT kalojnë faza të tjera (seksioni 20).
Trajnimi është pjesa e shtrenjtë. Inference, përdorimi i një modeli të trajnuar, vetëm ekzekuton kalimin përpara me pesha të fiksuara. Modeli nuk mëson nga biseda jote duke ndryshuar peshat e veta.
Thjeshtim: vizualizimi përditëson një peshë të vetme për ta bërë idenë të qartë. Trajnimi real përditëson miliarda parametra njëkohësisht.
Peizazhi i humbjes (loss landscape)
Trajnimi lëviz "topin" drejt zonave me loss më të ulët, hap pas hapi.
Në detaje
Imagjino humbjen si funksion të të gjithë parametrave, një "peizazh". Gradienti tregon drejtimin në të cilin humbja rritet më shpejt. Për ta ulur humbjen, parametrat bëjnë një hap të vogël në drejtim të kundërt:
vlera e re = vlera e vjetër − shkalla e të mësuarit × gradienti
Shkalla e të mësuarit (learning rate) përcakton madhësinë e hapit: shumë e vogël dhe trajnimi është i ngadaltë; shumë e madhe dhe kalon caqet ose bëhet i paqëndrueshëm.
Trajnimi real përdor grupe të vogla shembujsh të zgjedhur rastësisht (mini-batches, prandaj zbritje gradienti "stokastike"), zakonisht me optimizues adaptivë si Adam ose AdamW dhe një orar që e ndryshon shkallën e të mësuarit me kohën.
Topi që rrokulliset nga një kodër është një metaforë me kufij. Peizazhet reale të humbjes kanë miliarda dimensione dhe nuk duken si një tas i vetëm i lëmuar.
Çfarë do të thotë 7B ose 70B parametra?
Një parametër ≈ një vlerë numerike e mësuar (peshë). Sa më shumë parametra, aq më shumë numra ka modeli për të përshtatur — por kjo nuk garanton "inteligjencë" më të lartë.
Numri i parametrave nuk barazohet drejtpërdrejt me inteligjencën — arkitektura, të dhënat, mënyra e trajnimit dhe optimizimi luajnë gjithashtu rol vendimtar.
Në detaje
Parametrat janë të gjithë numrat që mëson një model: matricat e embedding-ut, matricat e attention-it, peshat e MLP, bias-et dhe shkallët e normalizimit. "7B" do të thotë rreth 7 miliardë prej tyre.
Madhësia ka një kosto konkrete. Nëse çdo parametër ruhet në 16 bit (2 bajt), 7 miliardë parametra zënë rreth 14 GB dhe 70 miliardë zënë rreth 140 GB, vetëm për peshat. Teknika si kuantizimi (rruga Advanced) e ulin këtë.
Më shumë parametra zakonisht i japin modelit më shumë kapacitet, por cilësia varet edhe nga sasia dhe cilësia e të dhënave të trajnimit, sasia e llogaritjes së trajnimit, arkitektura dhe fazat e mëvonshme të trajnimit. Studimet e ligjeve të shkallëzimit (scaling laws) (Kaplan et al., 2020; Hoffmann et al., 2022) gjetën që humbja bie në mënyrë të parashikueshme kur rriten parametrat, të dhënat dhe llogaritja, dhe që për një buxhet të caktuar madhësia e modelit dhe sasia e të dhënave duhet të rriten së bashku. Disa modele të mëdha më të hershme u trajnuan me shumë pak të dhëna për madhësinë e tyre.
Te modelet mixture-of-experts (rruga Advanced), numri total i parametrave është më i madh se ai i përdorur për çdo token.
Nga parashikuesi i tekstit te asistenti
Në detaje
Një model që është vetëm para-trajnuar e vazhdon tekstin. Nuk i ndjek udhëzimet në mënyrë të besueshme. Asistentët zakonisht ndërtohen në disa faza:
- 1. Para-trajnimi: parashikimi i tokenit tjetër mbi një koleksion shumë të madh teksti. Kjo i jep modelit njohuri të gjera për gjuhën dhe botën, dhe gjithashtu gabimet e paragjykimet e tij.
- 2. Fine-tuning i mbikëqyrur: trajnim i mëtejshëm me shembuj përgjigjesh të mira ndaj udhëzimeve ose pyetjeve, zakonisht të shkruara ose të përzgjedhura nga njerëz.
- 3. Trajnimi me preferenca: njerëz (ose modele të udhëhequra nga rregulla) krahasojnë përgjigje alternative, dhe modeli trajnohet të prodhojë llojin e preferuar. Një qasje është të mësuarit përforcues nga reagimi njerëzor (RLHF): nga krahasimet mësohet një model shpërblimi dhe pastaj përdoret për ta përmirësuar asistentin (Ouyang et al., 2022). Direct preference optimization (DPO) është një alternativë më e thjeshtë (Rafailov et al., 2023).
- 4. Vënia në përdorim: aplikacioni shton udhëzime (system prompts), masa sigurie dhe nganjëherë mjete si kërkimi.
Metodat e sakta ndryshojnë mes kompanive dhe nuk publikohen gjithmonë. Këto faza ndryshojnë sjelljen, si toni, dobia dhe refuzimet, por nuk e kthejnë modelin në një bazë të dhënash faktesh të verifikuara (seksioni 21).
Përse AI mund të jetë i sigurt dhe gabim njëkohësisht?
Modeli gjeneron sekuenca të mundshme statistikisht, jo kërkime në një bazë të dhënash të garantuar të vërtetash.
Modeli mund të prodhojë një përgjigje me besim të lartë edhe kur nuk ekziston përgjigje e saktë — për shkak të kufizimeve në të dhënat e trajnimit, pyetjeve të paqarta, gjenerimit statistikor, dhe mungesës së verifikimit të garantuar faktik. Kjo nuk është thjesht "AI nuk e di".
Në detaje
Një halucinacion është një dalje e rrjedhshme që është e gabuar ose e pambështetur nga faktet. Modeli u trajnua të prodhojë vazhdime të besueshme, dhe asgjë në procesin bazë nuk i kontrollon pretendimet me realitetin. Kur informacioni është i rrallë, mungon ose është i paqartë, modeli prapë mund të prodhojë një hamendje që tingëllon e sigurt. Kjo nuk është gënjeshtër: modeli nuk ka qëllim të mashtrojë.
Fazat e mëvonshme të trajnimit mund t'i zvogëlojnë halucinacionet, por nuk i heqin. Një ton i sigurt nuk është provë që diçka është e saktë. Referencat dhe citimet e shpikura janë një shembull i njohur.
Çfarë ndihmon:
- Kërko burime dhe kontrolloji, sepse një model mund të shpikë burime.
- Vendos tekstin përkatës në prompt dhe kërkoji modelit të përgjigjet prej tij.
- Përdor sisteme që marrin informacion nga dokumente (retrieval-augmented generation, RAG) ose përdorin mjete si kërkimi dhe makinat llogaritëse.
- Verifiko faktet e rëndësishme, sidomos në mjekësi, drejtësi, financa dhe siguri.
Shkruaj prompte që funksionojnë vërtet
Modelet reagojnë ndaj <b>udhëzimeve + kontekstit + formatit</b>. Krahaso një prompt të vagët me një të strukturuar — i njëjti detyrë, rezultate shumë të ndryshme.
❌ Prompt i vagët
✓ Prompt i strukturuar
Rezultatet janë rubrikë mësimore (qartësi, kontekst, format) — jo dalje nga model live.
Në detaje
Një prompt është teksti që i jep modelit. Modeli nuk ndryshon kur shkruan një prompt; prompti vetëm ndryshon kontekstin nga i cili punon. Prompt-et që zakonisht funksionojnë mirë përmbajnë:
- Një detyrë të qartë: çfarë saktësisht do të bëhet.
- Kontekst përkatës: sfondin që modeli nuk mund ta dijë.
- Formatin dhe gjatësinë e dëshiruar: listë, tabelë, numër fjalësh, gjuhë, ton.
- Shembuj kur stili ka rëndësi (njihet si few-shot prompting; Brown et al., 2020).
- Audiencën: për kë është përgjigjja.
Për detyra që kërkojnë disa hapa, kërkesa për të treguar hapat mund të ndihmojë, edhe pse kjo ndryshon mes modeleve. Nëse rezultati i parë nuk është i duhuri, përmirëso promptin dhe provo sërish. Nuk ka formulim magjik universal, dhe rezultatet mund të ndryshojnë mes modeleve dhe mes ekzekutimeve.
Shënim: pikët në këtë laborator janë një rubrikë mësimi (qartësia, konteksti, formati). Nuk janë dalja e një modeli live.
Shiko si udhëton një token i vetëm nëpër gjithë modelin
Zgjidh një fjalë më poshtë, pastaj kalo hap pas hapi çfarë i ndodh saktësisht asaj — nga teksti bruto deri te kontributi i saj në përgjigjen përfundimtare.
Ky udhëtim përdor numra të thjeshtuar, ilustrues, që udhëtimi të jetë i lehtë për t'u ndjekur — sekuenca e operacioneve (tokenizim, embedding, attention, transformim, parashikim) pasqyron modelet reale.
Në detaje
Ky shembull hap pas hapi ndjek një token të vetëm nga hyrja te dalja:
- 1. Teksti ndahet në tokenë, dhe secili bëhet një ID.
- 2. ID kërkohet në tabelën e embedding-ut për të marrë një vektor.
- 3. Shtohet informacioni i pozicionit.
- 4. Vektori kalon nëpër blloqe. Në çdo bllok, attention mbledh informacion nga pozicionet e mëparshme dhe MLP e përpunon, me rezultatet të shtuara te rrjedha rezidiale.
- 5. Aplikohet një normalizim përfundimtar, dhe unembedding e kthen vektorin e fundit në logit-e.
- 6. Softmax jep probabilitete, dhe zgjidhet një token.
- 7. Ai token shtohet dhe procesi përsëritet për tjetrin.
Thjeshtim: numrat janë ilustrues. Rendi i operacioneve përputhet me modelet reale.
Rrjeti i Gjallë — shiko AI-në duke menduar, live, ndërsa shkruan
Një rrjet me 68 neurone që reagon ndaj çdo shkronje që shtyp, në kohë reale. Çdo shkronjë që shkruan dërgon një impuls drite në rrjet — shikoje si valëzon, kaskadon dhe zbehet nëpër shtresa, pikërisht si kalimi i sinjalit që mësove më sipër.
Ky është një simulim i vogël, real, feed-forward (pesha të rastësishme fikse, "shtypje" tip sigmoid, zbehje me kohën) i drejtuar live nga shtypjet e tua në tastierë — ndërtuar thjesht për t'u parë. Nuk është një model gjuhësor dhe nuk "kupton" çfarë shkruan; është një dritare drejt llojit të kalimit të sinjalit që bën çdo rrjet nervor real, e bërë e dukshme.
Në detaje
Ky është një simulim i vogël i një rrjete feed-forward me pesha të rastësishme të fiksuara. Çdo tast që shtyp dërgon një puls në rrjetë, dhe e sheh sinjalin të përhapet nëpër shtresa dhe të venitet. Tregon si duket kalimi i sinjalit nëpër njësi të lidhura.
Nuk është model gjuhësor. Nuk e kupton tekstin tënd dhe nuk mëson. Llogaritjet reale në një model gjuhësor (seksionet 08 deri 15) janë më të strukturuara, dhe nuk janë ato që tregohen këtu.
E gjithë udhëtimja, nga fillimi në fund
Kliko çdo hap për të shkuar te shpjegimi përkatës.
Në detaje
Ja e gjithë rruga me radhë:
- 1. Teksti ndahet në tokenë.
- 2. Çdo token bëhet një ID dhe pastaj një vektor embedding-u.
- 3. Shtohet informacioni i pozicionit.
- 4. Vektorët kalojnë nëpër shumë blloqe: attention lëviz informacion mes pozicioneve, dhe MLP përpunon çdo pozicion, të gjitha me lidhje rezidiale dhe normalizim.
- 5. Vektori i fundit kthehet në logit-e, një për çdo token të fjalorit.
- 6. Softmax (me temperaturë dhe një metodë mostrimi) jep një token.
- 7. Tokeni shtohet, dhe hapat 4 deri 6 përsëriten derisa përgjigjja mbaron.
Të gjithë numrat e përfshirë, peshat, u mësuan më herët gjatë trajnimit, kryesisht duke parashikuar tokenin tjetër, dhe pastaj u formuan nga fine-tuning dhe trajnimi me preferenca që modeli të bëhet një asistent i dobishëm.
Rrëshqit nëpër historinë e AI
Nga viti 1950 deri në 2024 — momentet kryesore, nga neuroni i parë i mësueshëm, përmes ChatGPT dhe më pas.
Në detaje
- 1943: McCulloch dhe Pitts publikojnë një model matematik të neuronit.
- 1958: Frank Rosenblatt prezanton perceptronin.
- 1986: Rumelhart, Hinton dhe Williams popullarizojnë backpropagation për trajnimin e rrjetave shumështresore.
- 1997: Hochreiter dhe Schmidhuber prezantojnë LSTM, një rrjetë për sekuenca.
- 2012: AlexNet fiton garën ImageNet me diferencë të madhe, një përparim për të mësuarit e thellë në vizion.
- 2013: word2vec popullarizon embeddings e fjalëve të mësuara.
- 2017: Transformer prezantohet në "Attention Is All You Need".
- 2018: GPT (OpenAI) dhe BERT (Google) tregojnë fuqinë e para-trajnimit të transformerave.
- 2019: GPT-2 tregon gjenerim të fortë teksti nga një model më i madh.
- 2020: GPT-3 (175 miliardë parametra) tregon që një model i madh mund të mësojë detyra nga shembuj në prompt.
- 2022: InstructGPT (mars) tregon si reagimi njerëzor i bën modelet të ndjekin udhëzimet; ChatGPT lëshohet publikisht (30 nëntor).
- 2023: GPT-4 lëshohet (mars), dhe modele me pesha të hapura si LLaMA përhapen gjerësisht.
Ushtro fjalorin bazë
Kthe kartën, testo veten dhe vazhdo. Seria e kartave të njohura ruhet në shfletues.
Një pyetje e shpejtë. Çdo ditë.
Ndërto zakon — përgjigju pyetjes së sotme dhe mbaj serinë.
Mblidh badge ndërsa zotëron AI
Eksploro seksionet, mbaje serinë ditore dhe kalo quiz-in për t'i hapur të gjitha. Arritjet ruhen vetëm në këtë shfletues.
Konstelacioni i progresit
Çdo pikë është një seksion. Yjet portokalli = i vizituar.
E kuptove tani?
Një kontroll i shkurtër me 6 pyetje që mbulon çështjet kryesore. Rezultati yt më i mirë ruhet në këtë shfletues.
Burimet dhe lexim shtesë
- Vaswani et al., "Attention Is All You Need" (2017).
- Mikolov, Yih & Zweig, "Linguistic Regularities in Continuous Space Word Representations" (2013); Mikolov et al., "Efficient Estimation of Word Representations in Vector Space" (2013).
- Radford et al., "Language Models are Unsupervised Multitask Learners" (GPT-2, 2019).
- Brown et al., "Language Models are Few-Shot Learners" (2020).
- Ouyang et al., "Training language models to follow instructions with human feedback" (2022).
- Rafailov et al., "Direct Preference Optimization" (2023).
- Sennrich, Haddow & Birch, "Neural Machine Translation of Rare Words with Subword Units" (BPE, 2016).
- Hendrycks & Gimpel, "Gaussian Error Linear Units (GELUs)" (2016); Shazeer, "GLU Variants Improve Transformer" (2020).
- Su et al., "RoFormer: Enhanced Transformer with Rotary Position Embedding" (2021).
- Xiong et al., "On Layer Normalization in the Transformer Architecture" (2020).
- Geva et al., "Transformer Feed-Forward Layers Are Key-Value Memories" (2021).
- Jain & Wallace, "Attention is not Explanation" (2019); Wiegreffe & Pinter, "Attention is not not Explanation" (2019).
- Holtzman et al., "The Curious Case of Neural Text Degeneration" (2019).
- Liu et al., "Lost in the Middle: How Language Models Use Long Contexts" (2023).
- Kaplan et al., "Scaling Laws for Neural Language Models" (2020); Hoffmann et al., "Training Compute-Optimal Large Language Models" (2022).
- Rumelhart, Hinton & Williams, "Learning representations by back-propagating errors" (1986).
- Kingma & Ba, "Adam: A Method for Stochastic Optimization" (2014).
Një motor, shumë laboratorë
Shiritat e probabilitetit, heatmap-et e attention, rrjedhat pipeline dhe format e tensorëve — blloqe të përbashkëta pas mësimeve interaktive që ke parë.
Softmax → shirita probabiliteti
Tërhiq temperaturën: pikat e mprehta = model i sigurt; shirita të sheshtë = shumë tokenë të mundshëm.
Matrica e attention
Çdo rresht është një token që “shikon” të tjerët. Qeliza më e ndritshme = lidhje më e fortë (demo, i njëjti matematik si lab mekanistik).
Format e tensorëve
Kur dokumentet thonë [batch, seq, dim], kanë parasysh lista numrash — jo kuti magjike.
Pipeline mini
Përmbledhja e plotë në fund përdor të njëjtin renderer — kliko një hap.
