Hacker News new | past | comments | ask | show | jobs | submit login
Probabilistic Models of Cognition (probmods.org)
173 points by pizza on Feb 2, 2017 | hide | past | favorite | 16 comments



I'd like to mention that the research center behind this, the Center for Brains, Minds, and Machines (CBMM), has a great youtube channel: https://www.youtube.com/channel/UCGoxKRfTs0jQP52cfHCyyRQ

Some of my favourite videos:

- Neural Representations of Language Meaning - Tom Mitchell https://www.youtube.com/watch?v=pRBf8BWAG3k

- Computational cognitive science - Josh Tenenbaum (co-author of probmods) https://www.youtube.com/watch?v=2WQO9e5Mdj4


Just a heads up that church has now been replaced by webppl: http://webppl.org.


Indeed. And there is now a webppl version of the probmods textbook: http://probmods.org/v2


Thank you for sharing. I have tried completing probmods twice, but gone sour in the syntax twice.

Third times the charm :)


You mean replaced as a language, or just replaced in a new version of the book?

Either way, :(.


Both. (source: I've worked on both languages and versions of the book).

But give webppl a shot -- it's a good language!


Curious -- do you have any insider perspective on the reason for the changeover from Church?


A non-exhaustive list:

1. Pedagogically, the lispy syntax was a big stumbling block for beginners. Probabilistic programming is hard enough as it is; prefix notation and parens only added difficulties (and these difficulties were unrelated to the conceptual material).

2. webchurch compiled to Javascript anyway, so it was nice to be closer to the target language.

3. Lisp can be a bit awkward for certain contemporary programming idioms (e.g., accessing object properties).


Some Lisp designers are listening:

  $ cat animal.tl 
  (defstruct animal nil
    (:static legs nil)
    (:method speak (self something)
      (pprinl something)))

  (defstruct dog animal
    (:static legs 4)
    (:method speak (self something)
      (call-super-method self 'speak something)
      (pprinl "Woof!")))

  $ txr -i animal.tl 
  1> (defvar d1 (new dog))
  d1
  2> (defvar d2 (new dog))
  d2
  3> d1.legs
  4
  4> (set d2.legs 5) ;; legs is static: i.e. class-wide
  5
  5> d1.legs ;; all dogs have 5 legs now
  5
  6> d1.(speak "hey!")
  hey!
  Woof!
  "Woof!"
  7>
Next:

  7> 'a.b.c.d
  a.b.c.d
  8> (car 'a.b.c.d)
  qref
  9> (cdr 'a.b.c.d)
  (a b c d)
  10> '(qref a b c d)  ;; qref ::= "qualified reference"
  a.b.c.d
  11> '(qref a b (c x y) d)
  a.b.(c x y).d
  12> '(qref (qref a b) c)
  (qref a.b c)
qref is syntax, targetted by a macro definition:

  13> (macroexpand '(qref a b c))
  (slot (slot a 'b)
        'c)
We can hijack it in data for our own use:

  14> '(www.google.com "blah")
  (www.google.com "blah")
  15> (caar '(www.google.com "blah"))
  qref
  16> (cdar '(www.google.com "blah"))
  (www google com)
The TXR Lisp scripting language removes most of the Lisp micro-stumbling-blocks in everyday coding, providing the above notation, plus array access with ranges, and nice "string quasiliteral" notation for interpolated strings.

  17> [mapcar succ "abcd"]
  "bcde"
  18> ["abcdefg" 0]
  #\a
  19> ["abcdefg" 0..3]
  "abc"
  20> ["abcdefg" -2..:]
  "fg"
  21> (car 'a..b)
  rcons
  22> (cdr 'a..b)
  (a b)
  23> '(rcons a b)
  a..b
  24> (rcons 1 2)
  #R(1 2)
  25> ["abcd" #R(1 3)]
  "bc"
  26> ["abcde" '(0 2 4 6)]
  "ace"


I will. I don't doubt it's good. It's the Smug Lisp Weenie in me that's sad.


Very interesting and well presented. If it were me I would try to provide a few concrete examples, ideally with figures, in the introduction but I'm a visual person.


The JS version of the text ("v2") linked above seems to answer your wishes. Interactive in your browser.


I really like the concept but I don't really want to learn a niche programming language to interact with the site.


Church was the original probabilistic programming language used for the book, and as per another comment in this thread and a draft PhD dissertation[1], WebPPL is the successor to Church.

"Niche" is probably in the eyes of the beholder if the audience is deliberately diving into probabilistic programming languages and probabilistic cognitive models.

[1] http://library.meritology.com/fundamentals/chapters/1a-In_a_...


It's basically scheme with built in probabilistic functions.

If you know scheme or lisp it should be no different than learning to use a few new functions.

If you are not familiar with functional programming you might find it difficult to learn.

I know I found it difficult.


You can always use PyMC or some other probabilistic programming library/language.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: