The Unreasonable Syntactic Expressivity of RNNs
nlp.stanford.edu
nlp.stanford.edu
In the beginning, there is this statement (assumption):
> when processing natural language, we can bound the maximum number of things we’ll need to store on the stack
Why is that? Is it because there is a limit N and all natural sentences ever are less than N words, and thus you also have a bound on the stack depth? But that's not strictly true, just highly unlikely, right? In principle, for every sentence of length N, I can easily add a word, and have length N+1. In a similar way, I can also always make the stack deeper.
This discussion reminds me in general about whether RNNs are turing complete or not. There is a famous paper stating that they are (On the computational power of neural nets, Siegelmann & Sontag, 1992). However, that uses infinite precision rational numbers for weights and activations. Once you have finite precision (standard floats), it has finite memory. Then stack depths are bounded of course, and also it is not Turing complete anymore.
Some interesting discussion about this is also here (own question, and also has some own answer, among others): https://stackoverflow.com/questions/2990277/how-useful-is-tu...
It's true that you can't really find an N such that a natural language sentence with stack depth N is OK, but a sentence with stack depth N+1 is ungrammatical. But in practice, the stack depth of real sentences is small [1], and sentences that require deep stacks quickly become impossible for humans to understand.
For example,
Stack depth 1: The rat ate the cheese.
Stack depth 2: The rat [that the cat chased] ate the cheese.
Stack depth 3: The rat [that the cat [that the teacher liked] chased] ate the cheese
Stack depth 4: The rat [that the cat [that the teacher [that the student hated] liked ] chased] ate the cheese.
English speakers usually can't handle depths 3 or higher.
This kind of phenomenon has caused a lot of controversy in linguistics. There does seem to be some sense in which the stack-depth-4 sentence is grammatical English, even though basically no one can understand it. But for the purposes of practical NLP systems, this phenomenon means that if you can model stack depth of, say, 10, then you'll be able to model almost all the naturally-occurring sentences.
>> There's a fleck on the speck on the tail on the frog on the bump on the branch on the log in the hole in the bottom of the sea.
Which is a proper grammatical sentence. The key to the song is building it up. The song starts with: "There's a hole in the bottom of the sea", and the song builds the sentence up. Indeed: having a grossly complicated sentence is the "Fun" of the song, but that doesn't change the fact that its grammatically correct (and actually understood by the listener / singers).
There are no weird sequences of words "hated liked chased" that require backtracking to parse.
Anything could be explained if it's broken into a ton of steps, with each step adding a new level, but very little daily language works like that.
My understanding is that Turing machines assume infinite memory -- could you help me understand how this differs? I'm guessing that I'm not understanding your point, but if "finite memory" is a disqualifier then Turing machines aren't Turing-complete.
So, (standard) RNNs with finite precision (standard floats) have finite memory, and thus are not Turing complete.
This paper (On the computational power of neural nets) shows that RNNs with infinite precision are Turing complete. But in practice, we never model RNNs that way. There are other ways we can add external (conceptually infinite) memory to a RNN. E.g. see neural turing machines (NTM) and differentiable neural computer (DNC).
It is even more unreasonably effective, outperforming already unreasonable effective recursive neural networks on reasonable spectacular number of tasks.
It's the OED's and CMoS's recommendation: https://english.stackexchange.com/a/56010/15831
The title has become a meme just like "... considered harmful".
Is the computational advantage of neural nets on GPUs so dramatic?
When you don't have or can't use a gradient, GAs become the go-to tool, for optimizations (if only because you don't have much in the way of other options).
That said, I use GAs for optimization and find them to be an incredibly useful tool for various optimization tasks - just generally not for learning weights of NNs, where a GPU + backprop generally reigns supreme (or at least works well enough/much faster than a GA).
I suspect that with some more engineering and attention from people doing ML stuff, GA-style algorithms can be made just as memory and space efficient as gradient methods, while giving better results and being more widely applicable.
Here's a post on this: http://pchiusano.github.io/2020-10-12/learning-without-a-gra...
Here's a post on this: http://pchiusano.github.io/2020-10-12/learning-without-a-gra...
Traditional GA has a practical problem for training large models - keeping a large population of model weights in memory is not feasible. Like if you had to keep 1000 variations of the GPT-3 model weights in memory for training that's no good. Though people have ideas for how to solve for that as well (again, see the post I linked).
parallelism like that isn't possible with GA
[0] https://rssproxy.migor.org/api/feed?url=https%3A%2F%2Fnlp.st...
After all, self-referentiality is all you need.