If I understand this correctly, this is saying that instead of representing the approximated function as a purely numerical operation (e.g. just a bunch of linear algebra), it can be represented as a program which contains a mixture of typical symbolic syntax and numerical operations.
One of the benefits mentioned is better accessibility for existing analysis tools. If I understand the concept correctly, could this also make it easier to implement the approximated functions in environments that lack efficient numerical algorithms and data structures? These two are usually only found in technical computing languages (e.g. FORTRAN, Julia, etc.), or as libraries for a handful of general-purpose languages (e.g. Numpy, Numba, etc.)
Anyone here working on program synthesis? I did a little research project as part of an MSc in CS and found it really interesting, but when I looked at industry applications I only found one YC startup working on it in the smart contract space.
I study Inductive Logic Programming (ILP) which is a kind of inductive program synthesis. Inductive program synthesis is learning from partial specifications, where deductive program synthesis is learning from complete specifications (compilation can be seen as a form of deductive program synthesis, for example).
ILP studies algorithms that learn logic programs from examples. "Logic programs" as in programs in a language of the Logic Programming paradigm, such as Prolog or Answer Set Programming (ASP).
If you're interested in program synthesis, this is the staple modern reference:
So my little project was essentially a research survey on neural program synthesis - do you have any good sources on building program synthesis projects? I noted a lot of the literature talks about outcomes but rarely how I can go about building something small that takes some Input, Output tuples and returns some code.
Ended up dropping the MSc because of Covid and moving to the Bay Area but I'd love to eventually do a research-focused masters in the future. Which may be difficult, because I don't have a Bachelors to begin with and took a lot of effort to get onto a Masters in the first place lol!
You mean resources on creating your own program synthesis system? Hm, I don't know of anything like a program synthesis toolbox, like OpenCV for machine vision, etc. There are many freely available program synthesis systems, but most are research prototypes and they only use a particular approach anyway, while I think you 'd prefer to be able to experiment with different approaches, no?
I fear the best option is to try to roll-your-own, based on the descriptions in many different program synthesis papers. Btw, I wouldn't choose neural program synthesis for a first Project! First because neural program synthesis requires as training examples both programming tasks (usually in the form of I/O examples) _and_ programs solving the tasks, and many many of them to boot. Second because it's an uncommon enough approach, or combination of approaches, that I doubt you'll find much support for it in the standard neural net frameworks.
I think the CSAIL program synthesis course suggested above by yldedly is a good starting place though. It's graded by a program synthesis project and you might find some tools meant to help students carry out their assignment on the course pages. Or you may try asking the tutors by email even.
Other than that, the simples thing to get you started is to define a DSL, generate programs from it and test them against I/O examples of the target programs. That's the simplest, most primitive kind of thing you can do. It's not a very efficient thing to do, but it's a start. The trick is in figuring out how to define the DSL and how to search it efficiently.
Good luck, I guess! Feel free to email me if you think I can help. See profile for email.
Edit: Here's a blog post about creating a DSL in Python:
This seems a little similar to Genetic Programming, from John Koza.
In my very old McGraw-Hill book (“C++ Power Paradigms”, McGraw-Hill 1994. Genetic Algorithms, Neural Networks, and Constraint Programming), I had an example using a genetic algorithm for synthesizing a recurrent network. I had lunch with John Koza, he said that it was an interesting idea but that it wouldn’t scale - and he was correct about that.
I agree that something like Julia vs. Python + libraries written in C++ seems like a better fit. However, there is such a vast wealth of tooling around Python, and high level development services like Huggingface, that for the foreseeable future, Python dominates.
Sure, makes sense. The way I see it that Julia's differentiable programming features seem like a really good match for building stuff in this framework.
> In contrast, a neural component is a (typically over-)parameterized, differentiable blackbox function that does not have an a priori specification.
> The holy grail for research on neurosym- bolic programming would be a general learning algorithm that could efficiently generate arbitrary combinations of neural components and symbolic code.
This is one area where the authors may be missing the point of the parallel distributed processing approach. The authors treat ANN’s as blind guesses from massive training data, but they forget that in most cases the choice of training data is the a priori specification.
Additionally, an ANN can be comprised of multitudes of types of artificial neurons. While some learning models are designed to discover relationships between complex data, other learning models are designed for simple data. The simpler the training data, the easier to assign a meaning to the output.
Simple back-propagation was followed by the development of deep learning and complex network architectures. The explosion in interest in deep learning is, in part, due to the realization that complex neural architectures can be comprised of a variety of neural components in a variety of ways and that the resulting neural architectures would almost certainly avail us with solutions that span the entirety of possible problems to solve.
That is to say, deterministic behavior (“symbolic program synthesis”) could be implemented by an ANN, if the ANN had the required minimum complexity.
Since the minimum complexity of such an ANN is currently incomprehensibly high, due to deep learning being in its infancy, there has been a heavy focus on striking results with low complexity.
In my view, instead of trying to bring back the zombie of symbolic programming for AI, the authors’ time would be better spent on contributing novel, highly complex neural architectures.
For example, some biological neurons in the visual cortex have been shown to be responsive to single individuals faces. If there is one neuron per face, then there could be thousands or more of face neurons in the visual cortex.
Where normal deep learning would focus on parameterized feature recognition for face detection, a highly complex neural architecture would focus on multitudes of small models that are trained with minute data sets of individuals per model.
A standard deep learning “face detection” model could then feed the training of the “face neurons”
Layering other types of neural architecture around and within that multitude of models, along with some other neural architecture that generates new “face neurons” to be included in the multitude, would provide both the robustness of deep learning and the determinism of symbolic programming. Each “face neuron” would have an a priori specification of which particular face data was used in its training. One could even imagine further granularity such as “smile neurons”, “chin neurons”, “pimple neurons”, and so on.
That is neuro-glial programming, a subset of Parallel Distributed Processing, not neuro-symbolic programming.
>> In my view, instead of trying to bring back the zombie of symbolic
programming for AI, the authors’ time would be better spent on contributing
novel, highly complex neural architectures.
It's misinformed to characterise Symbolic AI as a "zombie". Research in symbolic
AI has continued even since the days of the last AI winter. It does not enjoy of
the extravagant publicity given to statistical machine learning research but
that doesn't really say anything. Symbolic systems are well-known to have
capabilities missing from neural networks, particularly reasoning and knowledge
representation. There are many AI fields on which symbolic systems are still
dominant, for example search, planning, SAT solving, automated theorem proving,
etc. And of course, one of the most successful machine learning approaches of
all times, decision tree learning, is a symbolic machine learning approach that
learns propositional logic theories, rather than statistical models.
Finally, and lest we forget: one of the most publicised successes of neural
networks reserach, the AlphaGo family of systems, is a neuro-symbolic system
that combines a symbolic adversarial search algorithm, Monte-Carlo Tree Search,
with a neural network-learned evaluation function.
> Symbolic systems are well-known to have capabilities missing from neural networks, particularly reasoning and knowledge representation.
If I were to posit an initial draft operational definition for “artificial glial network”, then I would use exactly what you describe as a “symbolic system”:
Artificial Glial Networks (AGN) have capabilities missing from Artificial Neural Networks (ANN), particularly reasoning and knowledge representation.
I would also go on about:
In addition, AGN have the capability to define the structure of any associated ANN (“ANN Modification”), create new associated ANN (“ANN Generation”), and modify associations between any ANN (“ANN-ANN Associations”) in the AGN’s aggregate of associated ANN’s (“AGN-ANN Associations”). Furthermore, AGN explicitly are constrained such that no AGN can create, modify, or associate with any other AGN (“AGN Isolation”).
That’s just some thoughts off the top of my head though. Eventually I’ll get around to sifting through some research and elaborating, refining, etc.
> Symbolic systems are well-known to have capabilities missing from neural networks, particularly reasoning and knowledge representation.
I believe that the point is still being missed that: if you have a complex enough ANN architecture, you can obtain reasoning and knowledge representation.
> It's misinformed to characterise Symbolic AI as a "zombie".
I disagree. I (currently) agree with Searle’s position that any AI, symbolic or otherwise, would be a p-zombie if it didn’t originate from a biological brain.
> the AlphaGo family of systems, is a neuro-symbolic system that combines a symbolic adversarial search algorithm, Monte-Carlo Tree Search, with a neural network-learned evaluation function.
Please keep in mind that evaluation functions are symbolically programmed, themselves. The difference between Symbolic AI and Statistical AI is that the programmer uses symbols to describe symbols with GOFAI but uses symbols to describe stimuli with Statistical AI.
GOFAI symbols are just ANN engrams. That is my point, here. Anything symbolic could be represented in an ANN. Intelligence is due to Parallel Distributed Processing, using semiotic symbolism (neuro-glial programming) in the neural architecture.
Well, the original artificial neuron, the Pitts and McCullock neuron, was a
propositional logic circuit, so clearly neural networks do not need to be
"statistical", as in function approximators trained with gradient descent.
I don't understand what you mean by "GOFAI systems are just ANN engrams",
though. Which GOFAI systems, of what kind? All of them? "GOFAI" or, perhaps more
clearly, symbolic AI, is a broad church. I don't understand "ANN engrams"
anyway.
>> I believe that the point is still being missed that: if you have a complex
enough ANN architecture, you can obtain reasoning and representation.
Who knows. This is only a conjecture, currently.
I really didn't read your original comment as talking about philosophical
zombies. Is that what you really meant, or is your new comment a play on words?
Please excuse my confusion.
> I really didn't read your original comment as talking about philosophical zombies. Is that what you really meant, or is your new comment a play on words? Please excuse my confusion.
No worries - p-zombie is definitely what I meant by “zombie”.
> I don't understand what you mean by "GOFAI systems are just ANN engrams"
> I don't understand "ANN engrams" anyway.
So, in psychology, there was and is a tradition of understanding where in the brain any given thing exists. For example, what specific neurons or groups of neurons are responsible for individual memories, thoughts, concepts, etc. They call that location the “engram”.
What I’m trying to say is that with a complex enough neural architecture, one would be able to conduct the same engram investigations on an ANN.
> so clearly neural networks do not need to be "statistical"
Eh, I’m not an expert (just a bachelor), but I generally agree. Some (all?) artificial neurons may need to be statistical functions over a sample space. However, some (many?) artificial glia may not need to be statistical functions over a sample space.
An artificial glia’s sample space might simply be the artificial neurons, themselves, rather than the direct stimuli, if an artificial glia were to be programmed using statistical functions.
If you would like to turn your ideas into a scientific investigation (for example, by coming up with a testable conjecture) the first thing to do is to clarify your terminology. Not necessarily to bring it in line with established terminology, although personally I don't like the proliferation of terms. But at least, you would need to pin down what you mean by neologisms such as "artificial glia" and the neoteric use of "engram" in the context of ANNs. Establishing clear terminology will help you tremendously to minimise the potential for misunderstanding of your ideas.
I think you're proposing a collaboration? I'm afraid I must very firmly discourage it. I'm currently writing my thesis and cannot justify any work outside of it. HN is a guilty pleasure that I really shouldn't be indulging in. But, thank you for the proposal, I'm flattered.
> I think you're proposing a collaboration? I'm afraid I must very firmly discourage it. I'm currently writing my thesis and cannot justify any work outside of it.
Completely understood. Perhaps when you are tenured I will finally have gotten around to studying doctoral psychology and you would be able to peruse my master’s thesis.
I too am flattered that a doctoral student had the time to consider my thoughts.
If I do formulate some operational definitions in the not-too-distant future, would you mind if I sent them to you in an email for critique, at your leisure?
One of the benefits mentioned is better accessibility for existing analysis tools. If I understand the concept correctly, could this also make it easier to implement the approximated functions in environments that lack efficient numerical algorithms and data structures? These two are usually only found in technical computing languages (e.g. FORTRAN, Julia, etc.), or as libraries for a handful of general-purpose languages (e.g. Numpy, Numba, etc.)