een zachte Inleiding tot probabilistische programmeertalen

probabilistische programmering wordt een van de meest actieve ontwikkelingsgebieden in de machine learning ruimte. Wat zijn de beste talen die we moeten weten?

Jezus Rodriguez

Volg

Aug 7, 2020 · 7 min lezen

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

ik heb onlangs begonnen met een nieuwe nieuwsbrief AI focus op onderwijs. TheSequence is een no-BS( wat betekent geen hype, geen nieuws etc) AI-gerichte nieuwsbrief die 5 minuten duurt om te lezen. Het doel is om u op de hoogte te houden van machine learning projecten, onderzoekspapers en concepten. Probeer het alsjeblieft door je hieronder in te schrijven:

probabilistisch denken is een ongelooflijk waardevol instrument voor besluitvorming. Van economen tot pokerspelers, mensen die kunnen denken in termen van waarschijnlijkheden hebben de neiging om betere beslissingen te nemen wanneer ze worden geconfronteerd met onzekere situaties. De gebieden van waarschijnlijkheden en speltheorie zijn al eeuwen en decennia gevestigd, maar ervaren geen renaissance met de snelle evolutie van kunstmatige intelligentie(AI). Kunnen we waarschijnlijkheden opnemen als eersteklas burger van software code? Welkom in de wereld van probabilistische programmeertalen(PPLS)

het gebruik van statistieken om onzekerheid te overwinnen is een van de pijlers van een groot segment van de markt voor machine learning. Probabilistische redeneren is lang beschouwd als een van de fundamenten van gevolgalgoritmen en wordt vertegenwoordigd is alle belangrijke machine learning frameworks en platforms. Onlangs, probabilistische redeneren heeft gezien grote adoptie binnen tech reuzen zoals Uber, Facebook of Microsoft helpen om de onderzoeks-en technologische agenda in de ruimte te duwen. Specifiek, PPLs zijn uitgegroeid tot een van de meest actieve gebieden van ontwikkeling in machine learning vonken de release van een aantal nieuwe en spannende technologieën.Conceptueel zijn probabilistische programmeertalen(PPLS) domeinspecifieke talen die probabilistische modellen en de mechanica beschrijven om gevolgtrekkingen in deze modellen uit te voeren. De magie van PPL is gebaseerd op het combineren van de inferentie mogelijkheden van probabilistische methoden met de representationele kracht van programmeertalen.

in een PPL-programma worden aannames gecodeerd met eerdere verdelingen over de variabelen van het model. Tijdens de uitvoering zal een PPL-programma een inferentieprocedure starten om automatisch de posterieure distributies van de parameters van het model te berekenen op basis van waargenomen gegevens. Met andere woorden, inference past de eerdere distributie aan met behulp van de waargenomen gegevens om een meer precieze modus te geven. De output van een PPL-programma is een kansverdeling, die de programmeur in staat stelt om expliciet de onzekerheid te visualiseren en te manipuleren die met een resultaat gepaard gaat.

om de eenvoud van PPLs te illustreren, gebruiken we een van de beroemdste problemen van de moderne statistieken: een bevooroordeelde toss. Het idee van dit probleem is om de vooringenomenheid van een munt te berekenen. Laten we aannemen dat xi = 1 als het resultaat van de i-de toss kop is en xi = 0 als het staart is. Onze context gaat ervan uit dat individuele tossen van munten onafhankelijk en identiek verdeeld zijn (IID) en dat elke toss een Bernoulli − verdeling volgt met parameter θ: p(xi = 1 | θ) = θ en p(xi = 0 | θ) = 1-θ. De latente variabele θ is de bias van de munt. De taak is om θ af te leiden gezien de resultaten van eerder waargenomen muntwerpen, dat wil zeggen, p(θ | X1, x2, . . . , xN).

het modelleren van een eenvoudig programma zoals de bevooroordeelde toss in een algemene programmeertaal kan resulteren in honderden regels code. Echter, PPLS zoals Edward drukken dit probleem uit in een paar eenvoudige voorbeelden van code:

de Heilige Graal: Deep PPL

decennialang was de machine learning ruimte verdeeld in twee onverenigbare kampen: statistieken en neurale netwerken. Het ene kamp gaf aanleiding tot probabilistische programmering terwijl het andere achter transformationele bewegingen zoals deep learning zat. Onlangs zijn de twee denkscholen samengekomen om diep leren en Bayesiaanse modellering te combineren in afzonderlijke programma ‘ s. De ultieme uitdrukking van deze inspanning is deep probabilistic programming languages(Deep PPLs).

conceptueel kan diepe PPLs Bayesiaanse neurale netwerken uitdrukken met probabilistische gewichten en vooroordelen. Praktisch gesproken zijn Deep PPLs gematerialiseerd als nieuwe probabilistische talen en bibliotheken die naadloos integreren met populaire deep learning frameworks.

3 diepe PPLs u moet weten

het gebied van probabilistische programmeertalen(PPLS) is de afgelopen jaren explosief gegroeid door onderzoek en innovatie. De meeste van die innovaties zijn afkomstig van het combineren van PPLs en deep learning methoden om neurale netwerken die efficiënt kunnen omgaan met onzekerheid op te bouwen. Techreuzen zoals Google, Microsoft of Uber zijn verantwoordelijk voor het verleggen van de grenzen van diepe PPLs in grootschalige scenario ‘ s. Deze inspanningen hebben zich vertaald in volledig nieuwe diepe PPLS-stapels die steeds populairder worden binnen de machine learning-gemeenschap. Laten we een aantal van de meest recente ontwikkelingen in de diepe PPL ruimte verkennen.

Edward

Edward is een Turing-complete probabilistische programmeertaal(ppl) geschreven in Python. Edward werd oorspronkelijk verdedigd door het Google Brain-team, maar heeft nu een uitgebreide lijst van bijdragers. De originele research paper van Edward werd gepubliceerd in maart 2017 en sindsdien heeft de stack veel adoptie gezien binnen de machine learning gemeenschap. Edward combineert drie gebieden: Bayesian statistieken en machine learning, deep learning, en probabilistische programmering. De bibliotheek integreert naadloos met deep learning frameworks zoals Keras en TensorFlow.

Pyro

Pyro is een deep probabilistic programming language(PPL) uitgebracht door Uber AI Labs. Pyro is gebouwd op de top van PyTorch en is gebaseerd op vier fundamentele principes:

  • universeel: Pyro is een universele PPL — het kan elke berekenbare kansverdeling vertegenwoordigen. Hoe? Door te starten vanuit een universele taal met iteratie en recursie (willekeurige Python-code), en vervolgens willekeurige sampling, observatie en gevolgtrekking toe te voegen.
  • schaalbaar: Pyro schaalt naar grote datasets met weinig overhead boven handgeschreven code. Hoe? Door het bouwen van moderne Black box optimalisatie technieken, die gebruik maken van mini-batches van gegevens, om de gevolgtrekking te benaderen.
  • minimaal: Pyro is flexibel en onderhoudbaar. Hoe? Pyro wordt uitgevoerd met een kleine kern van krachtige, composeerbare abstracties. Waar mogelijk wordt het zware werk gedelegeerd aan PyTorch en andere bibliotheken.
  • flexibel: Pyro streeft naar automatisering wanneer u het wilt en controle wanneer u het nodig hebt. Hoe? Pyro maakt gebruik van abstracties op hoog niveau om generatieve en gevolgtrekkingen modellen uit te drukken, terwijl deskundigen om gemakkelijk aan te passen gevolgtrekking.

net als andere PPLs combineert Pyro deep learning-modellen en statistische gevolgtrekking met behulp van een eenvoudige syntaxis zoals geïllustreerd in de volgende code:

Infer.Net

Microsoft recent open source Infer.Net een framework dat probabilistische programmering voor. NET-ontwikkelaars vereenvoudigt. Microsoft Research heeft gewerkt aan Infer.Net sinds 2004, maar het is pas onlangs, met de opkomst van deep learning, dat het kader is echt populair geworden. Infer.Net biedt een aantal sterke differentiators dat maakt het een sterke keuze voor ontwikkelaars venturing in de diepe ppl ruimte:

  • Rich modelling language ” ondersteuning voor univariate en multivariate variabelen, zowel continue als discrete. Modellen kunnen worden geconstrueerd uit een breed scala van factoren, waaronder rekenkundige bewerkingen, lineaire algebra, bereik en positiviteit beperkingen, Booleaanse operatoren, Dirichlet-Discrete, Gaussian, en vele anderen.
  • Multiple inference algorithms ” ingebouwde algoritmen omvatten Expectation Propagation, Belief Propagation (een speciaal geval van EP), Variational Message Passing en Gibbs sampling.
  • ontworpen voor grootschalige gevolgtrekking: Infer.NET compileert modellen in inferentie broncode die onafhankelijk kan worden uitgevoerd zonder overhead. Het kan ook direct in uw toepassing worden geïntegreerd.
  • gebruiker-uitbreidbaar: kansverdelingen, factoren, berichtbewerkingen en gevolgalgoritmen kunnen allemaal door de gebruiker worden toegevoegd. Afgeleid.NET maakt gebruik van een plug-in architectuur die het open-ended en aanpasbaar maakt.

laten we eens kijken naar ons toss voorbeeld in Infer.Net

het gebied van diepe PPL is gestaag een belangrijk fundamenteel blok aan het worden van het ecosysteem van machine learning. Pyro, Edward en Infer.Net zijn slechts drie recente voorbeelden van diepe PPLs, maar niet de enige relevante. Het kruispunt van deep learning frameworks en PPL biedt een ongelooflijke grote voetafdruk voor innovatie en nieuwe use cases zullen waarschijnlijk de grenzen van Deep PPLs in de nabije toekomst verleggen.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.