Unul dintre cele mai frecvent întâlnite moduri de gândire în învățarea automată este punctul de vedere al verosimilității maxime. Acesta este conceptul că, atunci când lucrăm cu un model probabilistic cu parametri necunoscuți, parametrii care fac ca datele să aibă cea mai mare probabilitate sunt cei mai probabili.
Acesta are o interpretare Bayesiană la care poate fi util să ne gândim. Să presupunem că avem un model cu parametrii $\boldsymbol{\theta}$ și o colecție de exemple de date $X$. Pentru concretețe, ne putem imagina că $\boldsymbol{\theta}$ este o singură valoare reprezentând probabilitatea ca o monedă să cadă pe cap (heads) atunci când este aruncată, și $X$ este o secvență de aruncări de monedă independente. Vom privi acest exemplu în profunzime mai târziu.
Dacă vrem să găsim cea mai probabilă valoare pentru parametrii modelului nostru, asta înseamnă că vrem să găsim
$$\mathop{\mathrm{argmax}} P(\boldsymbol{\theta}\mid X).$$
Prin regula lui Bayes, acesta este același lucru cu
$$ \mathop{\mathrm{argmax}} \frac{P(X \mid \boldsymbol{\theta})P(\boldsymbol{\theta})}{P(X)}. $$
Expresia $P(X)$, o probabilitate agnostică față de parametri de generare a datelor, nu depinde de $\boldsymbol{\theta}$ deloc, și deci poate fi eliminată fără a schimba cea mai bună alegere a lui $\boldsymbol{\theta}$. Similar, putem acum postula că nu avem nicio presupunere anterioară (prior) despre care set de parametri sunt mai buni decât oricare alții, deci putem declara că $P(\boldsymbol{\theta})$ nu depinde de theta nici el! Aceasta, de exemplu, are sens în exemplul nostru cu aruncarea monedei unde probabilitatea ca ea să cadă pe cap ar putea fi orice valoare în $[0,1]$ fără nicio credință anterioară că este corectă sau nu (adesea referit ca un prior neinformativ). Astfel vedem că aplicarea regulii lui Bayes arată că cea mai bună alegere a noastră pentru $\boldsymbol{\theta}$ este estimarea verosimilității maxime pentru $\boldsymbol{\theta}$:
$$ \hat{\boldsymbol{\theta}} = \mathop{\mathrm{argmax}} _ {\boldsymbol{\theta}} P(X \mid \boldsymbol{\theta}). $$
Ca o chestiune de terminologie comună, probabilitatea datelor dați fiind parametrii ($P(X \mid \boldsymbol{\theta})$) este referită ca verosimilitate.
Să vedem cum funcționează asta într-un exemplu concret. Să presupunem că avem un singur parametru $\theta$ reprezentând probabilitatea ca o aruncare a monedei să fie cap (heads). Atunci probabilitatea de a obține pajură (tails) este $1-\theta$, și deci dacă datele noastre observate $X$ sunt o secvență cu $n_H$ capete și $n_T$ pajuri, putem folosi faptul că probabilitățile independente se înmulțesc pentru a vedea că
$$ P(X \mid \theta) = \theta^{n_H}(1-\theta)^{n_T}. $$
Dacă aruncăm $13$ monede și obținem secvența „HHHTHTTHHHHHT”, care are $n_H = 9$ și $n_T = 4$, vedem că aceasta este
$$ P(X \mid \theta) = \theta^9(1-\theta)^4. $$
Un lucru drăguț despre acest exemplu va fi că știm răspunsul de la început. Într-adevăr, dacă am spune verbal, „Am aruncat 13 monede, și 9 au căzut cap, care este cea mai bună ghicire a noastră pentru probabilitatea ca moneda să cadă cap?”, toată lumea ar ghici corect $9/13$. Ceea ce ne va da această metodă a verosimilității maxime este o cale de a obține acel număr din principii prime într-un mod care se va generaliza la situații mult mai complexe.
Pentru exemplul nostru, graficul lui $P(X \mid \theta)$ este după cum urmează:
#@tab pytorch %matplotlib inline from d2l import torch as d2l import torch theta = torch.arange(0, 1, 0.001) p = theta**9 * (1 - theta)**4. d2l.plot(theta, p, 'theta', 'likelihood')
Aceasta are valoarea maximă undeva lângă $9/13 \approx 0.7\ldots$ așteptat. Pentru a vedea dacă este exact acolo, ne putem întoarce la calcul. Observați că la maxim, gradientul funcției este plat. Astfel, am putea găsi estimarea verosimilității maxime :eqref:eq_max_like găsind valorile lui $\theta$ unde derivata este zero, și găsindu-l pe cel care dă cea mai mare probabilitate. Calculăm:
$$ \begin{aligned} 0 & = \frac{d}{d\theta} P(X \mid \theta) \\ & = \frac{d}{d\theta} \theta^9(1-\theta)^4 \\ & = 9\theta^8(1-\theta)^4 - 4\theta^9(1-\theta)^3 \\ & = \theta^8(1-\theta)^3(9-13\theta). \end{aligned} $$
Aceasta are trei soluții: $0$, $1$ și $9/13$. Primele două sunt clar minime, nu maxime deoarece atribuie probabilitatea $0$ secvenței noastre. Valoarea finală nu atribuie probabilitate zero secvenței noastre, și astfel trebuie să fie estimarea verosimilității maxime $\hat \theta = 9/13$.
Exemplul anterior este drăguț, dar ce se întâmplă dacă avem miliarde de parametri și exemple de date?
Mai întâi, observați că dacă facem presupunerea că toate exemplele de date sunt independente, nu mai putem considera practic verosimilitatea însăși deoarece este un produs de multe probabilități. Într-adevăr, fiecare probabilitate este în $[0,1]$, să zicem tipic de valoare aproximativ $1/2$, iar produsul $(1/2)^{1000000000}$ este mult sub precizia mașinii. Nu putem lucra cu asta direct.
Totuși, reamintiți-vă că logaritmul transformă produsele în sume, caz în care
$$ \log((1/2)^{1000000000}) = 1000000000\cdot\log(1/2) \approx -301029995.6\ldots $$
Acest număr se potrivește perfect chiar și într-un float de precizie simplă pe $32$-biți. Astfel, ar trebui să considerăm log-verosimilitatea, care este
$$ \log(P(X \mid \boldsymbol{\theta})). $$
Deoarece funcția $x \mapsto \log(x)$ este crescătoare, maximizarea verosimilității este același lucru cu maximizarea log-verosimilității. Într-adevăr în vom vedea acest raționament aplicat când lucrăm cu exemplul specific al clasificatorului Bayes naiv.
Adesea lucrăm cu funcții de pierdere, unde dorim să minimizăm pierderea. Putem transforma verosimilitatea maximă în minimizarea unei pierderi luând $-\log(P(X \mid \boldsymbol{\theta}))$, care este log-verosimilitatea negativă.
Pentru a ilustra acest lucru, considerați problema aruncării monedei de dinainte, și pretindeți că nu cunoaștem soluția în formă închisă. Putem calcula că
$$ -\log(P(X \mid \boldsymbol{\theta})) = -\log(\theta^{n_H}(1-\theta)^{n_T}) = -(n_H\log(\theta) + n_T\log(1-\theta)). $$
Acest lucru poate fi scris în cod, și optimizat liber chiar și pentru miliarde de aruncări de monedă.
#@tab pytorch # Set up our data n_H = 8675309 n_T = 256245 # Initialize our paramteres theta = torch.tensor(0.5, requires_grad=True) # Perform gradient descent lr = 1e-9 for iter in range(100): loss = -(n_H * torch.log(theta) + n_T * torch.log(1 - theta)) loss.backward() with torch.no_grad(): theta -= lr * theta.grad theta.grad.zero_() # Check output theta, n_H / (n_H + n_T)
Conveniența numerică nu este singurul motiv pentru care oamenilor le place să folosească log-verosimilități negative. Există câteva alte motive pentru care este preferabilă.
Al doilea motiv pentru care considerăm log-verosimilitatea este aplicarea simplificată a regulilor de calcul. Așa cum am discutat mai sus, datorită presupunerilor de independență, majoritatea probabilităților pe care le întâlnim în învățarea automată sunt produse de probabilități individuale.
$$ P(X\mid\boldsymbol{\theta}) = p(x_1\mid\boldsymbol{\theta})\cdot p(x_2\mid\boldsymbol{\theta})\cdots p(x_n\mid\boldsymbol{\theta}). $$
Asta înseamnă că dacă aplicăm direct regula produsului pentru a calcula o derivată obținem
$$ \begin{aligned} \frac{\partial}{\partial \boldsymbol{\theta}} P(X\mid\boldsymbol{\theta}) & = \left(\frac{\partial}{\partial \boldsymbol{\theta}}P(x_1\mid\boldsymbol{\theta})\right)\cdot P(x_2\mid\boldsymbol{\theta})\cdots P(x_n\mid\boldsymbol{\theta}) \\ & \quad + P(x_1\mid\boldsymbol{\theta})\cdot \left(\frac{\partial}{\partial \boldsymbol{\theta}}P(x_2\mid\boldsymbol{\theta})\right)\cdots P(x_n\mid\boldsymbol{\theta}) \\ & \quad \quad \quad \quad \quad \quad \quad \quad \quad \quad \vdots \\ & \quad + P(x_1\mid\boldsymbol{\theta})\cdot P(x_2\mid\boldsymbol{\theta}) \cdots \left(\frac{\partial}{\partial \boldsymbol{\theta}}P(x_n\mid\boldsymbol{\theta})\right). \end{aligned} $$
Acest lucru necesită $n(n-1)$ înmulțiri, împreună cu $(n-1)$ adunări, deci este proporțional cu timpul pătratic în intrări! Suficientă inteligență în gruparea termenilor va reduce acest lucru la timp liniar, dar necesită ceva gândire. Pentru log-verosimilitatea negativă avem în schimb
$$ -\log\left(P(X\mid\boldsymbol{\theta})\right) = -\log(P(x_1\mid\boldsymbol{\theta})) - \log(P(x_2\mid\boldsymbol{\theta})) \cdots - \log(P(x_n\mid\boldsymbol{\theta})), $$
care apoi dă
$$ - \frac{\partial}{\partial \boldsymbol{\theta}} \log\left(P(X\mid\boldsymbol{\theta})\right) = \frac{1}{P(x_1\mid\boldsymbol{\theta})}\left(\frac{\partial}{\partial \boldsymbol{\theta}}P(x_1\mid\boldsymbol{\theta})\right) + \cdots + \frac{1}{P(x_n\mid\boldsymbol{\theta})}\left(\frac{\partial}{\partial \boldsymbol{\theta}}P(x_n\mid\boldsymbol{\theta})\right). $$
Acest lucru necesită doar $n$ împărțiri și $n-1$ sume, și astfel este timp liniar în intrări.
Al treilea și ultimul motiv pentru care considerăm log-verosimilitatea negativă este relația cu teoria informației, pe care o vom discuta în detaliu în . Aceasta este o teorie matematică riguroasă care oferă o cale de a măsura gradul de informație sau aleatorism într-o variabilă aleatoare. Obiectul cheie de studiu în acel domeniu este entropia care este
$$ H(p) = -\sum_{i} p_i \log_2(p_i), $$
care măsoară aleatorismul unei surse. Observați că aceasta nu este nimic mai mult decât probabilitatea medie $-\log$, și astfel dacă luăm log-verosimilitatea noastră negativă și împărțim la numărul de exemple de date, obținem o rudă a entropiei cunoscută sub numele de entropie încrucișată. Doar această interpretare teoretică ar fi suficient de convingătoare pentru a motiva raportarea log-verosimilității negative medii peste setul de date ca un mod de a măsura performanța modelului.
Tot ce am făcut până acum presupune că lucrăm cu variabile aleatoare discrete, dar ce se întâmplă dacă vrem să lucrăm cu unele continue?
Rezumatul scurt este că nimic nu se schimbă, cu excepția faptului că înlocuim toate instanțele probabilității cu densitatea de probabilitate. Reamintindu-ne că scriem densități cu literă mică $p$, asta înseamnă că de exemplu acum spunem
$$ -\log\left(p(X\mid\boldsymbol{\theta})\right) = -\log(p(x_1\mid\boldsymbol{\theta})) - \log(p(x_2\mid\boldsymbol{\theta})) \cdots - \log(p(x_n\mid\boldsymbol{\theta})) = -\sum_i \log(p(x_i \mid \theta)). $$
Întrebarea devine, „De ce este OK asta?” Până la urmă, motivul pentru care am introdus densități a fost pentru că probabilitățile de a obține rezultate specifice ele însele erau zero, și astfel nu este probabilitatea de a genera datele noastre pentru orice set de parametri zero?
Într-adevăr, acesta este cazul, și înțelegerea motivului pentru care putem trece la densități este un exercițiu în urmărirea a ceea ce se întâmplă cu epsilonii.
Să ne redefinim mai întâi scopul. Să presupunem că pentru variabile aleatoare continue nu mai vrem să calculăm probabilitatea de a obține exact valoarea corectă, ci în schimb potrivirea într-un anumit interval $\epsilon$. Pentru simplitate, presupunem că datele noastre sunt observații repetate $x_1, \ldots, x_N$ de variabile aleatoare distribuite identic $X_1, \ldots, X_N$. Așa cum am văzut anterior, acest lucru poate fi scris ca
$$ \begin{aligned} &P(X_1 \in [x_1, x_1+\epsilon], X_2 \in [x_2, x_2+\epsilon], \ldots, X_N \in [x_N, x_N+\epsilon]\mid\boldsymbol{\theta}) \\ \approx &\epsilon^Np(x_1\mid\boldsymbol{\theta})\cdot p(x_2\mid\boldsymbol{\theta}) \cdots p(x_n\mid\boldsymbol{\theta}). \end{aligned} $$
Astfel, dacă luăm logaritmi negativi din aceasta obținem
$$ \begin{aligned} &-\log(P(X_1 \in [x_1, x_1+\epsilon], X_2 \in [x_2, x_2+\epsilon], \ldots, X_N \in [x_N, x_N+\epsilon]\mid\boldsymbol{\theta})) \\ \approx & -N\log(\epsilon) - \sum_{i} \log(p(x_i\mid\boldsymbol{\theta})). \end{aligned} $$
Dacă examinăm această expresie, singurul loc în care apare $\epsilon$ este în constanta aditivă $-N\log(\epsilon)$. Aceasta nu depinde de parametrii $\boldsymbol{\theta}$ deloc, deci alegerea optimă a lui $\boldsymbol{\theta}$ nu depinde de alegerea noastră de $\epsilon$! Dacă cerem patru cifre sau patru sute, cea mai bună alegere a lui $\boldsymbol{\theta}$ rămâne aceeași, astfel putem renunța liber la epsilon pentru a vedea că ceea ce vrem să optimizăm este
$$ - \sum_{i} \log(p(x_i\mid\boldsymbol{\theta})). $$
Astfel, vedem că punctul de vedere al verosimilității maxime poate opera cu variabile aleatoare continue la fel de ușor ca și cu cele discrete înlocuind probabilitățile cu densități de probabilitate.