Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Structure learning of deterministic circuits #127

Open
trappmartin opened this issue Jan 17, 2023 · 4 comments
Open

Structure learning of deterministic circuits #127

trappmartin opened this issue Jan 17, 2023 · 4 comments

Comments

@trappmartin
Copy link

Hi,
are there any plans to implement existing structure learning algorithms for deterministic circuits in the future?

Thanks,
Martin

@khosravipasha
Copy link
Contributor

khosravipasha commented Jan 18, 2023

Hi, Martin, we do have some implemeted, but might not be ported to the latest v0.4.0 version yet. Is there an specific stucture learning algorithm you were looking for?

For example, for Strudel strucure learning we have a seperate repo here https://github.com/UCLA-StarAI/Strudel/

Though, most of the functionality of Strudel already exists in ProbCircuits.jl v.0.3.3. (Few examples here https://juice-jl.github.io/ProbabilisticCircuits.jl/v0.3/manual/learning/). Version v0.3.3 is stable but there was a major refactoring between that and 0.4 so not sure if strudel works in v0.4.

This notebook also has few examples of structure learning at the end (https://github.com/Juice-jl/JuiceExamples/blob/master/Juice-Example.ipynb).

@trappmartin
Copy link
Author

Hi,
Thanks for the reply.

I was looking for an implementation of the structure learning approach by Yitao Liang (http://starai.cs.ucla.edu/papers/LiangUAI17.pdf). I like that this formulates an explicit score function that is optimised. I think this could easily be extended by using a Bayesian score. For example, one could implement the Bayesian Dirichlet score family that has been used in Bayesian networks. I have some nice results on the connection between deterministic circuits treated in a Bayesian framework and Pólya tree processes. This connection suggests certain prior configurations should be used when doing Bayesian learning of these models.

I will have to read the strudel paper again, but from what I remember, this does not formulate an explicit score function for a structure but uses some heuristics to optimise the structure.

@khosravipasha
Copy link
Contributor

khosravipasha commented Jan 20, 2023

That is a very intereting connection.

The latest version of LearnPSDD we have is written in Scala. Original paper was in Python https://github.com/UCLA-StarAI/LearnPSDD, and the scala version is here: https://github.com/YitaoLiang/Scala-LearnPsdd.

Strudel was an attemp to bring something like the LearnPSDD avaialble in our Juice library, at the same time we also wanted to scale up the algortihm so it became like what Strudel is doing now. We probably have most of the ingredients needed for LearnPSDD in julia version like split and clones. Both LearnPSDD and Strudel start with some initial structure (which can be learned in different ways for example by learning a chow-liu tree bayesian network and then compiling it into a determnistic circuit), and then both greedily grow the circuit but in slightly different ways.

@trappmartin
Copy link
Author

That sounds promising, thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants