Inferring Algorithmic Patterns with Stack
research.facebook.com
research.facebook.com
Towards AI-Complete Question Answering: A Set of Prerequisite Toy Tasks http://arxiv.org/pdf/1502.05698v6.pdf
This recent paper is an algorithm to solve simple question answering from the context of a conversation... like the ones in the older paper... for instance.
John is in the playground.
Bob is in the office.
Where is John? A:playground
I believe a traditional LSTM RNN would have likely cleared the information about John from from it's long short term memory vector. Whereas you would still have access to the information about John in a stack.
fta: "Since the machine can essentially learn how to operate its memory, it can learn how to program itself by producing sequences of instructions."
--
The dataset (bAbi tasks[3]) released by Facebook is interesting but has a number of limitations. The code used to produce it is also not open source. If someone has the interest and/or past experience in MUD style environments, creating an open source dataset would be amazing!
[1]: https://github.com/fchollet/keras/blob/master/examples/babi_...
[2]: http://smerity.com/articles/2015/keras_qa.html
[3]: https://research.facebook.com/researchers/1543934539189348
I remember you've mentioned issues with the bAbi question set previously. Have you (or anyone else) tried using the same approach on a non-artificial dataset?
I'm thinking something like blending this with the approach Richard Socher used on the Quizbowl code[1].
"Using Thought-Provoking Children's Questions to Drive Artificial Intelligence Research"
Also I wonder if all programming should just be done by showing a sgd-solver example i/o. Of course this notion has been around since the 80s with prolog but apparently representing "concepts" as 1000 dimension feature vectors is more robust than single boolean variables.
How would you go about designing a GP to identify handwritten digits from, let's say, 32x32 px images? You would need operators operating on the images, then other operators reducing its dimensionality to an answer between 0 and 9
I'm a big fan of GP but it seems they're stuck into a niche for now
The earth has only existed ~1e9 years. Assuming some finite average number of "computational ops per year", the number of possible dna strands quickly exceeds the total computational capacity of the planet since its birth.
In any case this is beside the point. The fact remains that genetic programming is a class of algorithms that has not been succesful in the slightest. People should just stop talking about it as if it was anything other than a complete failure, since that will only lead to even more wasted human effort. Gradient descent on the other hand is hugely succesful in solving a wide variety of real problems.
The theoretical hand-wringing about SGD for neural nets is that their loss surface isn't convex. It turns out this doesn't matter. The loss surface is a high-dimensional egg-carton, and you need to get winning-the-lottery-while-struck-by-lightning unlucky to find a significantly shallow local minimum. There are lots of saddle points, and you need to do something to drive out of those, but stochasticity seems sufficient in practice.
From the paper (there's more on other things besides LSTM, but here's the LSTM specific mention):
Hochreiter and Schmidhuber [20] introduced the Long Short Term Memory network (LSTM) architecture. While this model was orginally developed to address the vanishing and exploding gradient problems, LSTM is also able to learn simple context-free and context-sensitive grammars [17, 37]. This is possible because its hidden units can choose through a multiplicative gating mechanism to be either linear or non-linear. The linear units allow the network to potentially count (one can easily add and subtract constants) and store a finite amount of information for a long period of time. These mechanisms are also used in the Gated Recurrent Unit network [7, 9]. In our work we investigate the use of a similar mechanism in a context where the memory is unbounded and structured. As opposed to previous work, we do not need to “erase” our memory to store a new unit.
Edit: They also provide a table in the paper showing improvements over LSTM for certain types of algorithms.
My own guess would be that the models are similar (both using NNs with external memory, trained through backprop), but this has a simpler memory structure and so could be trained more easily. It seems like the choice of regular RNNs vs. an LSTM network doesn't matter much since the Graves paper also compared LSTM vs. feedforward controllers and the results were about the same, with the feedforward controllers actually learning a bit faster. The key of both works seems to be in making a continuous system that can be trained to use external memory through backprop.
A feedforward neural network can be viewed as a "continuous generalization" of a fixed-size circuit, which makes it able to learn any function within the circuit complexity of the network.
A deep neural network biases towards circuits that are deeper than they are wide, towards functions composed out of smaller functions. Since many useful functions are such (and for other theoretical reasons, such as deep networks having "funnels" in their free-energy landscapes), deep learning works well.
A recurrent neural network goes from circuits to deterministic finite-state automata.
LSTM basically turns the whole thing into a small, fixed-size almost sorta-kinda pushdown automaton, and Neural Turing Machines generalize to a sorta-kinda linear-bounded automaton.
This stack approach makes things much more like a real pushdown automaton. So a feedforward network with a stack should be able to "learn any PDA", and a recurrent network with an unlimited-size stack should be able to learn more-or-less any Turing machine (though it's biased towards Turing machines that "look like" PDAs with funny state transitions).
Kinda. waves hands
Also, using a finite state machine and two stacks one can simulate any Turing machine, so one can represent arbitrary computations in this model (assuming we structure the input in such a way that there is time to do the computation in question).
I chuckled at that, because I bet it's a reference to Schmidhuber. :D
"Why not just build M with neural nets from the beginning? Without the right data, neural nets couldn’t provide a service much more powerful than, well, Siri, and Wit.ai’s tech can get things started with relatively little data. “This is a good way to bootstrap. With a few thousand data-points, you can start to build a model,” Lebrun says. “Then, using this model, you get more data, and once you have about a million data points, you go to Yann and get some deep learning.”" [1]