Matematické základy informatiky
Matice v akcii
Čo majú spoločné Instagram, Google a ChatGPT
[ 2 0 ]
[ 0 3 ]
Tri appky, ktoré používate každý deň
01
Instagram
Jeden ťuk a fotka je rozmazaná, ostrejšia alebo v sépii.
02
Google
Z miliárd stránok vyberie tú najdôležitejšiu ako prvú.
03
ChatGPT
Odpíše vetu, ktorá znie, akoby ju napísal človek.
Pod kapotou všetkých troch je to isté: násobenie matíc.
Čo potrebujete vedieť: jednu operáciu
Matica je tabuľka čísel.
Matica × vektor: každý riadok matice vynásobíme s vektorom a sčítame.
To je celé. Všetko ďalšie v tejto prezentácii je táto operácia, len s väčšími číslami.
[ 2 0 ] [ 1 ] [ 2 ]
[ 0 3 ] × [ 1 ] = [ 3 ]
2·1 + 0·1 = 2
0·1 + 3·1 = 3
Bod (1, 1) sa natiahol na (2, 3). Matica bod presunula.
01
Instagram filtre
Ako malá matica zmení celú fotku
Fotka je matica čísel
20
60
90
60
20
60
160
220
160
60
90
220
250
220
90
60
160
220
160
60
20
60
90
60
20
Každý pixel je jedno číslo: 0 = čierna, 255 = biela.
Farebná fotka sú tri také matice: červená, zelená, modrá.
36 000 000
čísel v jednej 12 Mpx fotke z mobilu
(3 matice × 4 000 × 3 000)
Rozmazanie: každý pixel nahradíme priemerom okolia
Filter (jadro) 3×3
[ 1 1 1 ]
[ 1 1 1 ] ÷ 9
[ 1 1 1 ]
Prejde po fotke okienko po okienku
Pred: ostrá hrana medzi tmavou a svetlou
10
10
10
200
200
Po: hrana sa zmäkčila do prechodu
10
10
73
137
200
(10 + 10 + 200) × 3 ÷ 9 = 73
Filter v pohybe: okienko 3×3 prejde celú fotku
Iná matica, iný filter
Rozmazanie
[ 1 1 1 ]
[ 1 1 1 ] ÷ 9
[ 1 1 1 ]
Priemer okolia. Portrétový režim takto rozmaže pozadie.
Zaostrenie
[ 0 -1 0 ]
[ -1 5 -1 ]
[ 0 -1 0 ]
Zosilní stred a odčíta susedov, rozdiely vyniknú.
Hrany
[ -1 0 1 ]
[ -2 0 2 ]
[ -1 0 1 ]
Rovná plocha dá 0, hrana dá veľké číslo.
Rovnaký trik používajú neurónové siete na rozpoznávanie tvárí, len si matice filtrov nájdu samy.
Tie isté matice na skutočnej fotke
Originál
bez filtra
Rozmazanie
priemer okolia 9×9
Zaostrenie
jadro s 5 v strede
Hrany
vodorovné aj zvislé spolu
Výpočet v Pythone (NumPy + SciPy), fotka z ukážkových dát knižnice scikit-image.
Sépia filter je jedno násobenie matice
Farba pixela je vektor (R, G, B). Filter je matica 3×3, ktorou vynásobíme každý pixel.
[ 0.39 0.77 0.19 ]
[ 0.35 0.69 0.17 ]
[ 0.27 0.53 0.13 ]
×
(100, 150, 200)
modrá obloha
=
(192, 171, 134)
starodávna hnedá
02
Google PageRank
Ktorá z miliárd stránok je najdôležitejšia?
Nápad z roku 1998
Stránka je dôležitá, ak na ňu odkazujú dôležité stránky.
Larry Page a Sergey Brin, doktorandi na Stanforde. Definícia je kruhová: dôležitosť závisí od dôležitosti. Rozmotá ju matica.
Mini-internet: 4 stránky a ich odkazy
A
B
C
D
z A
z B
z C
z D
do A
0
0
1
0
do B
½
0
0
0
do C
½
1
0
1
do D
0
0
0
0
Matica M: stĺpec hovorí, kam používateľ z danej stránky klikne. Z A vedú dva odkazy, preto ½ a ½.
Násobíme M stále dookola, kým sa čísla neustália
krok
A
B
C
D
štart
25 %
25 %
25 %
25 %
1
25 %
14 %
57 %
4 %
2
52 %
14 %
30 %
4 %
3
29 %
26 %
41 %
4 %
100
37 %
20 %
39 %
4 %
r ← M · r
C vyhráva: odkazujú naň tri stránky.
A je hneď za ním, hoci má jediný odkaz. Ten však prichádza od najdôležitejšej stránky.
Používatelia klikajú na odkazy na webe
Celý PageRank v siedmich riadkoch Pythonu
import numpy as np
M = np.array([[0, 0, 1, 0], [.5, 0, 0, 0],
[.5, 1, 0, 1], [0, 0, 0, 0]])
r = np.ones(4) / 4
for _ in range(100):
r = 0.85 * M @ r + 0.15 / 4
print(r.round(2)) # [0.37 0.2 0.39 0.04]
Skutočný Google robí to isté, len matica má miliardy riadkov a stĺpcov.
03
ChatGPT
Stroj na hádanie ďalšieho slova
ChatGPT robí stále jedno: háda ďalšie slovo
„Mačka pije ___“
vodu
50 %
mlieko
43 %
mačka
3 %
pije
3 %
spí
1 %
Vyberie slovo, pripíše ho a háda znova. Celá odpoveď sú stovky takých krokov.
Krok 1: každé slovo je vektor čísel
slovo
vektor
mačka
[ 0.8, 0.1, -0.3, 0.6 ]
pes
[ 0.7, 0.2, -0.2, 0.5 ]
auto
[-0.6, 0.9, 0.4, -0.1 ]
Podobné slová majú podobné vektory. Mačka a pes sú blízko, auto ďaleko.
Vektory všetkých slov spolu tvoria jednu veľkú maticu. Model sa ich naučil sám z textov.
Ilustračné čísla. V GPT-3 má každý vektor 12 288 čísel.
Krok 2: slová sa pozerajú na seba (attention)
Aby model vedel, kto pije, slovo „pije“ zistí, ktoré predchádzajúce slová sú preň dôležité.
Mačka
62 %
ktorú
4 %
som
3 %
včera
5 %
videl
8 %
na
2 %
dvore,
6 %
pije
10 %
softmax(Q · Kᵀ) · V
Celé je to tri násobenia matíc a jedno prepočítanie na percentá.
Ilustračné váhy pozornosti pre slovo „pije“.
Krok 3: vektor × matica = šanca pre každé slovo
Vektor vety
„Mačka pije“
[ 0.9 ]
[ -0.2 ]
[ 1.1 ]
×
mačka
pije
mlieko
vodu
spí
W
0.1
0.2
1.2
1.0
-0.5
0.3
0.1
-0.4
0.2
0.6
-0.6
-0.5
0.9
1.3
-0.8
skóre
-0.63
-0.39
2.15
2.29
-1.45
šanca
3 %
3 %
43 %
50 %
1 %
Skóre „vodu“: 0.9 · 1.0 + (−0.2) · 0.2 + 1.1 · 1.3 = 2.29. Funkcia softmax potom zmení skóre na percentá.
Celé dokopy: veta vzniká slovo po slove
Ilustračné pravdepodobnosti. Každý krok = desiatky násobení obrovských matíc.
Teraz to isté, len poriadne veľké
175 mld.
čísel v maticiach modelu (parametrov)
12 288
čísel vo vektore každého slova
~350 mld.
násobení a sčítaní na jedno vygenerované slovo
Preto AI beží na grafických kartách: GPU násobí matice paralelne.
Údaje pre GPT-3 (OpenAI, 2020). Novšie modely sú väčšie, presné čísla firmy nezverejňujú.
Tri appky, jedna operácia
Appka
Čo je matica
Čo sa počíta
Instagram
fotka a filter 3×3
filter prejde po pixeloch
Google
odkazy medzi stránkami
M · r stále dookola
ChatGPT
naučené váhy modelu
vektor × matica → ďalšie slovo
Vo všetkých troch: riadok krát vektor, sčítať. Presne to, čo sa naučíte tu.
Keď budete násobiť matice na papieri, robíte to isté, čo GPU robí miliardykrát za sekundu.
Rozdiel je len v rýchlosti. Princíp už budete poznať.