2010-03-31 7 views
12

Qualcuno ha lavorato con il linguaggio di programmazione Church? Qualcuno può raccomandare applicazioni pratiche? L'ho appena scoperto e, anche se sembra che affronta alcuni problemi di vecchia data nell'IA e nell'apprendimento automatico, sono scettico. Non ne avevo mai sentito parlare, e sono rimasto sorpreso nel constatare che è in circolazione da alcuni anni, essendo stato annunciato nel documento Church: a language for generative models.Applicazioni per il linguaggio di programmazione della chiesa

+0

Slashdot, immagino? – Jacob

+0

Nella migliore delle ipotesi, le domande di discussione dovrebbero essere contrassegnate come wiki della comunità. La maggior parte delle volte non sono il formato appropriato per Stack Overflow. – danben

+1

Dopo aver letto il wiki e i documenti del progetto, è chiaro che questo è solo un altro linguaggio giocattolo senza un futuro serio. Nessuno degli esempi era specifico per la Chiesa e poteva essere facilmente duplicato in quasi tutte le lingue. Gli articoli che hanno portato questo alla mia attenzione hanno chiaramente stravolto e travisato la portata del progetto. Vota per chiudere. – Cerin

risposta

6

Non sono sicuro di cosa dire in merito alle applicazioni pratiche. La modellazione delle abilità cognitive con modelli generativi costituisce una "applicazione pratica" nella tua mente?

L'importanza chiave della Chiesa (almeno in questo momento) è che permette a chi di noi lavora con soluzioni di inferenza probabilistiche ai problemi di IA un modo più semplice di modellizzare. È essenzialmente un sottoinsieme di Lisp.

Non sono d'accordo con Chris S che si tratta di un linguaggio giocattolo. Mentre alcuni di questi problemi di inferenza possono essere replicati in altri linguaggi (ne ho costruiti molti in Matlab) in genere non sono molto riutilizzabili e devi davvero amare lavorare in 4 e 5 per loop in profondità (lo odio).

Invece di affrontare il problema in questo modo, Church usa i vantaggi ricorsivi di lamda calaculus e consente anche qualcosa chiamato memoization che è davvero utile per i modelli generativi dal momento che il tuo modello generativo spesso non è la stessa prova dopo processo - sebbene per i test hai davvero bisogno di questo.

Direi che se quello che stai facendo ha qualcosa a che fare con le reti bayesiane, i modelli gerarchici bayesiani, le soluzioni probabilistiche ai POMDP o alle reti dinamiche bayesiane allora penso che la Chiesa sia di grande aiuto. Per quello che vale, ho lavorato con Noah e Josh (due degli autori di Church) e nessuno ha una migliore interpretazione dell'inferenza probabilistica in questo momento (IMHO).

+0

Lamda calaculus è stato implementato in dozzine di librerie per diverse lingue. E la memoizzazione è un modello di progettazione vecchio come il tempo. Non c'è niente di nuovo qui. Non sono ancora chiaro per quale motivo sentivano di aver bisogno di inventare un altro dialetto ancora più semplice, invece di usare Common Lisp o Scheme. – Cerin

+1

Cerin, il punto della lingua non è né il lambda calcolo di per sé, né la memoizzazione, ma la capacità di rappresentare un modello probabilistico del "mondo", scrivendo un programma che lo simula, e quindi facendo domande su quanto siano probabili eventi specifici Ad esempio, se si scrive un programma che descrive come gli oggetti 3D vengono proiettati in un'immagine 2D, è possibile chiedere: data l'immagine, quali sono gli oggetti 3D che l'hanno generata? Cioè, si passa da un problema di proiezione di immagini relativamente semplice al problema di * visione * molto più difficile, automaticamente. Fornisci * output * e ottieni * input *, con probabilità. – user118967

2

Church fa parte della famiglia di linguaggi di programmazione probabilistica che consente la separazione della stima di un modello dalla sua definizione. Ciò rende la modellazione probabilistica e l'inferenza molto più accessibili alle persone che vogliono applicare l'apprendimento automatico ma che non sono essi stessi ricercatori esperti di apprendimento automatico.

Per molto tempo, la programmazione probabilistica significava che avresti dovuto elaborare un modello per i tuoi dati e derivare la stima del modello da solo: hai alcuni valori osservati e vuoi imparare i parametri. La struttura del modello è strettamente correlata al modo in cui si stimano i parametri e si dovrebbe avere una conoscenza piuttosto avanzata dell'apprendimento automatico per eseguire correttamente i calcoli. I recenti linguaggi di programmazione probabilistici sono un tentativo di affrontarlo e rendere le cose più accessibili per gli scienziati di dati o le persone che fanno un lavoro che applica l'apprendimento automatico.

Come analogia, considerare quanto segue:

sei un programmatore e si desidera eseguire del codice su un computer. Negli anni '70, dovevi scrivere il linguaggio assembly su schede perforate e dar loro da mangiare in un mainframe (per il quale dovevi prenotare il tempo) per eseguire il tuo programma.È ora il 2014 e ci sono lingue di alto livello, semplici da apprendere, che puoi scrivere anche senza sapere come funziona l'architettura del computer. È ancora utile capire come i computer lavorano per scrivere in quelle lingue, ma non lo hai per avere e molte altre persone scrivono codice che se dovessi programmare con schede perforate.

I linguaggi di programmazione probabilistici fanno lo stesso per l'apprendimento automatico con modelli statistici. Inoltre, la Chiesa non è l'unica scelta per questo. Se non sei un devoto programmazione funzionale, è anche possibile controllare le seguenti strutture per l'inferenza bayesiana in modelli grafici: