o introducere blândă în limbajele de programare probabilistice

programarea probabilistică devine una dintre cele mai active domenii de dezvoltare în spațiul de învățare automată. Care sunt limbile de top despre care ar trebui să știm?

Isus Rodriguez

urmați

August 7 · 2020 * 7 min citit

Sursa: https://devclass.com/2019/07/01/mit-presents-gen-to-get-probabilistic-programming-for-ai-up-and-running/

recent am început un nou buletin informativ axat pe educația AI. TheSequence este un buletin informativ nu-BS( adică fără hype, fără știri etc.), care durează 5 minute pentru a citi. Scopul este de a vă ține la curent cu proiecte de învățare automată, lucrări de cercetare și concepte. Vă rugăm să încercați abonându-vă mai jos:

gândirea probabilistică este un instrument incredibil de valoros pentru luarea deciziilor. De la economiști la jucători de poker, oamenii care pot gândi în termeni de probabilități tind să ia decizii mai bune atunci când se confruntă cu situații incerte. Domeniile probabilităților și teoriei jocurilor au fost stabilite de secole și decenii, dar nu se confruntă cu o renaștere odată cu evoluția rapidă a inteligenței artificiale(AI). Putem încorpora probabilități ca un cetățean de primă clasă de cod software? Bine ați venit în lumea limbajelor de programare probabilistice(ppl)

utilizarea statisticilor pentru a depăși incertitudinea este unul dintre pilonii unui segment mare al pieței de învățare automată. Raționamentul Probabilistic a fost mult timp considerat unul dintre fundamentele algoritmilor de inferență și este reprezentat de toate cadrele și platformele majore de învățare automată. Recent, raționamentul probabilistic a văzut adoptarea majoră în cadrul giganților tehnologici precum Uber, Facebook sau Microsoft, ajutând la împingerea agendei de cercetare și tehnologie în spațiu. Mai exact, ppl-urile au devenit unul dintre cele mai active domenii de dezvoltare în învățarea automată, ceea ce a dus la lansarea unor tehnologii noi și interesante.

conceptual, limbajele de programare probabilistică(ppl) sunt limbaje specifice domeniului care descriu modele probabilistice și mecanica pentru a efectua inferența în aceste modele. Magia PPL se bazează pe combinarea capacităților de inferență ale metodelor probabilistice cu puterea de reprezentare a limbajelor de programare.

într-un program PPL, ipotezele sunt codificate cu distribuții anterioare asupra variabilelor modelului. În timpul execuției, un program PPL va lansa o procedură de inferență pentru a calcula automat distribuțiile posterioare ale parametrilor modelului pe baza datelor observate. Cu alte cuvinte, inferența ajustează distribuția anterioară folosind datele observate pentru a oferi un mod mai precis. Rezultatul unui program PPL este o distribuție de probabilitate, care permite programatorului să vizualizeze și să manipuleze în mod explicit incertitudinea asociată cu un rezultat.

pentru a ilustra simplitatea ppl-urilor, să folosim una dintre cele mai faimoase probleme ale statisticilor moderne: o aruncare părtinitoare a monedei. Ideea acestei probleme este de a calcula părtinirea unei monede. Să presupunem că xi = 1 dacă rezultatul aruncării monedei i este cap și xi = 0 dacă este Coadă. Contextul nostru presupune că aruncările individuale de monede sunt independente și distribuite identic(IID) și că fiecare aruncare urmează o distribuție Bernoulli cu parametrul ecuent: p(xi = 1 | circulant) = circulant și p (circulant = 0 | circulant) = 1 − circulant. Latent (adică, neobservat) variabila XV este părtinirea monedei. Sarcina este de a deduce pe baza rezultatelor aruncărilor de monede observate anterior, adică p(x1 | x1, x2,. . . , xN).

modelarea unui program simplu, cum ar fi aruncarea părtinitoare a monedelor într-un limbaj de programare de uz general, poate duce la sute de linii de cod. Cu toate acestea, ppl-uri precum Edward exprimă această problemă în câteva simple like-uri de cod:

Sfântul Graal: PPL profund

timp de decenii, spațiul de învățare automată a fost împărțit în două tabere ireconciliabile: statistici și rețele neuronale. O tabără a dat naștere programării probabilistice, în timp ce cealaltă se afla în spatele mișcărilor transformaționale, cum ar fi învățarea profundă. Recent, cele două școli de gândire s-au reunit pentru a combina învățarea profundă și modelarea Bayesiană în programe unice. Expresia finală a acestui efort este deep probabilistic programming languages(deep PPLS).

conceptual, ppl-urile profunde pot exprima rețele neuronale Bayesiene cu greutăți probabilistice și prejudecăți. Practic vorbind, ppl-urile profunde s-au materializat ca noi limbi și biblioteci probabilistice care se integrează perfect cu cadrele populare de învățare profundă.

3 ppl-uri profunde trebuie să știți despre

domeniul limbajelor de programare probabilistice(ppl-uri) au explodat cu cercetare și inovare în ultimii ani. Cele mai multe dintre aceste inovații au venit din combinarea ppl-urilor și a metodelor de învățare profundă pentru a construi rețele neuronale care pot gestiona eficient incertitudinea. Giganți tehnologici precum Google, Microsoft sau Uber au fost responsabili pentru împingerea limitelor ppl-urilor profunde în scenarii la scară largă. Aceste eforturi s-au tradus în stive ppl-uri profunde complet noi, care devin din ce în ce mai populare în cadrul comunității de învățare automată. Să explorăm unele dintre cele mai recente progrese în spațiul PPL profund.

Edward

Edward este un limbaj de programare probabilistic Turing-complet(ppl) scris în Python. Edward a fost inițial susținut de echipa Google Brain, dar acum are o listă extinsă de contribuabili. Lucrarea originală de cercetare a lui Edward a fost publicată în martie 2017 și de atunci stiva a cunoscut o mulțime de adopții în cadrul comunității de învățare automată. Edward îmbină trei domenii: Statistica Bayesiană și învățarea automată, învățarea profundă și programarea probabilistică. Biblioteca se integrează perfect cu cadre de învățare profundă, cum ar fi Keras și TensorFlow.

Pyro

Pyro este un limbaj de programare probabilistic profund(ppl) lansat de Uber AI Labs. Pyro este construit pe partea de sus a PyTorch și se bazează pe patru principii fundamentale:

  • Universal: Pyro este un ppl universal — poate reprezenta orice distribuție de probabilitate calculabilă. Cum? Pornind de la un limbaj universal cu iterație și recursivitate (cod Python arbitrar) și apoi adăugând eșantionare aleatorie, observație și inferență.
  • scalabil: Pyro scalează seturi mari de date cu puțin deasupra codului scris de mână. Cum? Prin construirea unor tehnici moderne de optimizare a cutiei negre, care utilizează mini-loturi de date, pentru a aproxima inferența.
  • minim: Pyro este agil și poate fi întreținut. Cum? Pyro este implementat cu un mic nucleu de abstracții puternice, compozabile. Ori de câte ori este posibil, ridicarea grea este delegată PyTorch și altor biblioteci.
  • flexibil: Pyro vizează automatizarea atunci când doriți și controlul atunci când aveți nevoie. Cum? Pyro folosește abstracții la nivel înalt pentru a exprima modele generative și de inferență, permițând în același timp experților să personalizeze cu ușurință inferența.

la fel ca și alte ppl-uri, Pyro combină modele de învățare profundă și inferență statistică folosind o sintaxă simplă, așa cum este ilustrat în următorul cod:

Infer.Net

Microsoft a deschis recent surse Infer.Net un cadru care simplifică programarea probabilistică pentru dezvoltatorii. Net. Microsoft Research a lucrat la deducție.Net din 2004, dar abia recent, odată cu apariția învățării profunde, cadrul a devenit foarte popular. Infer.Net oferă unele diferențiatori puternice care o face o alegere puternică pentru dezvoltatorii care se aventurează în spațiul ppl profund:

  • Rich Modeling language ” suport pentru variabile univariate și multivariate, atât continue, cât și discrete. Modelele pot fi construite dintr-o gamă largă de factori, inclusiv operații aritmetice, algebră liniară, constrângeri de gamă și pozitivitate, operatori Booleni, Dirichlet-discret, Gaussian și mulți alții.
  • algoritmi de inferență multiplă” algoritmii încorporați includ propagarea așteptărilor, propagarea credinței (un caz special de EP), transmiterea mesajelor variaționale și eșantionarea Gibbs.
  • proiectat pentru inferență la scară largă: Infer.NET compilează modele în codul sursă de inferență care poate fi executat independent fără cheltuieli generale. De asemenea, poate fi integrat direct în aplicația dvs.
  • extensibil de utilizator: distribuțiile de probabilitate, factorii, operațiile de mesaje și algoritmii de inferență pot fi adăugate de utilizator. Deduce.NET folosește o arhitectură plug-in care o face deschisă și adaptabilă.

să ne uităm la exemplul nostru de aruncare a monedelor în Infer.Net

domeniul ppl profund devine în mod constant un bloc fundamental important al ecosistemului de învățare automată. Pyro, Edward și Infer.Net sunt doar trei exemple recente de PPL-uri profunde, dar nu singurele relevante. Intersecția dintre cadrele de învățare profundă și PPL oferă o amprentă incredibilă pentru inovație, iar noile cazuri de utilizare vor împinge limitele ppl-urilor profunde în viitorul apropiat.

Lasă un răspuns

Adresa ta de email nu va fi publicată.