Shannon’s Source Coding Theorem (2020)
mbernste.github.io
mbernste.github.io
[1]How Claude Shannon Helped Kick-start Machine Learning:
https://www.spectrum.ieee.org/claude-shannon-information-the...
(compare Agassi/Becker for the value of single-bit predictions)
I couldn't resist submitting it, especially considering it has not yet been discussed on HN*:
https://news.ycombinator.com/item?id=36385198
(*A different link covering the same subject was submitted 6 years ago but never caught on: https://news.ycombinator.com/item?id=14450232)
Shannon's original paper [2] is often touted to be very parseable, but it is always enlightening to read the same basics many times from multiple sources, especially something as foundational as source coding (and broader information theory) in a more modern language.
I also finally discovered the meaning of "differential" in differential entropy [2], the continuous counterpart of discrete probability masses, something that I always swept under the rug.
[1]: https://www.librarything.com/work/16165301/book/242295611 [2]: https://ieeexplore.ieee.org/document/6773024 [3]: https://sanyamkapoor.com/kb/differential-entropy
I was more interested in learning about the possible theory behind such a limit, to see if we had a way to actually know how far such optimisations can go. Basically, for any given file, what would be the absolute best we could hope for (without resorting to losing information).
In a world where every single file is exactly "abcd", it takes zero bits to represent the file - you don't need any information to know that the file contains "abcd" because all files do.
In theory, the language you use to output the file could have a one-bit coding '0' for "produce the file 'there are comments on HN'" (and all other commands starting with '1...'). So in the world we live in, the smallest a file can be compressed to is 1 bit - if you just use the right language.
None of these are practical in general, but the point is that Kolmogorov Complexity is not meaningful without specifying more assumptions/priors.
Thank you for the examples; they are much clearer and straightforward than most of those I’ve come across.
For those interested also unfamiliar with it:
- https://eprint.iacr.org/2021/1333.pdf
- https://matt.might.net/articles/why-infinite-or-guaranteed-f...
All major compression libraries that I know of essentially work by "factoring out" statistical regularities in the input string--i.e. repeating patterns. But many strings have regularity that can't be captured statistically. For example, the sequence 1, 2, 3, 4, ... has an entropy rate of 1, because all digits and all subsequences of digits occur with equal frequency, so most modern compression libraries are going to be unable to compress it to any significant degree [1]. However, it obviously has a very compact representation as a program in your favourite language.
If you want to go down a bit of a rabbit hole, this video from a researcher in this field gives an overview, as well as some proposed methods for approximating Kolmogorov Complexity in a reasonable way (even though in a technical sense approximating it with known, fixed bounds is I believe impossible): https://www.youtube.com/watch?v=HXM3BUXsY4g. This paper also discusses a theory that decomposes KC into a statistical part (Shannon entropy) and a "computational part": https://csc.ucdavis.edu/~cmg/compmech/pubs/CalcEmergTitlePag....
[1]: Note that if you encode it as ASCII or even N-bit integers there will be significant redundancy in the encoding. To properly test it you'd have to encode the numbers in a packed binary encoding with no padding.
Encoding algorithms end up getting specialised for particular types of data because different data exhibits different patterns.
Kolmogorov complexity is the length of the shortest computer program in some programming language that can generate your file. It gives the same number across different programming languages, up to an uncomputable and likely very large additive constant. It’s a more universal notion of compressibility than Shannon entropy, because it doesn’t depend on a probability distribution, but it is uncomputable.
The concepts are related because for any programming language, you can see it as corresponding to a probability distribution such that p(x) \propto 2^-(length of the program that generates x).
You will also want to be a bit careful what assumptions you allow this model to make. In a very real sense a hash is mostly enough information to recover a file if you know it exists somewhere, as torrents and magnet links prove.
But there’s an alternative way, instead of each number individually, you can code the sequences of 5 numbers, which there are 65432 of in this case, 6!/1! = 720, which can be encoded in binary with 8 bits
So instead of 15 bits, you can use 8
In any case, you don’t need to index the whole numbers space to transmit all the information
Like you say, you can use 13 bits instead of 15
And using variable length encoding you can reduce it even more
But what is the distribution in this case?
Why do you need to know more about the file to transform to frequency domain?
There is a lot of research in this field because of the IoT fad/trend. If you want to know more i would suggest to simply pic a paper from IEEE and deep dive into the terms and terminology and simply skip the proofs of most algorithms/theorems.
Your inefficiency is just the rounding error, which quickly becomes trivial. In theory some block sizes should even coincidentally be close to a whole number of bits.
Even if 720 were the right number, that takes 10 bits, not 8.
Still 10 is less than 15
Additionally, as someone else pointed out, it would be 6^5 sequences, which would need 13 bits
Still 13 is less than 15
But the interesting thing is, you can then index the most commonly used sequences of sequences and compress by a few more bits
You can keep the process going until you have a 2 bit index for the most commonly used sequences (of sequences (of sequences… ))