Faza 01 · lecția 06
Probabilități și distribuții
Scopul lecției: Tip: Învățare Limbaj: Python Cerințe preliminare: Faza 1, lecțiile 01–04 Durată: ~75 de minute
Versiunea curentă AlexBred.com: primele 100 de lecții ale programului în limba română.
Cuprinsul lecției
- Obiective de învățare
- Problema
- Conceptul
- Evenimente, spații ale rezultatelor posibile și probabilitate
- Probabilitatea condiționată și independența
- Funcții de masă și funcții de densitate ale probabilității
- Distribuții uzuale
- Speranța matematică și varianța
- Distribuții comune și marginale
- De ce distribuția normală apare pretutindeni
- Logaritmii probabilităților
- Softmax ca distribuție de probabilitate
- Eșantionarea
- Construirea soluției
- Pasul 1: Noțiuni de bază despre probabilități
- Pasul 2: PMF și PDF de la zero
- Pasul 3: Speranța matematică și varianța
- Pasul 4: Eșantionarea din distribuții
- Pasul 5: Softmax și logaritmii probabilităților
- Pasul 6: Demonstrarea teoremei limită centrale
- Pasul 7: Vizualizarea
- Utilizarea soluției
- Exerciții
- Termeni-cheie
- Lecturi suplimentare
Probabilitatea este limbajul prin care IA exprimă incertitudinea.
Tip: Învățare Limbaj: Python Cerințe preliminare: Faza 1, lecțiile 01–04 Durată: ~75 de minute
Obiective de învățare
- Implementarea de la zero a funcțiilor PMF și PDF pentru distribuțiile Bernoulli, categorială, Poisson, uniformă și normală
- Calcularea speranței matematice și a varianței și utilizarea teoremei limită centrale pentru a explica de ce distribuțiile gaussiene sunt predominante
- Construirea funcțiilor softmax și log-softmax cu ajutorul tehnicii de stabilitate numerică bazate pe scăderea celui mai mare logit
- Calcularea pierderii prin entropie încrucișată pornind de la logituri (engl. logits) și corelarea acesteia cu log-verosimilitatea negativă
Problema
Un clasificator produce [0.03, 0.91, 0.06]. Un model lingvistic alege următorul cuvânt dintre 50.000 de candidați. Un model de difuzie generează imagini prin eșantionarea din distribuții învățate. Toate acestea sunt exemple ale probabilității puse în practică.
Multe predicții ale modelelor sunt distribuții de probabilitate sau parametri ai unor distribuții, iar numeroase funcții de pierdere compară predicțiile cu o distribuție-țintă. Acest lucru nu este valabil pentru orice model și orice funcție de pierdere, dar probabilitățile rămân indispensabile în învățarea automată (machine learning, ML). Fără ele, nu puteți interpreta multe lucrări, depana modele probabilistice sau înțelege unele cauze pentru care pierderea din timpul antrenării devine NaN.
Notă tehnică a traducerii: Originalul afirmă universal că orice predicție este o distribuție și orice pierdere măsoară distanța dintre două distribuții. Formularea a fost restrânsă la cazurile în care această interpretare este corectă.
Conceptul
Evenimente, spații ale rezultatelor posibile și probabilitate
Spațiul rezultatelor posibile S este mulțimea tuturor rezultatelor care pot apărea. Un eveniment este o submulțime a acestui spațiu. Probabilitatea asociază evenimentelor numere cuprinse între 0 și 1.
Aruncarea unei monede:
S = {H, T}
P(H) = 0.5, P(T) = 0.5
O singură aruncare a zarului:
S = {1, 2, 3, 4, 5, 6}
P(par) = P({2, 4, 6}) = 3/6 = 0.5
Întreaga teorie a probabilităților este definită de trei axiome:
- P(A) >= 0 pentru orice eveniment A
- P(S) = 1 (întotdeauna se produce un rezultat)
- Pentru orice șir numărabil de evenimente incompatibile două câte două, probabilitatea reuniunii lor este suma probabilităților; în particular, P(A sau B) = P(A) + P(B) când A și B sunt incompatibile
Toate celelalte noțiuni, precum teorema lui Bayes, speranțele matematice și distribuțiile, decurg din aceste trei reguli.
Probabilitatea condiționată și independența
P(A|B) este probabilitatea evenimentului A, cu condiția ca B să se fi produs și P(B) > 0.
Notă tehnică a traducerii: Originalul prezintă numai cazul cu două evenimente al axiomei de aditivitate numărabilă și omite condiția P(B) > 0 pentru probabilitatea condiționată.
P(A|B) = P(A și B) / P(B)
Exemplu: pachet de cărți
P(Rege | Figură) = P(Rege și Figură) / P(Figură)
= (4/52) / (12/52)
= 4/12 = 1/3
Două evenimente sunt independente atunci când cunoașterea unuia nu oferă nicio informație despre celălalt:
Independență: P(A|B) = P(A)
Echivalent cu: P(A și B) = P(A) * P(B)
Aruncările unei monede sunt independente. Extragerea cărților fără revenire nu este.
Funcții de masă și funcții de densitate ale probabilității
Variabilele aleatoare discrete au o funcție de masă a probabilității (probability mass function, PMF). Fiecărui rezultat îi corespunde o probabilitate precisă, care poate fi citită direct.
PMF: P(X = k)
Zar echitabil:
P(X = 1) = 1/6
P(X = 2) = 1/6
...
P(X = 6) = 1/6
Suma tuturor probabilităților = 1
Variabilele aleatoare continue au o funcție de densitate a probabilității (probability density function, PDF). Densitatea într-un singur punct nu reprezintă o probabilitate. Probabilitatea se obține prin integrarea densității pe un interval.
PDF: f(x)
P(a <= X <= b) = integrala lui f(x) de la a la b
f(x) poate fi mai mare decât 1 (densitate, nu probabilitate)
integrala lui f(x) de la -inf la +inf = 1
Această distincție este importantă în ML. Ieșirea softmax a unui clasificator parametrizează funcția PMF a unei distribuții categoriale, deoarece clasele sunt discrete. VAE-urile modelează de regulă variabile latente continue prin funcții de densitate.
Distribuții uzuale
Bernoulli: o încercare, două rezultate. Modelează clasificarea binară.
P(X = 1) = p
P(X = 0) = 1 - p
Media = p, Varianța = p(1-p)
Categorială: o încercare, k rezultate. Modelează clasificarea cu mai multe clase, a cărei ieșire este softmax.
P(X = i) = p_i, unde suma valorilor p_i = 1
Exemplu: P(pisică) = 0.7, P(câine) = 0.2, P(pasăre) = 0.1
Uniformă: toate rezultatele sunt la fel de probabile. Este utilizată pentru inițializarea aleatorie.
Discretă: P(X = k) = 1/n pentru k din {1, ..., n}
Continuă: f(x) = 1/(b-a) pentru x din [a, b]
Normală (gaussiană): curba în formă de clopot. Este parametrizată prin medie (mu) și varianță (sigma^2).
f(x) = (1 / sqrt(2*pi*sigma^2)) * exp(-(x - mu)^2 / (2*sigma^2))
Normală standard: mu = 0, sigma = 1
68% dintre date se află în intervalul de 1 sigma
95% în intervalul de 2 sigma
99.7% în intervalul de 3 sigma
Poisson: numărul evenimentelor rare dintr-un interval fix. Modelează ratele de apariție ale evenimentelor.
P(X = k) = (lambda^k * e^(-lambda)) / k!
Media = lambda, Varianța = lambda
Speranța matematică și varianța
Speranța matematică este media ponderată a rezultatelor.
Discretă: E[X] = suma valorilor x_i * P(X = x_i)
Continuă: E[X] = integrala lui x * f(x) dx
Varianța, numită și dispersie, măsoară împrăștierea în jurul mediei.
Var(X) = E[(X - E[X])^2] = E[X^2] - (E[X])^2
Abaterea standard = sqrt(Var(X))
În ML, riscul populațional este speranța matematică a pierderii pe distribuția datelor, iar media empirică a pierderii îl aproximează pe un eșantion. Varianța oferă informații despre stabilitatea estimărilor. O varianță ridicată a gradienților înseamnă o antrenare zgomotoasă.
Distribuții comune și marginale
O distribuție comună P(X, Y) descrie simultan două variabile aleatoare.
Exemplu de funcție PMF comună (X = vreme, Y = umbrelă):
| Y=0 (fără umbrelă) | Y=1 (umbrelă) | P(X) marginală | |
|---|---|---|---|
| X=0 (soare) | 0.40 | 0.10 | P(X=0) = 0.50 |
| X=1 (ploaie) | 0.05 | 0.45 | P(X=1) = 0.50 |
| P(Y) marginală | P(Y=0) = 0.45 | P(Y=1) = 0.55 | 1.00 |
Distribuția marginală se obține prin însumarea după cealaltă variabilă:
P(X = x) = suma lui P(X = x, Y = y) peste toate valorile lui y
Totalurile liniilor și coloanelor din tabelul de mai sus sunt distribuțiile marginale.
De ce distribuția normală apare pretutindeni
În forma sa clasică, teorema limită centrală afirmă că suma sau media standardizată a multor variabile aleatoare independente și identic distribuite, cu varianță finită, converge în distribuție către o normală.
Aruncarea unui zar: distribuție uniformă (plată)
Media a 2 zaruri: distribuție triunghiulară (cu vârf)
Media a 30 de zaruri: curbă în formă de clopot aproape perfectă
Rezultatul necesită ipoteze; de exemplu, nu se aplică distribuției Cauchy, care nu are varianță finită.
Din acest motiv:
- Erorile de măsurare sunt aproximativ normale, fiind produse de numeroase surse independente mici
- Pentru inițializarea ponderilor rețelelor neuronale se folosesc uneori distribuții normale, ca alegere de proiectare, nu ca o consecință automată a teoremei
- Zgomotul gradientului în SGD poate fi aproximativ normal când agregarea gradienților satisface ipoteze adecvate
- Distribuția normală este distribuția cu entropie maximă pentru o medie și o varianță date
Notă tehnică a traducerii: Originalul extinde teorema la orice distribuție inițială și leagă direct inițializarea normală a ponderilor de aceasta. Au fost adăugate ipotezele clasice și a fost separată alegerea inginerească de consecința teoremei.
Logaritmii probabilităților
Probabilitățile exprimate direct produc probleme numerice. Înmulțirea multor probabilități mici conduce în cele din urmă la subdepășire numerică (underflow), adică la rotunjirea valorii la zero.
P(propoziție) = P(cuvânt1) * P(cuvânt2) * ... * P(cuvânt_n)
= 0.01 * 0.003 * 0.02 * ...
-> 0.0 după suficient de mulți termeni (pentru 0.01 repetat în double: aproximativ 162)
Logaritmii probabilităților rezolvă această problemă. Înmulțirile devin adunări.
log P(propoziție) = log P(cuvânt1) + log P(cuvânt2) + ... + log P(cuvânt_n)
= -4.6 + -5.8 + -3.9 + ...
-> număr finit (fără underflow)
Reguli:
- log(a * b) = log(a) + log(b)
- Logaritmii probabilităților sunt întotdeauna <= 0, deoarece 0 < P <= 1
- O valoare mai negativă indică un rezultat mai puțin probabil
- Pierderea prin entropie încrucișată este opusul logaritmului probabilității clasei corecte
Softmax ca distribuție de probabilitate
Rețelele neuronale produc scoruri brute, numite logituri. Softmax le transformă într-o distribuție de probabilitate validă.
softmax(z_i) = exp(z_i) / suma valorilor exp(z_j) pentru toate valorile j
Proprietăți:
- Toate ieșirile se află în intervalul (0, 1)
- Suma tuturor ieșirilor este 1
- Se păstrează ordinea relativă a intrărilor
- exp() amplifică diferențele dintre logituri
Tehnica softmax: scădeți cel mai mare logit înainte de exponențiere pentru a preveni depășirea numerică (overflow).
z = [100, 101, 102]
exp(102) produce overflow în float32, dar rămâne finit în float64
z_shifted = z - max(z) = [-2, -1, 0]
exp(0) = 1 (sigur)
Același rezultat matematic, fără overflow în niciunul dintre aceste formate.
Log-softmax combină softmax cu logaritmul pentru a asigura stabilitatea numerică. PyTorch utilizează intern această funcție pentru pierderea prin entropie încrucișată.
Eșantionarea
Eșantionarea înseamnă extragerea aleatorie a unor valori dintr-o distribuție. În ML:
- Dropout anulează aleatoriu activările unor neuroni
- Augmentarea datelor aplică transformări alese aleatoriu
- Modelele lingvistice eșantionează următorul token din distribuția prezisă
- Modelele de difuzie eșantionează zgomot și îl elimină progresiv
Eșantionarea din distribuții arbitrare necesită tehnici precum eșantionarea prin transformare inversă, eșantionarea prin respingere sau trucul reparametrizării, utilizat în VAE-uri.
gaussian-pdf
Construirea soluției
Pasul 1: Noțiuni de bază despre probabilități
import math
import random
def factorial(n):
result = 1
for i in range(2, n + 1):
result *= i
return result
def combinations(n, k):
return factorial(n) // (factorial(k) * factorial(n - k))
def conditional_probability(p_a_and_b, p_b):
return p_a_and_b / p_b
p_king_given_face = conditional_probability(4/52, 12/52)
print(f"P(King | Face card) = {p_king_given_face:.4f}")
Pasul 2: PMF și PDF de la zero
def bernoulli_pmf(k, p):
return p if k == 1 else (1 - p)
def categorical_pmf(k, probs):
return probs[k]
def poisson_pmf(k, lam):
return (lam ** k) * math.exp(-lam) / factorial(k)
def uniform_pdf(x, a, b):
if a <= x <= b:
return 1.0 / (b - a)
return 0.0
def normal_pdf(x, mu, sigma):
coeff = 1.0 / (sigma * math.sqrt(2 * math.pi))
exponent = -0.5 * ((x - mu) / sigma) ** 2
return coeff * math.exp(exponent)
Notă tehnică a traducerii: Implementarea originală a funcției
bernoulli_pmfîntoarce1 - ppentru oricek != 1, inclusiv pentru valori din afara suportului {0, 1}. Ramura corectă estep if k == 1 else (1 - p if k == 0 else 0.0).
Pasul 3: Speranța matematică și varianța
def expected_value(values, probabilities):
return sum(v * p for v, p in zip(values, probabilities))
def variance(values, probabilities):
mu = expected_value(values, probabilities)
return sum(p * (v - mu) ** 2 for v, p in zip(values, probabilities))
die_values = [1, 2, 3, 4, 5, 6]
die_probs = [1/6] * 6
mu = expected_value(die_values, die_probs)
var = variance(die_values, die_probs)
print(f"Die: E[X] = {mu:.4f}, Var(X) = {var:.4f}, SD = {var**0.5:.4f}")
Pasul 4: Eșantionarea din distribuții
def sample_bernoulli(p, n=1):
return [1 if random.random() < p else 0 for _ in range(n)]
def sample_categorical(probs, n=1):
cumulative = []
total = 0
for p in probs:
total += p
cumulative.append(total)
samples = []
for _ in range(n):
r = random.random()
for i, c in enumerate(cumulative):
if r <= c:
samples.append(i)
break
return samples
def sample_normal_box_muller(mu, sigma, n=1):
samples = []
for _ in range(n):
u1 = random.random()
u2 = random.random()
z = math.sqrt(-2 * math.log(u1)) * math.cos(2 * math.pi * u2)
samples.append(mu + sigma * z)
return samples
Notă tehnică a traducerii:
random.random()poate întoarce 0.0, caz în carelog(u1)nu este definit. O alegere sigură pentru Box–Muller esteu1 = 1.0 - random.random(), care produce valori în intervalul (0, 1].
Pasul 5: Softmax și logaritmii probabilităților
def softmax(logits):
max_logit = max(logits)
shifted = [z - max_logit for z in logits]
exps = [math.exp(z) for z in shifted]
total = sum(exps)
return [e / total for e in exps]
def log_softmax(logits):
max_logit = max(logits)
shifted = [z - max_logit for z in logits]
log_sum_exp = max_logit + math.log(sum(math.exp(z) for z in shifted))
return [z - log_sum_exp for z in logits]
def cross_entropy_loss(logits, target_index):
log_probs = log_softmax(logits)
return -log_probs[target_index]
Pasul 6: Demonstrarea teoremei limită centrale
def demonstrate_clt(dist_fn, n_samples, n_averages):
averages = []
for _ in range(n_averages):
samples = [dist_fn() for _ in range(n_samples)]
averages.append(sum(samples) / len(samples))
return averages
Pasul 7: Vizualizarea
import matplotlib.pyplot as plt
xs = [mu + sigma * (i - 500) / 100 for i in range(1001)]
ys = [normal_pdf(x, mu, sigma) for x, mu, sigma in ...]
plt.plot(xs, ys)
Notă tehnică a traducerii: Blocul original nu poate fi executat ca atare:
mușisigmanu sunt definite, iar...nu furnizează triple iterabile. O variantă minimală defineștemu, sigma = 0.0, 1.0, apoiys = [normal_pdf(x, mu, sigma) for x in xs].
Implementările complete, împreună cu toate vizualizările, se află în code/probability.py.
Utilizarea soluției
Cu NumPy și SciPy, toate operațiile de mai sus pot fi exprimate într-o singură linie:
import numpy as np
from scipy import stats
normal = stats.norm(loc=0, scale=1)
samples = normal.rvs(size=10000)
print(f"Mean: {np.mean(samples):.4f}, Std: {np.std(samples):.4f}")
print(f"P(X < 1.96) = {normal.cdf(1.96):.4f}")
logits = np.array([2.0, 1.0, 0.1])
from scipy.special import softmax, log_softmax
probs = softmax(logits)
log_probs = log_softmax(logits)
print(f"Softmax: {probs}")
print(f"Log-softmax: {log_probs}")
Ați construit aceste funcții de la zero. Acum știți ce fac apelurile bibliotecilor.
Exerciții
-
Implementați eșantionarea prin transformare inversă pentru distribuția exponențială. Verificați rezultatul prin eșantionarea a 10.000 de valori și compararea histogramei cu funcția PDF reală.
-
Construiți un tabel al distribuției comune pentru două zaruri măsluite. Calculați distribuțiile marginale și verificați dacă zarurile sunt independente.
-
Calculați pierderea prin entropie încrucișată pentru un clasificator cu cinci clase, care produce logiturile
[2.0, 0.5, -1.0, 3.0, 0.1], atunci când clasa corectă are indicele 3. Apoi verificați rezultatul cunn.CrossEntropyLossdin PyTorch. -
Scrieți o funcție care primește o listă ce conține logaritmii probabilităților și returnează secvența cea mai probabilă, logaritmul probabilității totale și probabilitatea directă echivalentă. Testați-o cu o propoziție de 50 de cuvinte, fiecare cu probabilitatea 0.01.
Termeni-cheie
| Termen | Formulare uzuală | Ce înseamnă de fapt |
|---|---|---|
| Spațiul rezultatelor posibile | „Toate posibilitățile” | Mulțimea S a tuturor rezultatelor posibile ale unui experiment |
| PMF | „Funcția de probabilitate” | O funcție care oferă probabilitatea exactă a fiecărui rezultat discret, iar suma valorilor sale este 1 |
| „Curba probabilității” | O funcție de densitate pentru variabile continue. Integrați-o pe un interval pentru a obține probabilitatea. | |
| Probabilitate condiționată | „Probabilitatea în anumite condiții” | P(A|B) = P(A și B) / P(B). Reprezintă baza raționamentului bayesian și a teoremei lui Bayes. |
| Independență | „Nu se influențează reciproc” | P(A și B) = P(A) * P(B). Cunoașterea unui eveniment nu vă oferă nicio informație despre celălalt. |
| Speranță matematică | „Media” | Suma tuturor rezultatelor, ponderate cu probabilitățile lor. Funcția de pierdere este o speranță matematică. |
| Varianță | „Gradul de împrăștiere” | Speranța matematică a pătratului abaterii de la medie. Varianță ridicată = estimări zgomotoase și instabile. |
| Distribuție normală | „Curba în formă de clopot” | f(x) = (1/sqrt(2pisigma^2)) * exp(-(x-mu)^2/(2*sigma^2)). Apare frecvent, inclusiv în situații care satisfac ipotezele teoremei limită centrale. |
| Teorema limită centrală | „Mediile devin normale” | Media standardizată a multor variabile independente și identic distribuite, cu varianță finită, converge în distribuție către o normală. |
| Distribuție comună | „Două variabile împreună” | P(X, Y) descrie probabilitatea fiecărei combinații de rezultate ale variabilelor X și Y. |
| Distribuție marginală | „Însumați după cealaltă variabilă” | P(X) = sum_y P(X, Y). Recuperează distribuția unei variabile din distribuția comună. |
| Logaritmul probabilității | „Logaritmul probabilității” | log P(x). Transformă produsele în sume și previne subdepășirea numerică în secvențe lungi. |
| Softmax | „Transformarea scorurilor în probabilități” | softmax(z_i) = exp(z_i) / sum(exp(z_j)). Transformă logituri cu valori reale într-o distribuție de probabilitate validă. |
| Entropie încrucișată | „Funcția de pierdere” | H(p, q) = -sum(p * log(q)) = H(p) + KL(p |
| Logituri | „Ieșirile brute ale modelului” | Scoruri nenormalizate înainte de softmax. Numele provine de la funcția logistică. |
| Eșantionare | „Extragerea unor valori aleatorii” | Generarea valorilor conform unei distribuții de probabilitate. Aceasta este una dintre modalitățile prin care modelele generează ieșiri. |
Lecturi suplimentare
- 3Blue1Brown: But what is the Central Limit Theorem? — demonstrație vizuală a motivului pentru care mediile devin normale
- Stanford CS229 Probability Review — referință concisă ce acoperă toate noțiunile prezentate aici și multe altele
- The Log-Sum-Exp Trick — de ce contează stabilitatea numerică și cum poate fi obținută
Sursă: Probability and Distributions — originalul Navigare: înapoi: 01.05 — Regula lanțului și diferențierea automată · Faza 1 — Fundamente matematice · Catalog complet · în continuare: 01.07 — Teorema lui Bayes.