Asymmetric Numeral Systems. Arxiv:0902.0271V5 [Cs.IT]
Total Page:16
File Type:pdf, Size:1020Kb
Asymmetric numeral systems. Jarek Duda Jagiellonian University, Poland, email: [email protected] Abstract In this paper will be presented new approach to entropy coding: family of generalizations of standard numeral systems which are optimal for encoding sequence of equiprobable symbols, into asymmetric numeral systems - optimal for freely chosen probability distributions of symbols. It has some similarities to Range Coding but instead of encoding symbol in choosing a range, we spread these ranges uniformly over the whole interval. This leads to simpler encoder - instead of using two states to define range, we need only one. This approach is very universal - we can obtain from extremely precise encoding (ABS) to extremely fast with possibility to additionally encrypt the data (ANS). This encryption uses the key to initialize random number generator, which is used to calculate the coding tables. Such preinitialized encryption has additional advantage: is resistant to brute force attack - to check a key we have to make whole initialization. There will be also presented application for new approach to error correction: after an error in each step we have chosen probability to observe that something was wrong. We can get near Shannon's limit for any noise level this way with expected linear time of correction. arXiv:0902.0271v5 [cs.IT] 21 May 2009 1 Introduction In practice there are used two approaches for entropy coding nowadays: building binary tree (Huffman coding [1]) and arithmetic/range coding ([2],[3]). The first one approximates probabilities of symbols with powers of 2 - isn't precise. Arithmetic coding is precise. It encodes symbol in choosing one of large ranges of length proportional to assumed probability distribution (q). Intuitively, by analogue to standard numeral systems - the symbol is encoded on the most important position. To define the current range, we need to use two numbers (states). We will construct precise encoding that uses only one state. It will be done by distributing symbols uniformly instead of in ranges - intuitively: place information on the least important position. Standard numeral systems are optimal for encoding streams of equiprobable digits. Asymmetric numeral systems ([4]) is 1 1 INTRODUCTION 2 natural generalization into other, freely chosen probability distributions. If we choose uniform probability, with proper initialization we get standard numeral system. For the binary case: Asymmetric Binary System (ABS) there are found practi- cal formulas, which gives extremely precise entropy encoder for which probability distribution of symbols can freely change. It was show ([5]) that it can be practical alternative for arithmetic coding. For the general case: Asymmetric Numeral Systems (ANS) instead of using formulas, we initially use pseudorandom number generator to distribute symbols with assumed statistics. The precision can be still very high, but disadvantage is that when the probability distribution changes, we have to reinitialize. The advantage is that we encode/decode a few bits in one use of the table - we get compression rates like in arithmetic coding and transfers like in Huffman coding. On [6] is available demonstration. Another advantage is that we can use a key as the initialization of the random number generator, additionally encrypting the data. Such encryption is extremely unpredictable - uses random coding tables and hidden random variable to choose behavior and so the current length of block. This approach is faster than standard block ciphers and is much more resistant against brute force attacks. In the last section will be presented new approach to error correction, which is able to get near Shannon's limit for any noise level and is still practical - has expected linear (or N lg(N)) correction time. It can be imagined as path tracking - we know starting and ending position and we want to walk between them using the proper path. When we use this path everything is fine, but when we lost it, in each step we have selected probability of becoming conscious of this fact. Now we can go back and try to make some correction. If this probability is chosen higher than some threshold corresponding to Shannon's limit, the number of corrections we should try doesn't longer grow exponentially and so we can easily verify that it was the proper correction. Intuitively we use short blocks, but we connect their redundancy. This connec- tion practically allows to 'transfer' surpluses of redundancy to help with large local error concentrations. 1.0.1 Very brief introduction to entropy coding In the possibility of choosing one of 2n choices is stored n bits of information. Assume now that we can store information in choosing a sequence of bits of length n, but such that the probability of '1' is given (p). We can evaluate the number of such 2 GENERAL CONCEPT 3 n! sequences using Stirling's formula limn!1 p n n = 1 : 2πn( e ) n n! nn+1=2en = ≈ (2π)−1=2 = pn (pn)!(~pn)! (pn)pn+1=2(~pn)pn~ +1=2en = (2πnpp~)−1=2p−pnp~−pn~ = (2πnpp~)−1=22−n(p lg p+~p lgp ~) wherep ~ = 1 − p. So while encoding in such sequences, we can store at average h(p) := −p lg(p) − (1 − p) lg(1 − p) bits of information/symbol (1) That's well known formula for Shannon's entropy. In practice we usually don't know the probability distribution, but we are approximating it using some statistical analysis. The nearer it is to the real probability distribution, the better compression rates we get. The final step is the entropy coder, which uses found statistics to encode the message. Even if we would know the probability distribution perfectly, the expected com- pression rate would be usually a bit larger than Shannon's entropy. One of the reason is that encoded message usually contains some additional correlations. The second source of such entropy increase is that entropy coders are constructed for some discrete set of probability distributions, so they have to approximate the orig- inal one. In an event of probability 1=n is stored lg(n) bits, so generally in event of prob- ability q, should be stored lg(1=q) bits. This can be seen in Shannon's formula: it's average of stored bits with probabilities of events as weights. So if we use a coder which encodes perfectly (qs) symbol distribution to encode P (ps) symbol sequence, we would get at average s ps lg(1=qs) bits per symbol. The difference between this value and the optimal one is called Kullback - Leiber distance: 2! 2 X ps X −ps qs 1 qs X (ps − qs) ∆H = p lg ≈ 1 − − 1 − ≈ 0:72 s q ln(2) p 2 p p s s s s s s s (2) We have used second order Taylor's expansion of logarithm around 1. The first term vanishes and the second allows to quickly estimate how important is that entropy coder is precise. 2 General concept We would like to encode an uncorrelated sequence of symbols of known probability distribution into as short as possible sequence of bits. For simplicity we will assume that the probability distribution doesn't change in time, but it can be naturally 2 GENERAL CONCEPT 4 generalized to varying distributions. The encoder will receive succeeding symbols and transform them into succeeding bits. An symbol(event) of probability p contains lg(1=p) bits of information - it doesn't have to be a natural number. If we just assign to each symbol a sequence of bits like in Huffman coding, we approximate probabilities with powers of 2. If we want to get closer to the optimal compression rates, we have to be more precise - the encoder have to be more complicated - use not only the current symbol, but also relate for example to the previous ones. The encoder should have some state in which is stored unnatural number of bits of information. This state in arithmetic coder are two numbers describing the current range. The state of presented encoder will be one natural number: x 2 N. For this sub- section we will forget about sending bits to output and focus on encoding symbols. So the state x in given moment is a large natural number which encodes all already processed symbols. We could just encode it as a binary number after processing the whole sequence, but because of its size it's completely impractical. In section 4 it will be shown that we can transfer the youngest bits of x to assure that it stays in some fixed range during the whole process. For now we are looking for a rule of changing the state while processing a symbol s: encoding −! (s; x) x0 (3) − decoding So our encoder starts with for example x = 0 and uses above rule on succeeding symbols. These rules are bijective, so that we can uniquely reverse whole process - decode the final state back into initial sequence of symbols in reversed order. In given moment in x is stored some unnatural number of bits of information. While writing it in binary system, we would round this value up. To avoid such approximations, we will use convention that x is the possibility of choosing one of f0; 1; ::; x − 1g numbers, so x contains exactly lg(x) bits of information. For assumed probability distribution of n symbols, we will somehow split the set f0; 1; ::; x − 1g into n separate subsets - of sizes x0; ::; xn−1 2 N, such that Pn−1 s=0 xs = x. We can treat the possibility of choosing one of x numbers as the possibility of choosing the number of subset(s) and then choosing one of xs numbers. xs So with probability qs = x we would choose s-th subset.