Množiny a relácie: stavebnica, z ktorej sa skladajú definície v AI
Množiny, podmnožiny, operácie, karteziánsky súčin, relácie, ekvivalencia a usporiadanie — s Vennovými diagramami, maticou relácie a tým, na čo je to všetko v umelej inteligencii.
Séria Základy AI Diel 5 z 52
- Mapa umelej inteligencie: čo je čo a ako to do seba zapadá
- Stručná história umelej inteligencie: od Turinga po jazykové modely
- Dáta, model, tréning, inferencia: základné pojmy na jednom príklade
- Ako čítať matematický zápis: symboly, indexy, sumy a kvantifikátory
- Množiny a relácie: stavebnica, z ktorej sa skladajú definície v AI
- Funkcie a zobrazenia: prečo je každý model v AI funkcia
- Logika a dôkazy: pravidlá, podľa ktorých sa v AI uvažuje
- Grafy a stromy: štruktúra, na ktorej stojí hľadanie aj neurónové siete
- Lineárna algebra pre strojové učenie: vektory, matice a prečo AI hlavne násobí
- Derivácie, gradient a reťazové pravidlo: ako model zistí, ktorým smerom sa učiť
- Gradientný zostup: ako sa model učí
- Čo je pravdepodobnosť: od hodu kockou ku Kolmogorovovým axiómam
- Podmienená pravdepodobnosť a Bayesova veta: ako zmeniť odhad, keď sa dozviete niečo nové
- Náhodná premenná a distribučná funkcia: jedna funkcia, ktorá o rozdelení povie všetko
- Funkcia hustoty a pravdepodobnostná funkcia: prečo má spojitá premenná v bode pravdepodobnosť nula
- Stredná hodnota, rozptyl a kovariancia: kde rozdelenie leží, aké je široké a čo s čím súvisí
- Prehľad pravdepodobnostných rozdelení: Bernoulliho, binomické, Poissonovo, rovnomerné, normálne a exponenciálne
- Zákon veľkých čísel a centrálna limitná veta: prečo sa priemery správajú tak predvídateľne
- Štatistika a odhady parametrov: maximálna vierohodnosť, MAP a intervaly spoľahlivosti
- Teória informácie: entropia, krížová entropia a KL divergencia — odkiaľ sa berú stratové funkcie
- Prehľadávanie stavového priestoru: BFS, DFS, UCS a A* s animáciami
- Hry a protivník: minimax, alfa-beta orezávanie a Monte Carlo tree search
- Splňovanie obmedzujúcich podmienok: backtracking, propagácia obmedzení a AC-3 na sudoku a mape krajov
- Logika a znalostné systémy: dopredné a spätné reťazenie, rezolúcia a expertné systémy
- Plánovanie: STRIPS, svet kociek, heuristiky z relaxácie a plánovanie v AI agentoch
- Lokálne hľadanie a simulované žíhanie: obchodný cestujúci cez krajské mestá
- Genetické algoritmy: populácia, kríženie, mutácia a výber na batohu na výlet
- Evolučné stratégie a genetické programovanie: od pravidla jednej pätiny po Keplerov zákon
- Optimalizácia mravčou kolóniou: ako feromónová stopa nájde krátku cestu
- Optimalizácia rojom častíc: zotrvačnosť, vlastná skúsenosť a skúsenosť roja
- Neuroevolúcia: evolúcia váh aj tvaru neurónových sietí a algoritmus NEAT
- Fuzzy množiny a funkcie príslušnosti: ako zapísať „trochu teplo“
- Fuzzy logika a pravdepodobnosť: prečo „trochu teplo“ neznamená „pravdepodobne teplo“
- Fuzzy logika: t-normy, implikácie a pravidlá AK–TAK
- Fuzzy riadenie: Mamdani a Sugeno od ventilátora po kyvadlo na vozíku
- Fuzzy zhlukovanie: algoritmus fuzzy c-means a body medzi zhlukmi
- Neuro-fuzzy systémy (ANFIS): fuzzy pravidlá, ktoré sa učia z dát
- Markovove reťazce: prechodová matica, stacionárne rozdelenie a PageRank
- Skryté Markovove modely: Viterbiho algoritmus a nepoctivé kasíno
- Bayesovské siete: prečo je tráva mokrá a čo z toho vyplýva pre postrekovač
- Kalmanov filter: ako z nepresných meraní odhadnúť, kde auto je a ako rýchlo ide
- Druhy strojového učenia: s učiteľom, bez učiteľa, s čiastočným učiteľom a ďalšie
- Prompty, kontext a RAG: ako modelu dať správne informácie
- Variačné autoenkodéry (VAE): nové obrázky zo spojitého latentného priestoru
- Generatívne adversariálne siete (GAN): falšovateľ proti detektívovi
- Difúzne modely: ako sa z čistého šumu stane obrázok
- Markovove rozhodovacie procesy: stavy, akcie, odmeny a Bellmanove rovnice
- Q-learning a DQN: učenie hodnoty akcií od tabuľky po neurónovú sieť
- Policy gradient a PPO: učenie priamo stratégie
- Ako funguje AI agent: jazykový model v slučke s nástrojmi
- Programovanie s AI agentmi: zadanie, testy a kontrola
- Vyhodnocovanie a bezpečnosť AI systémov: ako merať a ako strážiť
Celá osnova série Hotovo: 52 z 83 tém
- Čo je množina, podmnožina a karteziánsky súčin — a prečo počet podmnožín rastie exponenciálne.
- Čo je relácia, aké má vlastnosti a ako ju nakresliť ako maticu a ako graf.
- Prečo je klasifikácia rozklad na triedy ekvivalencie a model funkcia — zvláštna relácia.
Čo sa hodí vedieť vopred: Ako čítať matematický zápis: symboly, indexy, sumy a kvantifikátory
Množiny a relácie sú stavebnica, z ktorej sa skladá takmer každá definícia v AI. Stavový priestor je množina stavov, prechody medzi nimi sú relácie, trénovacie dáta sú množina dvojíc a klasifikácia rozdeľuje vstupy do tried. Kto rozumie týmto dvom pojmom, číta definície v ďalších dieloch ako bežný text.
Zápis symbolov (∈, ⊆, ∪, ×) sme prebrali v predchádzajúcom diele. Tu pôjdeme pod povrch: čo presne znamenajú, aké majú vlastnosti a na čo sú v umelej inteligencii dobré.
1. Čo je množina
Definícia — množina a prvok
Množina je východiskový pojem, ktorý sa ďalej nerozkladá (podobne ako bod v geometrii): je to súbor navzájom rôznych objektov, ktorým hovoríme jej prvky. Pre množinu A a ľubovoľný objekt x píšeme
x ∈ A — „x je prvkom A“, x ∉ A :⇔ ¬(x ∈ A) — „x nie je prvkom A“.
Od množiny požadujeme dve veci:
- pre každý objekt x platí práve jedno z tvrdení x ∈ A, x ∉ A — o členstve je vždy jednoznačne rozhodnuté;
- množina je úplne určená svojimi prvkami — nič ďalšie (poradie, počet opakovaní) k nej nepatrí; presne to hovorí definícia rovnosti nižšie.
Množina je vrece, do ktorého niečo dáte. Zaujíma nás len to, čo vo vreci je — nie v akom poradí ste to tam dali, ani koľkokrát. Dve guľôčky tej istej farby sú pre množinu jedna farba.
Množinu zapíšeme buď vymenovaním prvkov v zložených zátvorkách — A = {1, 2, 3} alebo {↑, →, ↓, ←} — alebo vlastnosťou, ktorú prvky spĺňajú: {x ∈ ℕ : x je párne}. Pre A = {1, 2, 3} platí 2 ∈ A a 5 ∉ A. Zápis vlastnosťou dokáže opísať aj nekonečné množiny a v AI sa používa takmer vždy: „množina všetkých stavov, z ktorých sa dá dostať do cieľa“.
Definícia — rovnosť množín
Nech A a B sú množiny. A a B sa rovnajú, píšeme A = B, práve vtedy, keď
∀x : (x ∈ A ⇔ x ∈ B).
Množiny sú teda rovnaké práve vtedy, keď majú presne tie isté prvky.
Dve vrecia sú rovnaké, keď je v nich to isté. Preto {1, 2, 2} = {2, 1} = {1, 2}: na poradí ani na opakovaní nezáleží.
Definícia — mohutnosť a prázdna množina
Prázdna množina ∅ je množina, pre ktorú platí
∀x : x ∉ ∅,
t. j. nemá žiadny prvok. Podľa definície rovnosti je len jedna.
Nech A je množina. A je konečná práve vtedy, keď A = ∅, alebo existujú n ∈ ℕ a navzájom rôzne objekty a1, …, an (ai ≠ aj pre i ≠ j) také, že A = {a1, …, an}. Mohutnosť konečnej množiny je číslo
|A| := n, |∅| := 0,
teda počet jej prvkov.
Mohutnosť je odpoveď na otázku „koľko toho je vo vreci“: |{1, 2, 3}| = 3. Prázdna množina je prázdne vrece — stále je to množina, len v nej nič nie je.
2. Podmnožiny a potenčná množina
Z jednej množiny môžeme vyberať menšie. Na to potrebujeme tri pojmy, ktoré na seba nadväzujú: podmnožinu, vlastnú podmnožinu a potenčnú množinu.
Definícia — podmnožina
Nech A a B sú množiny. A je podmnožinou B, píšeme A ⊆ B, práve vtedy, keď
∀x : (x ∈ A ⇒ x ∈ B).
Každý prvok A je teda aj prvkom B. Zápor píšeme A ⊄ B; podľa negácie kvantifikátorov to znamená ∃x : x ∈ A ∧ x ∉ B.
Podmnožina je výber z vreca: vezmete niektoré veci z B a dáte ich do menšieho vreca A. Nič, čo v B nie je, do A pridať nesmiete. Tak {1, 3} ⊆ {1, 2, 3}, ale {1, 4} ⊄ {1, 2, 3}, pretože 4 v pôvodnej množine nie je. Každá množina je podmnožinou samej seba a prázdna množina je podmnožinou každej množiny.
Definícia — vlastná podmnožina
Nech A a B sú množiny. A je vlastnou podmnožinou B, píšeme A ⊂ B, práve vtedy, keď
A ⊆ B ∧ A ≠ B.
V B teda existuje aspoň jeden prvok, ktorý v A nie je. (Niektoré učebnice píšu ⊂ aj pre obyčajnú podmnožinu; v tejto sérii znamená ⊂ vždy vlastnú podmnožinu.)
Vlastná podmnožina je výber, v ktorom aspoň niečo chýba. {1, 3} ⊂ {1, 2, 3}, ale {1, 2, 3} nie je vlastnou podmnožinou samej seba — vzali ste úplne všetko.
Definícia — potenčná množina
Nech A je množina. Potenčná množina množiny A je množina
𝒫(A) := {S : S je množina ∧ S ⊆ A}.
Jej prvkami sú teda práve všetky podmnožiny A (vždy aj ∅ a A samotná).
Veta. Nech A je konečná množina. Potom |𝒫(A)| = 2|A| (dôkaz nižšie).
Potenčná množina je zoznam všetkých výberov, ktoré sa z vreca dajú urobiť — vrátane prázdneho výberu a výberu všetkého. Prečo ich je 2n: pri každom prvku sa rozhodnete, či ho do výberu dáte, alebo nie. To sú dve možnosti pre každý prvok, pre tri prvky 2 · 2 · 2 = 23 = 8, pre desať prvkov už 210 = 1024 (farby podľa vzorca nižšie).
Pre A = {a, b, c} je 𝒫(A) = {∅, {a}, {b}, {c}, {a, b}, {a, c}, {b, c}, {a, b, c}} — spolu 8 podmnožín. S týmto exponenciálnym rastom sa v AI stretnete na každom kroku. Model, ktorý si má vybrať, ktoré z 50 príznakov použije, má na výber 250 — vyše biliardy možností. Preto sa výber príznakov nerobí skúšaním všetkých kombinácií.
|𝒫(A)| = 2|A|
- |𝒫(A)|
- počet všetkých podmnožín — koľko rôznych výberov z A existuje; to chceme spočítať
- 2
- pri každom prvku sú práve dve možnosti, „vo výbere je“ a „vo výbere nie je“ — preto základ 2
- |A|
- počet prvkov = počet nezávislých rozhodnutí; nezávislé voľby sa násobia a n-krát vynásobená dvojka je mocnina
Veta — počet podmnožín (s dôkazom)
Veta. Nech n ∈ ℕ a A = {a1, …, an}, kde prvky a1, …, an sú navzájom rôzne (t. j. |A| = n). Potom |𝒫(A)| = 2n. (Pre A = ∅ je 𝒫(∅) = {∅} a |𝒫(∅)| = 1 = 20.)
Dôkaz. Každej podmnožine S ⊆ A priradíme charakteristický vektor (b1, …, bn) ∈ {0, 1}n, kde bi = 1 práve vtedy, keď ai ∈ S. Rôzne podmnožiny majú rôzne vektory a každý vektor patrí nejakej podmnožine — priradenie je vzájomne jednoznačné. Podmnožín je teda rovnako ako vektorov z núl a jednotiek dĺžky n, a tých je 2 · 2 · … · 2 = 2n. ∎
Z dôkazu rovno vyplýva postup, ako všetky podmnožiny vypísať: prejdeme čísla 0 až 2n − 1 a ich zápis v dvojkovej sústave čítame ako charakteristický vektor.
def vsechny_podmnoziny(prvky): # prvky = [a1, ..., an]
n = len(prvky)
for k in range(2 ** n): # k = 0, 1, ..., 2^n − 1
yield {prvky[i] for i in range(n)
if (k >> i) & 1} # i-tý bit čísla k: je a_i vo výbere?
Príklad — podmnožina číslo 5 z {a, b, c}
5 = 1 · 20 + 0 · 21 + 1 · 22, teda bity (b1, b2, b3) = (1, 0, 1).
Bit 1 pri a a pri c, bit 0 pri b ⇒ podmnožina {a, c}.
Číslo 0 dá ∅, číslo 7 = 1112 dá celé {a, b, c} — a medzi tým je dohromady 8 čísel, teda 8 podmnožín.
3. Operácie s množinami
Definícia — zjednotenie, prienik, rozdiel, doplnok
Nech A a B sú množiny. Definujeme množiny
- zjednotenie A ∪ B := {x : x ∈ A ∨ x ∈ B},
- prienik A ∩ B := {x : x ∈ A ∧ x ∈ B},
- rozdiel A ∖ B := {x : x ∈ A ∧ x ∉ B}.
Prvok teda leží v A ∪ B práve vtedy, keď leží aspoň v jednej z množín, v A ∩ B práve vtedy, keď leží v oboch, a v A ∖ B práve vtedy, keď leží v A, ale nie v B. Množiny s A ∩ B = ∅ sa nazývajú disjunktné.
Nech navyše U je množina (základná množina, „vesmír“) a A ⊆ U. Doplnok množiny A vzhľadom na U je množina
Ac := U ∖ A = {x ∈ U : x ∉ A}.
Veta (De Morganove zákony). Nech U je množina a A, B ⊆ U. Potom (A ∪ B)c = Ac ∩ Bc a (A ∩ B)c = Ac ∪ Bc (doplnky vzhľadom na U).
Zjednotenie je „buď, alebo, alebo oboje“, prienik „oboje naraz“, rozdiel „toto, ale nie tamto“ a doplnok „všetko ostatné“. De Morganov zákon hovorí, že „nie je pravda, že prší alebo sneží“ je to isté ako „neprší a nesneží“.
V praxi AI sa s prienikmi počíta napríklad pri hodnotení modelu. Keď P je množina e-mailov, ktoré model označil ako spam, a S množina e-mailov, ktoré spamom naozaj sú (obe konečné a neprázdne), potom presnosť (precision) je |P ∩ S|/|P| — koľko z označených bol naozaj spam — a úplnosť (recall) |P ∩ S|/|S| — koľko spamu model zachytil.
presnosť = |P ∩ S|/|P| úplnosť = |P ∩ S|/|S|
- |P ∩ S|
- zásahy — e-maily, ktoré model označil a spamom naozaj sú; v čitateli oboch vzorcov, pretože obe miery počítajú len úspechy
- |P|
- všetko, čo model označil; delíme tým, keď sa pýtame „môžem označeniu veriť?“ — falošné poplachy zväčšia menovateľ a presnosť klesne
- |S|
- všetok skutočný spam; delíme tým, keď sa pýtame „nič neušlo?“ — prehliadnutý spam zväčší menovateľ a úplnosť klesne
Veta — princíp inklúzie a exklúzie (s dôkazom)
Veta. Nech A a B sú konečné množiny. Potom |A ∪ B| = |A| + |B| − |A ∩ B|.
Dôkaz. A ∪ B sa skladá z troch disjunktných častí: A ∖ B, A ∩ B a B ∖ A. Pritom |A| = |A ∖ B| + |A ∩ B| a |B| = |B ∖ A| + |A ∩ B|. Súčet |A| + |B| teda obsahuje všetky tri časti, ale prienik dvakrát; jedno odčítanie |A ∩ B| to napraví. ∎
|A ∪ B| = |A| + |B| − |A ∩ B|
- |A ∪ B|
- koľko prvkov je aspoň v jednej z množín — to chceme
- |A|
- započíta všetko z A, vrátane spoločnej časti
- |B|
- započíta všetko z B — a spoločnú časť druhýkrát
- − |A ∩ B|
- oprava: prienik sme sčítali dvakrát, tak ho raz odčítame, aby každý prvok platil raz
Príklad — presnosť, úplnosť a Jaccardov index
Model označil |P| = 50 e-mailov, skutočného spamu je |S| = 40 a v oboch množinách je |P ∩ S| = 36 e-mailov.
Farby podľa vzorca presnosti a úplnosti:
presnosť = 36/50 = 0,72 — 14 označených e-mailov bol falošný poplach,
úplnosť = 36/40 = 0,90 — 4 spamy model prepustil.
Podľa inklúzie a exklúzie (farby podľa jej vzorca) |P ∪ S| = 50 + 40 − 36 = 54. Pomer prieniku a zjednotenia je Jaccardov index (v počítačovom videní IoU, „intersection over union“, ktorým sa hodnotí, ako dobre rámček detektora sedí na objekt): pre konečné množiny P, S, z ktorých aspoň jedna je neprázdna,
J(P, S) := |P ∩ S|/|P ∪ S| = 36/54 = 2/3 ≈ 0,667.
4. Karteziánsky súčin a n-tice
Definícia — usporiadaná dvojica a karteziánsky súčin
Nech a, b sú ľubovoľné objekty. Usporiadaná dvojica (a, b) je objekt s prvou zložkou a a druhou zložkou b, pre ktorý platí: pre všetky objekty a, b, c, d
(a, b) = (c, d) ⇔ a = c ∧ b = d.
Na rozdiel od množiny {a, b} = {b, a} teda na poradí záleží. (Čisto množinovo sa dvojica zavádza ako (a, b) := {{a}, {a, b}} — Kuratowského definícia, ktorá práve túto vlastnosť má.)
Nech A a B sú množiny. Karteziánsky súčin A a B je množina
A × B := {(a, b) : a ∈ A ∧ b ∈ B}.
Ak sú A, B konečné, platí |A × B| = |A| · |B|.
Všeobecne: nech n ∈ ℕ a A1, …, An sú množiny. n-tica (a1, …, an) má vlastnosť (a1, …, an) = (b1, …, bn) ⇔ ∀i ∈ {1, …, n} : ai = bi a
A1 × … × An := {(a1, …, an) : ai ∈ Ai pre i = 1, …, n}, An := A × … × A (n-krát).
Karteziánsky súčin je tabuľka všetkých kombinácií. Tri tričká a dvoje nohavice dávajú 3 · 2 = 6 oblečení. Súradnice bodu v rovine sú dvojice z ℝ × ℝ = ℝ2.
Karteziánsky súčin je v AI všade. Trénovacie dáta s učiteľom sú podmnožina X × Y — dvojice (vstup, správna odpoveď). Fotka 28 × 28 pixelov je bod v ℝ784. A pri úlohe prehľadávania je prechodová funkcia definovaná na S × A — na dvojiciach (stav, akcia).
Príklad — koľko je dvojíc (stav, akcia)
Robot na mriežke 3 × 3 má |S| = 9 stavov (políčok) a |A| = 4 akcie {↑, →, ↓, ←}.
|S × A| = |S| · |A| = 9 · 4 = 36.
Tabuľka, ktorá má pre každú dvojicu (stav, akcia) jedno číslo — napríklad odhad, aká dobrá je tá akcia v tom stave — má teda 36 políčok. Prečo sa počty násobia: ku každému z 9 stavov možno pridať ktorúkoľvek zo 4 akcií, takže dvojice tvoria 9 riadkov po 4.
5. Relácie
Definícia — relácia
Nech A a B sú množiny. Binárna relácia medzi A a B je ľubovoľná množina R, pre ktorú
R ⊆ A × B.
Pre a ∈ A a b ∈ B píšeme a R b :⇔ (a, b) ∈ R a čítame „a je v relácii R s b“.
Relácia medzi A a A, t. j. R ⊆ A × A, sa nazýva relácia na množine A.
Relácia je zoznam dvojíc, ktoré „k sebe patria“. Kto je čí rodič, ktoré mesto má priame spojenie s ktorým, ktorý stav vedie do ktorého. Nič viac — len zoznam dvojíc.
Reláciu na malej množine môžeme nakresliť dvoma spôsobmi. Vezmime reláciu „a delí b“ (b je násobkom a) na množine {1, …, 6}. Ako maticu: v riadku a a stĺpci b je bodka, keď a delí b. A ako orientovaný graf: šípka z a do b.
matica: riadok a, stĺpec b
graf: šípka a → b (bez slučiek a → a)
Relácia má 14 dvojíc. V AI sa stretnete s oboma podobami: matica relácie je to, s čím počíta počítač (matica susednosti grafu, matica podobnosti), graf je to, čo si nakreslí človek. Prechody medzi stavmi v prehľadávaní sú relácia na množine stavov a graf k najbližších susedov zo šírenia štítkov je relácia „je medzi najbližšími“.
Definícia — matica relácie
Nech n ∈ ℕ, A = {a1, …, an} je množina s navzájom rôznymi prvkami a1, …, an a R ⊆ A × A relácia na A. Matica relácie R (vzhľadom na toto očíslovanie prvkov) je tabuľka M ∈ {0, 1}n×n s n riadkami a n stĺpcami s prvkami
Mij := 1, ak ai R aj, Mij := 0 inak, pre i, j = 1, …, n.
Počet dvojíc v relácii je počet jednotiek v matici: ∑i=1n ∑j=1n Mij = |R|.
Veta — koľko je relácií
Veta. Nech A a B sú konečné množiny. Potom medzi A a B existuje presne 2|A| · |B| relácií.
Dôkaz. Relácia je ľubovoľná podmnožina A × B, relácií je teda |𝒫(A × B)| = 2|A × B| = 2|A| · |B|. ∎
Na {1, …, 6} je 6 · 6 = 36 možných dvojíc a 236 = 68 719 476 736 relácií. „Delí“ je jedna z nich — tá so 14 jednotkami v matici.
6. Vlastnosti relácií
Definícia — vlastnosti relácie na množine
Nech A je množina a R ⊆ A × A relácia na A. Relácia R je
- reflexívna práve vtedy, keď ∀a ∈ A : a R a;
- symetrická práve vtedy, keď ∀a, b ∈ A : (a R b ⇒ b R a);
- antisymetrická práve vtedy, keď ∀a, b ∈ A : ((a R b ∧ b R a) ⇒ a = b);
- tranzitívna práve vtedy, keď ∀a, b, c ∈ A : ((a R b ∧ b R c) ⇒ a R c).
Antisymetria nie je opak symetrie: relácia „=“ je symetrická aj antisymetrická zároveň.
Reflexívna: každý je v relácii sám so sebou. Symetrická: funguje to oboma smermi. Antisymetrická: oboma smermi len vtedy, keď ide o to isté. Tranzitívna: keď vedie cesta z a do b a z b do c, vedie aj priamo z a do c.
Pre relácie na množine {1, …, 6} to vyzerá takto — a z kombinácie vlastností sa pozná, o aký druh relácie ide:
| Relácia | Reflexívna | Symetrická | Antisymetrická | Tranzitívna |
|---|---|---|---|---|
| a ≤ b | áno | nie | áno | áno |
| a delí b | áno | nie | áno | áno |
| rovnaký zvyšok po delení 3 | áno | áno | nie | áno |
| |a − b| = 1 („susedia“) | nie | áno | nie | nie |
Príklad — ako sa vlastnosť overí alebo vyvráti
Na matici relácie sa vlastnosti čítajú priamo: reflexívna ⇔ na diagonále sú samé jednotky (Mii = 1), symetrická ⇔ matica je súmerná podľa diagonály (Mij = Mji), antisymetrická ⇔ mimo diagonály nikdy nie sú jednotky na oboch miestach Mij a Mji.
Aby sme vlastnosť vyvrátili, stačí jediný protipríklad. „Susedia“ nie sú tranzitívni: 1 R 2 (|1 − 2| = 1) a 2 R 1, ale 1 R 1 neplatí (|1 − 1| = 0). Nie sú ani reflexívni (1 R 1 neplatí), ani antisymetrickí (1 R 2 a 2 R 1, pritom 1 ≠ 2).
Aby sme ju dokázali, musíme prejsť všetky prípady. „Delí“ je tranzitívna: keď b = ka a c = lb, potom c = (kl)a, takže a delí c.
Definícia — skladanie relácií a tranzitívny uzáver
Nech A je množina a R, Q ⊆ A × A sú relácie na A. Zloženie relácií R a Q je relácia
R ∘ Q := {(a, c) ∈ A × A : ∃b ∈ A : a R b ∧ b Q c}
— „z a sa dá jedným krokom R a potom jedným krokom Q dôjsť do c“. (Pozor, poradie v zápise sa v literatúre líši; pri funkciách znamená g ∘ f „najprv f“, tu R ∘ Q „najprv R“.)
Mocniny relácie R definujeme pre k ∈ ℕ rekurziou R1 := R, Rk+1 := Rk ∘ R. Tranzitívny uzáver relácie R je relácia
R+ := ⋃k=1∞ Rk = R ∪ (R ∘ R) ∪ (R ∘ R ∘ R) ∪ …
Teda a R+ c práve vtedy, keď existujú k ∈ ℕ a prvky b0, …, bk ∈ A s b0 = a, bk = c a bi−1 R bi pre i = 1, …, k — z a vedie do c cesta po šípkach R dĺžky aspoň 1.
Veta. Nech R je relácia na množine A. Potom R+ je najmenšia tranzitívna relácia na A, ktorá obsahuje R: platí R ⊆ R+, R+ je tranzitívna a pre každú tranzitívnu reláciu T na A s R ⊆ T je R+ ⊆ T.
Relácia hovorí, kam sa dá dôjsť jedným krokom, uzáver, kam sa dá dôjsť vôbec. V prehľadávaní je to rozdiel medzi „susedný stav“ a „dosiahnuteľný stav“.
Uzáver sa počíta Warshallovým algoritmom: postupne povolí každý prvok k ako medzizastávku a doplní všetky skratky i → k → j.
def tranzitivni_uzaver(A, M): # M[i][j] = 1, keď i R j
for k in A: # k smie byť medzizastávkou
for i in A:
for j in A:
if M[i][k] and M[k][j]: # cesta i → k → j ...
M[i][j] = 1 # ... dáva dvojicu (i, j)
return M # n^3 krokov pre n prvkov
Pre „susedov“ na {1, …, 6} vyjde uzáver so všetkými 36 dvojicami: po krokoch o jedna sa dá z každého čísla dôjsť do každého, aj späť do seba (1 → 2 → 1). Relácia „delí“ už tranzitívna je, takže sa uzáverom nezmení — zostane 14 dvojíc.
7. Ekvivalencia a rozklad na triedy
Definícia — ekvivalencia a rozklad
Nech A je množina a R ⊆ A × A relácia na A. R je ekvivalencia práve vtedy, keď je reflexívna, symetrická a tranzitívna. Ak je R ekvivalencia a a ∈ A, je trieda ekvivalencie prvku a množina
[a] := {x ∈ A : x R a}.
Nech A je množina. Rozklad množiny A je množina 𝒮 ⊆ 𝒫(A) podmnožín A (jej prvkom hovoríme časti alebo triedy), ktorá spĺňa
- ∀S ∈ 𝒮 : S ≠ ∅ — žiadna časť nie je prázdna;
- ∀S, T ∈ 𝒮 : (S ≠ T ⇒ S ∩ T = ∅) — rôzne časti sú disjunktné;
- ⋃S ∈ 𝒮 S = A, t. j. ∀x ∈ A ∃S ∈ 𝒮 : x ∈ S — časti pokryjú celé A.
Každý prvok A teda leží v práve jednej časti.
Veta. Nech A je množina.
- Ak je R ekvivalencia na A, potom množina tried {[a] : a ∈ A} je rozklad A.
- Ak je 𝒮 rozklad A, potom relácia x ∼ y :⇔ ∃S ∈ 𝒮 : x ∈ S ∧ y ∈ S („patria do rovnakej časti“) je ekvivalencia na A a jej triedy sú práve časti 𝒮.
Ekvivalencia je „je v niečom rovnaký ako“ — rovnaká farba, rovnaký zvyšok, rovnaká trieda. Taká relácia vždy rozdelí množinu na priehradky, ktoré sa neprekrývajú a dohromady pokryjú všetko. Každý prvok je presne v jednej priehradke.
[a] = {x ∈ A : x R a}
- [a]
- trieda prvku a — priehradka, do ktorej a patrí; meno dostane podľa ľubovoľného svojho člena
- x ∈ A
- kandidáti sa berú len z rozkladanej množiny — priehradky delia A, nič iné
- x R a
- podmienka členstva: do priehradky k a patrí práve to, čo je s a „rovnaké“
Veta — triedy sa neprekrývajú (s dôkazom)
Veta. Nech A je množina, R ekvivalencia na A a a, b ∈ A. Potom platí buď [a] = [b], alebo [a] ∩ [b] = ∅. Navyše a ∈ [a] pre každé a ∈ A.
Dôkaz. Predpokladajme, že [a] ∩ [b] ≠ ∅, a ukážeme [a] = [b]. Potom existuje z ∈ [a] ∩ [b], teda z R a a z R b. Zo symetrie a R z a z tranzitivity a R b. Pre každé x ∈ [a] je x R a a a R b, teda x R b a x ∈ [b]; rovnako naopak. Takže [a] = [b]. Reflexivita navyše dáva a ∈ [a] — žiadna trieda nie je prázdna a každý prvok je v nejakej. ∎
Príklad — triedy zvyškov po delení 3
Na A = {0, …, 8} je x R a :⇔ x mod 3 = a mod 3, kde x mod 3 je zvyšok po celočíselnom delení x tromi.
[4] = {x ∈ {0, …, 8} : x mod 3 = 4 mod 3 = 1} = {1, 4, 7} (farby podľa vzorca vyššie).
[1] = [7] = {1, 4, 7} — tá istá trieda pod iným menom. Dohromady vzniknú 3 triedy po 3 prvkoch: {0, 3, 6}, {1, 4, 7}, {2, 5, 8}; 3 + 3 + 3 = 9 = |A|.
Toto je presne to, čo robí klasifikácia: rozdelí množinu všetkých možných vstupov na triedy — spam a nie-spam, pes, mačka a papagáj. A zhlukovanie hľadá rozklad dát bez toho, aby mu niekto povedal, aké triedy sú. Výsledok k-means z dielu o druhoch učenia je rozklad bodov na tri triedy.
8. Usporiadanie
Definícia — čiastočné a lineárne usporiadanie
Nech A je množina a R ⊆ A × A relácia na A. R je čiastočné usporiadanie práve vtedy, keď je reflexívna, antisymetrická a tranzitívna. Dvojici (A, R) potom hovoríme čiastočne usporiadaná množina.
Prvky a, b ∈ A sú porovnateľné práve vtedy, keď a R b ∨ b R a. Čiastočné usporiadanie R je lineárne (úplné) práve vtedy, keď sú porovnateľné všetky dvojice:
∀a, b ∈ A : a R b ∨ b R a.
Usporiadanie hovorí, čo je „pred“ čím. Pri číslach podľa veľkosti sa dá porovnať čokoľvek s čímkoľvek. Pri čiastočnom usporiadaní nie vždy: 4 a 6 sa navzájom nedelia, takže podľa deliteľnosti nevieme, ktoré je „menšie“.
Čiastočné usporiadanie sa kreslí Hasseovým diagramom: menšie prvky dole, väčšie hore a čiara len medzi bezprostrednými susedmi — zvyšok vyplýva z tranzitivity. Tu sú delitele čísla 12 usporiadané deliteľnosťou:
Definícia — ostré usporiadanie a pokrytie
Nech A je množina a ≤ čiastočné usporiadanie na A. Ostré usporiadanie prislúchajúce k ≤ je relácia < na A daná pre a, b ∈ A predpisom
a < b :⇔ a ≤ b ∧ a ≠ b.
Prvok b ∈ A pokrýva prvok a ∈ A, píšeme a ⋖ b, práve vtedy, keď
a < b ∧ ¬∃c ∈ A : (a < c ∧ c < b),
t. j. a je ostro pod b a medzi nimi neleží žiadny ďalší prvok. Hasseov diagram konečnej čiastočne usporiadanej množiny kreslí čiaru (zdola nahor) práve medzi dvojicami a ⋖ b.
a ⋖ b ⇔ a < b ∧ ¬∃c ∈ A : a < c < b
- a ⋖ b
- „medzi a a b nakreslím čiaru“ — to, čo definujeme
- a < b
- ostro menšie: a musí byť pod b, a nie to isté — slučky a ≤ a platia vždy, tak ich nekreslíme
- ¬∃c ∈ A : a < c < b
- nič medzi nimi: keby tam nejaké c bolo, vzťah a < b už vyplýva z tranzitivity cez c a čiara by bola zbytočná
def hasseuv_diagram(A, mensi): # mensi(a, b) znamená a < b
cary = []
for a in A:
for b in A:
if mensi(a, b) and not any(mensi(a, c) and mensi(c, b) for c in A):
cary.append((a, b)) # b pokrýva a
return cary # poschodie prvku = najdlhší reťazec pod ním
Z diagramu je vidieť, že 1 delí všetko a 12 je deliteľné všetkým — ale 4 a 6 ani 2 a 3 porovnať nejde. Ostrých dvojíc a < b je medzi šiestimi deliteľmi 12, diagram ich však kreslí len 7. Zvyšných 5 — 1 < 4, 1 < 6, 1 < 12, 2 < 12 a 3 < 12 — sa dá vyčítať po čiarach, napríklad 1 → 2 → 4. V AI sa usporiadania objavujú všade, kde sa niečo radí alebo plánuje: poradie výsledkov vyhľadávania, priority v okraji algoritmu A*, alebo závislosti medzi krokmi plánu („najprv otvor dvere, potom prejdi“). Graf nadväzností modulov v osnove tejto série je mimochodom tiež čiastočné usporiadanie.
9. Funkcia ako zvláštna relácia
Definícia — funkcia
Nech A a B sú množiny. Funkcia (zobrazenie) z A do B, písané f : A → B, je relácia f ⊆ A × B, pre ktorú platí
∀a ∈ A ∃! b ∈ B : (a, b) ∈ f,
kde ∃! čítame „existuje práve jedno“. Každý prvok a ∈ A je teda v relácii s práve jedným prvkom b ∈ B; ten sa označuje f(a). Podrobnejšie o funkciách v diele Funkcie a zobrazenia.
Funkcia je relácia, ktorá na každú otázku odpovie práve jednou odpoveďou. „Je rodičom“ funkcia nie je — človek môže mať viac detí. „Má matku“ funkcia je — každý má práve jednu.
Príklad — funkcií je medzi reláciami málo
Na A = {1, 2, 3} je 23 · 3 = 29 = 512 relácií. Funkcia musí každému z 3 prvkov vybrať práve jeden z 3 obrazov, nezávisle od ostatných: 3 · 3 · 3 = 33 = 27 funkcií.
V matici relácie to znamená: v každom riadku je práve jedna jednotka. Matica „delí“ funkciou nie je — v riadku 1 má šesť jednotiek.
Tým sa kruh uzatvára: model v strojovom učení je funkcia f : X → Y, teda zvláštna relácia medzi vstupmi a výstupmi. Funkciám a ich vlastnostiam sa venuje ďalší diel osnovy.
10. Zhrnutie
- Množina je súbor prvkov bez poradia a bez opakovania; podmnožín n-prvkovej množiny je 2n.
- Zjednotenie, prienik, rozdiel a doplnok sú „alebo“, „a“, „ale nie“ a „všetko ostatné“; na prienikoch stojí presnosť a úplnosť modelu.
- Karteziánsky súčin robí dvojice — z nich sa skladajú dáta (vstup, odpoveď) aj prechody (stav, akcia).
- Relácia je množina dvojíc. Ekvivalencia rozkladá množinu na triedy (klasifikácia, zhlukovanie), usporiadanie určuje, čo je pred čím.
- Funkcia je relácia s práve jednou odpoveďou — a model je funkcia.
Máte na to iný názor? Napíšte na support@coden-app.com.