delikatne Wprowadzenie do probabilistycznych języków programowania

Programowanie probabilistyczne staje się jednym z najbardziej aktywnych obszarów rozwoju w przestrzeni uczenia maszynowego. Jakie są najważniejsze języki, o których powinniśmy wiedzieć?

Jesus Rodriguez

Follow

Aug 7, 2020 · 7 min czytać

źródło: https://devclass.com/2019/07/01/mit-presents-gen-to-get-probabilistic-programming-for-ai-up-and-running/

niedawno zacząłem nowy biuletyn skupić się na edukacji AI. TheSequence jest NO-BS( co oznacza brak szumu, Brak wiadomości itp.) biuletyn AI koncentruje się, że trwa 5 minut, aby przeczytać. Celem jest informowanie Cię na bieżąco o projektach uczenia maszynowego, pracach badawczych i koncepcjach. Spróbuj, subskrybując poniżej:

myślenie probabilistyczne jest niezwykle cennym narzędziem podejmowania decyzji. Od ekonomistów do pokerzystów, ludzie, którzy mogą myśleć w kategoriach prawdopodobieństwa mają tendencję do podejmowania lepszych decyzji w obliczu niepewnych sytuacji. Dziedziny prawdopodobieństwa i teorii gier powstały od wieków i dziesięcioleci, ale nie przeżywają renesansu wraz z szybką ewolucją sztucznej inteligencji (AI). Czy możemy włączyć prawdopodobieństwa jako pierwszorzędnego obywatela kodu oprogramowania? Witamy w świecie probabilistycznych języków programowania(PPLS)

wykorzystanie statystyki do przezwyciężenia niepewności jest jednym z filarów dużego segmentu rynku uczenia maszynowego. Rozumowanie probabilistyczne od dawna jest uważane za jedną z podstaw algorytmów wnioskowania i jest reprezentowane we wszystkich głównych frameworkach i platformach uczenia maszynowego. Ostatnio, probabilistyczne rozumowanie doczekało się poważnego przyjęcia wśród gigantów technologicznych, takich jak Uber, Facebook czy Microsoft, pomagając w pchnięciu programu badań i technologii w przestrzeni kosmicznej. W szczególności, PPLs stały się jednym z najbardziej aktywnych obszarów rozwoju w uczeniu maszynowym, co spowodowało pojawienie się nowych i ekscytujących technologii.

koncepcyjnie probabilistyczne języki programowania(PPLS) są językami specyficznymi dla domeny, które opisują modele probabilistyczne i mechanikę wykonywania wnioskowania w tych modelach. Magia PPL polega na połączeniu możliwości wnioskowania metod probabilistycznych z siłą reprezentacyjną języków programowania.

w programie PPL założenia są zakodowane z wcześniejszymi rozkładami nad zmiennymi modelu. Podczas wykonywania, program PPL uruchomi procedurę wnioskowania do automatycznego obliczania tylnych rozkładów parametrów modelu na podstawie obserwowanych danych. Innymi słowy, wnioskowanie dostosowuje wcześniejszy rozkład za pomocą obserwowanych danych, aby dać bardziej precyzyjny tryb. Wyjście programu PPL jest rozkład prawdopodobieństwa, który pozwala programiście wyraźnie wizualizować i manipulować niepewność związaną z wynikiem.

aby zilustrować prostotę PPL, użyjmy jednego z najbardziej znanych problemów współczesnej statystyki: stronniczego rzutu monetą. Ideą tego problemu jest obliczenie odchylenia monety. Załóżmy, że xi = 1, jeśli wynikiem rzutu monetą jest głowa, a xi = 0, jeśli jest ogon. Nasz kontekst zakłada, że pojedyncze rzuty są niezależne i identycznie rozmieszczone (IID) i że każdy rzut jest zgodny z rozkładem Bernoulliego z parametrem θ: p(xi = 1 | θ) = θ i p(xi = 0 | θ) = 1 − θ. Utajona (tj. niezauważona) zmienna θ jest odchyleniem monety. Zadaniem jest wnioskowanie θ na podstawie wyników zaobserwowanych wcześniej rzutów monetą, czyli p(θ | x1, x2, . . . , xN).

Modelowanie prostego programu, takiego jak stronniczy rzut monetą w języku programowania ogólnego przeznaczenia, może skutkować setkami linii kodu. Jednak PPL, takie jak Edward, wyrażają ten problem w kilku prostych przykładach kodu:

Święty Graal: głęboki PPL

przez dziesięciolecia przestrzeń uczenia maszynowego była podzielona na dwa nie do pogodzenia obozy: statystykę i sieci neuronowe. Jeden obóz dał początek programowaniu probabilistycznemu, podczas gdy drugi stał za ruchami transformacyjnymi, takimi jak głębokie uczenie się. Ostatnio dwie szkoły myślenia połączyły się, aby połączyć głębokie uczenie się i modelowanie bayesowskie w pojedyncze programy. Ostatecznym wyrazem tego wysiłku są głębokie probabilistyczne języki programowania(Deep PPLS).

koncepcyjnie, Głębokie PPL mogą wyrażać bayesowskie sieci neuronowe z probabilistycznymi wagami i uprzedzeniami. Praktycznie rzecz biorąc, Deep PPLs zmaterializowały się jako nowe probabilistyczne Języki i biblioteki, które bezproblemowo integrują się z popularnymi frameworkami głębokiego uczenia.

3 Głębokie PPLs musisz wiedzieć o

dziedzina probabilistycznych języków programowania(PPLS) eksplodowała badaniami i innowacjami w ostatnich latach. Większość tych innowacji pochodzi z połączenia metod PPL i deep learning w celu budowy sieci neuronowych, które mogą skutecznie radzić sobie z niepewnością. Giganci technologiczni, tacy jak Google, Microsoft czy Uber, byli odpowiedzialni za przesuwanie granic głębokich PPL do scenariuszy na dużą skalę. Wysiłki te przełożyły się na zupełnie nowe, Głębokie stosy PPLs, które stają się coraz bardziej popularne w społeczności uczenia maszynowego. Przyjrzyjmy się najnowszym osiągnięciom w głębokiej przestrzeni PPL.

Edward

Edward to kompletny probabilistyczny język programowania(PPL) napisany w Pythonie. Edward był początkowo wspierany przez zespół Google Brain, ale teraz ma obszerną listę współpracowników. Oryginalny artykuł badawczy Edwarda został opublikowany w marcu 2017 r.i od tego czasu stos był bardzo popularny wśród społeczności uczenia maszynowego. Edward łączy trzy dziedziny: statystykę Bayesowską i uczenie maszynowe, Uczenie głębokie i programowanie probabilistyczne. Biblioteka bezproblemowo integruje się z frameworkami deep learning, takimi jak Keras i TensorFlow.

Pyro

Pyro to głęboko probabilistyczny język programowania (PPL) wydany przez Uber AI Labs. Pyro jest zbudowany na bazie PyTorch i opiera się na czterech podstawowych zasadach:

  • Uniwersalny: Pyro jest uniwersalnym PPL – może reprezentować dowolny obliczalny rozkład prawdopodobieństwa. Jak? Zaczynając od uniwersalnego języka z iteracją i rekurencją (arbitralny kod Pythona), a następnie dodając losowe próbkowanie, obserwację i wnioskowanie.
  • skalowalność: Pyro skaluje do dużych zestawów danych z niewielkim obciążeniem powyżej ręcznie napisanego kodu. Jak? Budując nowoczesne techniki optymalizacji czarnej skrzynki, które wykorzystują mini-partie danych do przybliżenia wnioskowania.
  • Minimal: Pyro jest zwinny i łatwy w utrzymaniu. Jak? Pyro jest zaimplementowane z małym rdzeniem potężnych, złożonych abstrakcji. Tam, gdzie to możliwe, podnoszenie ciężarów jest delegowane do PyTorch i innych bibliotek.
  • elastyczność: Pyro dąży do automatyzacji, kiedy tego chcesz, i kontroli, kiedy jej potrzebujesz. Jak? Pyro wykorzystuje abstrakcje wysokiego poziomu do wyrażania modeli generatywnych i wnioskujących, jednocześnie umożliwiając ekspertom łatwe dostosowywanie wnioskowania.

podobnie jak inne PPL, Pyro łączy modele głębokiego uczenia i wnioskowania statystycznego przy użyciu prostej składni, jak pokazano w poniższym kodzie:

Infer.Net

Microsoft ostatnio otwarty Infer.Net framework, który upraszcza probabilistyczne programowanie dla programistów. Net. Microsoft Research pracuje nad Inferem.Net od 2004 roku, ale dopiero niedawno, wraz z pojawieniem się głębokiego uczenia, framework stał się naprawdę popularny. Infer.Net zapewnia kilka silnych wyróżników, które sprawiają, że jest to silny wybór dla programistów wyruszających w głęboką przestrzeń PPL:

  • Rich Modeling language ” Obsługa zmiennych jedno-i wielowymiarowych, zarówno ciągłych, jak i dyskretnych. Modele mogą być konstruowane z szerokiego zakresu czynników, w tym operacji arytmetycznych, algebry liniowej, ograniczeń zakresu i pozytywizmu, operatorów boolowskich, Dirichleta-dyskretnych, Gaussa i wielu innych.
  • wiele algorytmów wnioskowania” wbudowane algorytmy obejmują propagację oczekiwań, propagację przekonań (specjalny przypadek EP), przekazywanie wiadomości wariacyjnych i próbkowanie Gibbsa.
  • zaprojektowany do wnioskowania na dużą skalę: Infer.NET kompiluje modele do kodu źródłowego wnioskowania, który może być wykonywany niezależnie bez narzutu. Można go również zintegrować bezpośrednio z aplikacją.
  • możliwość rozbudowy przez użytkownika: rozkłady prawdopodobieństwa, czynniki, operacje na wiadomościach i algorytmy wnioskowania mogą być dodawane przez użytkownika. Wywnioskować.NET wykorzystuje architekturę wtyczek, która sprawia, że jest otwarty i elastyczny.

spójrzmy na nasz przykład rzutu monetą w Infer.Net

pole głębokiego PPL stale staje się ważnym podstawowym blokiem ekosystemu uczenia maszynowego. Pyro Edward i Infer.Net to tylko trzy ostatnie przykłady głębokich PPL, ale nie jedyne istotne. Połączenie frameworków głębokiego uczenia i PPL oferuje niewiarygodnie duży wpływ na innowacje, a nowe przypadki użycia prawdopodobnie przekroczą granice głębokiego uczenia się w najbliższej przyszłości.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.