비대칭 숫자 체계
Asymmetric numeral systems시리즈의 일부 |
숫자 체계 |
---|
숫자 체계 목록 |
ANS([1][2]Asymmetric number systems)는 Jagiellonian University의 Jaroswaw(Jarek[3]) Doda가 도입한 엔트로피 부호화 방식 패밀리로, 기존 [5]방식보다 성능이 향상되어 2014년부터[4] 데이터 압축에 사용되고 있다.ANS는 산술 부호화의 압축비(거의 정확한 확률 분포를 사용)와 허프만 부호화와 유사한 처리 비용을 결합합니다.Tabled ANS(tANS; 테이블형 ANS) 변종에서는 곱셈을 사용하지 않고 큰 알파벳으로 동작하는 유한 상태 기계를 구성함으로써 이를 달성할 수 있습니다.
다른 것들 중에, ANS은 페이스북 Zstandard compressor[6][7](또한 리눅스 kernel,[8]Android[9]운영 체제에서 예를 들어 사용되는 RFC8478로 MIME[10]과 HTTP[11]에 출판되었다)에 사용되면 애플 LZFSE CRAM DNA상태 compressor,[15]구글은 용 자리 3Dcompressor[13](. 픽사 유니버설 현장 설명에서 예를 들어 사용되 format[14])과 PIK 이미지 compressor,[12].Ressor[16]SAMtools utilities,[17]강하에서.박스 DivANS 컴프레서,[18] Microsoft DirectStorage BCPack 텍스처 컴프레서 [19]및 JPEG[20] XL 이미지 컴프레서.
기본 개념은 정보를 단일 xx로 인코딩하는 것입니다.표준 이진수 시스템에서는 x x의 끝에 s\{를 하여 x x})에 의 s)를 추가할 수 있습니다. +s (\ x' +)엔트로피 코더의 경우 Pr 0) ( ) /2 { ( 0 ) = \ ( 1 )2 최적입니다.ANS는 임의의 세트 S{ \ s \ S}에 대해 이 프로세스를 일반화하고 그에 따른 확률 분포 를 합니다 {\ s가x{\ x에 추가되어 x x이 .따라서 2 () 2display display displaydisplay ( x 。 _ 서 2 () { _} () 、 (1 / ) display 、 display 、 、 \ _ { 1 / p _ { s ) display displaydisplaydisplaydisplaydisplaydisplay
부호화 규칙의 경우, 자연수 집합은 짝수 및 홀수처럼 서로 다른 기호들에 대응하는 분리된 하위 집합으로 분할되지만, 부호화할 기호의 확률 분포에 대응하는 밀도로 분할됩니다. 다음 기호의 정보를 현재 x({x에 저장된 정보에 추가하려면 x C( x, ) x/ { ' = C ( , s )\ \ approx 로 이동합니다부분 집합.
실제로 적용할 수 있는 다른 방법이 있습니다. 부호화 및 복호화 단계를 위한 직접 수학 공식(uABS 및 rANS 변형) 또는 전체 동작을 테이블에 넣을 수 있습니다(TANS 변형).재규격화는 x{\ x가 무한대로 이동하는 것을 하기 위해 사용됩니다. 즉, 누적된 비트가 비트 스트림으로 전송되거나 비트 스트림에서 전송되는 것입니다.
엔트로피 부호화
1,000개의 0과 1의 시퀀스가 부호화된다고 가정합니다.이것에 직접 보존하려면 1000비트가 필요합니다.단, 0과 999의 1만을 포함하는 것으로 알려진 경우에는 0의 위치를 부호화하면 충분합니다여기에서는 1000비트가 아닌 " 2 () \ style =비트만 필요합니다.
일반적으로 p pn) 0과(-) (\ n일부 p 0, 1){ p 의 길이를 하는 n pin ( , 1 )) 시퀀스는 조합이라고 불립니다.스털링의 근사치를 사용하여 우리는 그들의 점근수를 구한다:
따라서 이러한 시퀀스를 선택하려면 약 nh가 필요합니다.p / { p인 에도 n n비트이지만, 훨씬 작을 수도 있습니다.예를 들어 p (\에는 nn/2 필요합니다.
엔트로피 코더는 심볼당 약 샤논 엔트로피 비트를 사용하여 심볼 시퀀스의 부호화를 가능하게 한다.예를 들어 ANS를 직접 사용하여 조합을 열거할 수 있다. 즉, 거의 최적의 방법으로 고정된 비율을 갖는 모든 기호 시퀀스에 다른 자연수를 할당한다.
부호화 조합과는 달리, 이 확률 분포는 일반적으로 데이터 압축기에서 다릅니다.따라서 섀넌 엔트로피는 가중평균으로 볼 수 있습니다.기호에는 2µ(/ _}(비트의 정보가 됩니다.ANS는 를 단일 x {\ x로 인코딩하며 로그 2odes ( )\ _ 비트의 정보를 하는 것으로 해석됩니다.p 에서 정보를 추가하면 내용이 로그2 () + 2 ( / ) 2 ( /) { _ ( x ) + \_ {2 ( / p )= \_ {2} ( / p )=\log _ {2} ( x /p ) } 로 합니다.따라서 두 가지 모두 새로운 정보를 포함해야 합니다. x' \ 。
동기 부여 사례
확률 1/2, 1/4, 1/4의 3글자 A, B, C의 선원을 고려합니다.A = 0, B = 10, C = 11의 이진수로 최적의 접두사 코드를 구성하는 것은 간단합니다.그러면 메시지는 ABC -> 01011 로 인코딩됩니다.
부호화를 실행하는 동등한 방법은 다음과 같습니다.
- 1번부터 시작하여 각 입력 문자의 번호에 대한 연산을 수행합니다.
- A = 2 곱하기, B = 4 곱하기, 2 더하기, C = 4 곱하기, 3 더하기.
- 숫자를 이진수로 표시한 다음 첫 번째 숫자 1을 제거합니다.
k 문자의 보다 일반적인 소스에서는 n 1 n }/ ...N을 합리적으로 합니다.이 경우 소스에서 산술 부호화를 수행하려면 정수를 사용하여 정확한 연산만 수행하면 됩니다.
일반적으로 ANS는 산술 의 근사치로 작은를 가진 /,., k/ { style / n / N { display style n _ { n} / n _ { n / n _ r { n }
ANS의 기본 개념
예를 들어 바이너리 확장 비트시퀀스와 같은 x x에 저장된 정보가 있다고 가정합니다.이진 s {\ s에서 정보를 추가하려면 부호화 x, ( , ) x + ( \ x ' =( x , s ) =} 를 사용하면 모든 비트를 한 위치 위로 이동하고 새 비트를 최하위 위치에 배치할 수 있습니다.디코딩 D ( ) ( / 2 , d ) ( x ) ( \ D ( x ) ( \ x 2 \ , \ { } ( ' , ) ) 、 ( )) 。. x { x} 초기 상태로 한 다음 유한 비트 시퀀스의 연속 비트에서C {\ C 를 사용하여 이 시퀀스 전체를 저장하는 x {\ x 번호를 얻을 수 있습니다.그런 다음 x {\ x}이 될 까지 D{\ D 함수를 여러 번 하면 비트 시퀀스를 역순으로 검색할 수 있습니다.
위의 절차는 기호 0 ( 0)=\1)=2의 균일한 확률 분포에 최적입니다 ANS는 기호의 선택된(정확한) 확률 에 되도록일반화합니다. ( )p \p \의 예에서 s는 짝수 C )와 C) 사이에서 선택되었습니다. ANS에서는 이 짝수/홀수 나눗셈은 가정된 분포 { p s { \ {에 해당하는 밀도를 갖는 부분 집합으로 나눗셈으로 대체됩니다\x s(\ 는 s(\xp_{s입니다
부호화 C,)({ C는 s s에 대응하는 서브셋에서 x x번째 을 반환합니다.밀도 가정은 x′ ( ,s )x /p( x , )\ x / p { 。x { x }에 2µ () ( x ) \ \_ { ( ) x ) ) 。 s _ _ _}( 따라서 확률의 기호는 로그 (를 포함하는 것으로
균일한 바이너리 바리안트(uABS)
2진수 알파벳과 확률 () \ \ (1 , ( ) 1 -p ( \ \ ( 0 ) = 1 - 。x{ x}까지 약 x { p\x 1 ( ) ) uesuesuesuesuesuesuesuesues ) letuesuesuesuesuesuesuesuesuesuesuesuesuesues {\uesuesues {\1 = 1 = 1 let1 let1 let이 어피아란스 수는 x + ) p p 、 p - ( s =\ + -\cdisplaystyle prceil x } 로서 선택할 수 있습니다.
디코딩:
s = 동작하다((x+1)*p) - 동작하다(x*p) // 프랙트(x*p) < 1-p이면 0, 그렇지 않으면 1 한다면 s = 0 그리고나서 new_x = x - 동작하다(x*p) // D(x) = (new_x, 0), 이것은 new_x = floor (x*(1-p)와 동일합니다. 한다면 s = 1 그리고나서 new_x = 동작하다(x*p) // D(x) = (new_x, 1)
인코딩:
한다면 s = 0 그리고나서 new_x = 동작하다((x+1)/(1-p)) - 1 // C(x,0) = new_x 한다면 s = 1 그리고나서 new_x = 바닥.(x/p) // C(x,1) = new_x
p / p})의 표준 이진수 시스템(0과 1이 반전됨)에 해당하며, p {\ p의 경우 주어진 확률 분포에 최적화됩니다.를 들어 p 0.{ p입니다.3 이러한 공식은의 값(\x에 대한 표로 .
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | ||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 |
1/4<>기호는 s=1{\displaystyle s=1}자연수의 하위 집합에 밀도 p와 같이.;0.3<1/3{\displaystyle 1/4<0이 경우 직위를{0,3,6,10,13,16,20,23일 26.}{\displaystyle\와 같이{0,3,6,10,13,16,20,23,26,\ldots)}0.3{\displaystyle p=0.3},}해당합니다.3<, 1/3}, these 위치는 3 또는 4 증가합니다.여기에서는 3(\ p이므로 기호 패턴이 10개 위치마다 반복됩니다.
C C)}는 지정된 s s에 대응하는 행을 선택하고 이 행에서 된 x x를 선택하면 찾을 수 있습니다.그런 다음 맨 위 은( x, ) \ ( x, s ) \ C ( , 0) 11 \ C ( , 0 ) = 。
x 1({ x부터 시작하는 시퀀스 '0100'을 인코딩한다고 가정합니다. 먼저 s ({ s을 하면 ({ x=2 s s)에서 x s 0로 합니다. s ~ x 이 x({x에서 디코딩 D를 사용하여 기호 시퀀스를 검색할 수 있습니다.이 목적을 위해 표를 사용하여 첫 번째 행의x(\ x가 열을 결정하고 공백이 아닌 행과 기입된 값이 하는 s s및 x(\x)를 결정합니다.
범위 바리안트(rans) 및 스트리밍
범위 변형에서는 산술 공식도 사용하지만 큰 알파벳으로 연산할 수 있습니다.직관적으로 자연수 집합을 (\ 2 범위로 나누고, 각각의 자연수 집합을 가정된 확률 분포에 의해 주어진 비율의 하위 범위로 분할한다.
확률 를 2n 8-12비트) 로 양자화하는 것부터 시작합니다. 서 n은 일부 f [에 대해 p s [ / (\ style f으로 선택됩니다.
마스크 - { style { } = 및 누적 분포 함수를 .
여기서 주의해 주세요.CDF[s]
함수는 현재 기호의 확률이 식 값에 포함되지 않는다는 점에서 참 CDF가 아닙니다.대신,CDF[s]
는 이전의 모든 심볼의 총 확률을 나타냅니다.예:일반적인 정의 대신CDF[0] = f[0]
, 이 값은 다음과 같이 평가됩니다.CDF[0] = 0
이전 기호가 없기 때문에.
[ , - y \ [ , { }-]}은 함수(통상 테이블)를 나타냅니다.
기호.(y) = s 그런 그거 CDF[s] <=> y < > CDF[s+1]
부호화 함수는 다음과 같습니다.
C(x,s) = (바닥.(x / f[s]) << > n) + (x % f[s]) + CDF[s]
디코딩:s = symbol(x & mask)
D(x) = (f[s] * (x >> n) + (x & 마스크 ) - CDF[s], s)
이렇게 하면 일련의 기호를 큰 자연수 x로 인코딩할 수 있습니다.큰 숫자의 산술이 사용되지 않도록 하기 위해 실제로는 스트림의 배리언트가 사용됩니다 배리언트는 의 최하위 비트를 비트스트림으로 전송하거나 비트스트림에서 전송하거나 비트스트림에서 전송하거나 하는 x의 최하위 비트를 합니다b는2의 거듭제곱
rANS 배리언트x는 예를 들어 32비트입니다. 정규화 [ 2 , - x \[ ^ { , ^ { }}의 경우, 디코더는 필요에 따라 비트스트림에서 최하위 비트를 리필합니다.
한다면(x < > (1 << > 16)) x = (x << > 16) + 16비트 읽기()
테이블 바리안트(tANS)
tANS 배리언트는 x[ , L - x \ , - 1]의 동작 전체를 테이블에 넣습니다.이것에 의해, 곱셈의 필요성을 회피하는 유한 상태의 머신이 생성됩니다.
마지막으로 디코딩 루프의 스텝은 다음과 같이 기술할 수 있습니다.
t = 디코딩 테이블(x); x = t.새로운 X + 읽기 비트(t.nb비트); //상태 천이 기입 기호(t.기호.); //디코딩된 기호
부호화 루프의 순서:
s = 읽기 기호(); nb비트 = (x + ns[s]) >> r; // 정규화 재지정 비트 수 기입 비트(x, nb비트); // 최하위 비트를 비트스트림으로 전송 x = 부호화 테이블[개시하다[s] + (x >> nb비트)];
특정 tANS 부호화는[, L - 1 {L, 2L-1 위치에 기호를 할당하여 결정하며, 횟수는 가정된 확률에 비례해야 합니다.예를 들어, Pr(a)=3/8, Pr(b)=1/8, Pr(c)=2/8, Pr(d)=2/8 확률 분포에 대해 "superacdac" 할당을 선택할 수 있다.만약 기호가 2의 거듭제곱의 길이로 할당된다면, 우리는 허프만 부호화를 얻을 수 있을 것이다.예를 들어 "aaaabcdd" 심볼이 할당된 tANS의 경우 a->0, b->100, c->101, d->11 프리픽스코드를 취득합니다.
언급
허프만 부호화의 경우, TANS의 확률 분포를 수정하는 것은 상대적으로 비용이 많이 들기 때문에, 정적 상황에서 주로 사용되며, 일반적으로 일부 Lempel-Ziv 체계(예: ZSTD, LZFSE)와 함께 사용된다.이 경우 파일은 블록으로 분할됩니다. 각 블록에 대해 기호 빈도가 독립적으로 카운트된 다음 블록 헤더에 근사(양자화) 후 tANS의 정적 확률 분포로 사용됩니다.
이와는 대조적으로, rANS는 일반적으로 범위 부호화의 빠른 대체물로 사용된다(예: CRAM, LZNA, Draco).[13]곱셈이 필요하지만 메모리 효율이 높아 확률 분포를 동적으로 조정하는 데 적합합니다.
ANS의 부호화 및 복호화는 반대 방향으로 실행되므로 기호 스택이 됩니다.이 불편은 보통 역방향 인코딩으로 해결되며, 그 후 디코딩이 진행됩니다.마르코프 모델과 같이 콘텍스트 의존성을 위해 인코더는 나중에 디코딩하는 관점에서 콘텍스트를 사용할 필요가 있습니다.적응성을 위해 인코더는 먼저 디코더에 의해 사용되는(예측된) 확률을 찾아 버퍼에 저장한 후 버퍼된 확률을 사용하여 역방향으로 인코딩해야 합니다.
디코딩을 시작하려면 인코딩의 최종 상태가 필요하므로 압축 파일에 저장해야 합니다.이 비용은 인코더의 초기 상태에 정보를 저장함으로써 보상할 수 있습니다.예를 들어 "10000" 상태로 시작하는 대신 "1****" 상태로 시작합니다. 여기서 "*"는 디코딩 마지막에 검색할 수 있는 일부 추가 저장 비트입니다.또, 이 상태를 체크섬으로서 사용할 수 있는 것은, 고정 상태로 부호화를 개시해, 디코딩의 최종 상태가 예상되는 상태인지 아닌지를 테스트하는 것이다.
특허 논란
소설 ANS 알고리즘과 그 변형 TANS 및 rANS의 저자는 특히 이타적인 이유로 공공 영역에서 그의 작품을 자유롭게 이용할 수 있도록 의도했다.그는 그들에게서 이익을 얻으려고 하지 않았고, 그들이 "법적 지뢰밭"이 되지 않도록 하기 위한 조치를 취했다.2015년 구글은 "부울-토큰과 계수 코딩의 혼합"[22]에 대한 미국과 전 세계 특허를 발표했습니다.당시 두다 교수는 구글로부터 동영상 압축을 도와달라는 요청을 받았기 때문에 원저자가 이들을 도와준다는 점을 잘 알고 있었다.
Duda는 구글의 특허 의도를 발견한 것을 달가워하지 않았다. 왜냐하면 그는 구글을 퍼블릭 도메인으로 원했고, 그 기반으로 구글을 특별히 도왔기 때문이다.Duda는 그 후 미국 특허청에 제3자 출원을[23] 제출하여 거절을 요청하였다.USPTO는 2018년 출원을 거절했고 구글은 이후 특허를 [24]포기했다.
2019년 6월 마이크로소프트는 "범위 비대칭 번호 시스템 인코딩 및 [25]디코딩의 특징"이라는 특허 출원을 제출했습니다.USPTO는 2020년 10월 27일 최종 신청을 기각했다.그러나 2021년 3월 2일 마이크로소프트는 "신청자는 정중히 [26]거절에 동의하지 않는다"는 내용의 USPTO 설명서를 제출하여 "After Final Conversition Pilot 2.0"[27] 프로그램에 따라 최종 거절을 뒤집으려고 했습니다.재심의를 거쳐 미국 특허청은 2022년 [28]1월 25일 신청을 승인했다.
「 」를 참조해 주세요.
레퍼런스
- ^ J. Duda, K.Tahboub, N. J. Gadil, E. J. Delp, Huffman 코딩의 정확한 대체로서 비대칭 숫자 시스템을 사용한다, Picture Coding Symposium, 2015.
- ^ J. Duda, Asymmetric number systems: 허프만 부호화의 속도와 산술 부호화의 압축률을 결합한 엔트로피 부호화, arXiv:1311.2540, 2013.
- ^ "Dr Jarosław Duda (Jarek Duda)". Institute of Theoretical Physics. Jagiellonian University in Krakow. Retrieved 2021-08-02.
- ^ Duda, Jarek (October 6, 2019). "List of compressors using ANS, implementations and other materials". Retrieved October 6, 2019.
- ^ "Google Accused of Trying to Patent Public Domain Technology". Bleeping Computer. September 11, 2017.
- ^ 2016년 8월 Zstandard, Facebook을 통해 보다 작고 빠른 데이터 압축.
- ^ Facebook은 Zstandard, Facebook, 2018년 12월에 규모에 맞게 압축을 개선했습니다.
- ^ Zstd Compression For Btrfs & Squashfs Linux 4.14용 세트, Facebook, Phoronix, 2017년 9월 사용 완료.
- ^ "Zstd in Android P release".
- ^ Zstandard 압축 및 응용 프로그램/zstd 미디어 유형(이메일 표준).
- ^ Hypertext Transfer Protocol(HTTP) 파라미터, IANA.
- ^ Apple Open-Sources New Compression Algorithm LZFSE, InfoQ, 2016년 7월
- ^ a b Google Draco 3D 압축 라이브러리.
- ^ Google과 Pixar는 Universal Scene Description (USD) Format에 Draco Compression을 추가합니다.
- ^ Google PIK: 인터넷을 위한 새로운 손실 이미지 형식.
- ^ CRAM 포맷 사양(버전 3.0).
- ^ Chen W, Elliott LT (2021). "Compression for population genetic data through finite-state entropy". J Bioinform Comput Biol: 2150026. doi:10.1142/S0219720021500268. PMID 34590992.
- ^ DivANs와 함께 더 나은 압축 기능을 구축합니다.
- ^ Microsoft Direct Storage의 개요.
- ^ Rhatushnyak, Alexander; Wassenberg, Jan; Sneyers, Jon; Alakuijala, Jyrki; Vandevenne, Lode; Versari, Luca; Obryk, Robert; Szabadka, Zoltan; Kliuchnikov, Evgenii; Comsa, Iulia-Maria; Potempa, Krzysztof; Bruse, Martin; Firsching, Moritz; Khasanova, Renata; Ruud van Asseldonk; Boukortt, Sami; Gomez, Sebastian; Fischbacher, Thomas (2019). "Committee Draft of JPEG XL Image Coding System". arXiv:1908.03565 [eess.IV].
- ^ 데이터 압축 설명, Matt Mahoney
- ^ "Mixed boolean-token ans coefficient coding". Google. Retrieved 14 June 2021.
- ^ "Protest to Google" (PDF). Institute of Theoretical Physics. Jagiellonian University in Krakow Poland. Professor Jarosław Duda.
- ^ "After Patent Office Rejection, It is Time For Google To Abandon Its Attempt to Patent Use of Public Domain Algorithm". EFF.
- ^ "Features of range asymmetric number system encoding and decoding". Retrieved 14 June 2021.
- ^ "Third time's a harm? Microsoft tries to get twice-rejected compression patent past skeptical examiners". The Register. Retrieved 14 June 2021.
- ^ "After Final Consideration Pilot 2.0". United States Patent and Trademark Office. United States Patent and Trademark Office. Retrieved 14 June 2021.
- ^ "Features of range asymmetric number system encoding and decoding". Retrieved 16 February 2022.
외부 링크
- 비대칭 수치 시스템 엔트로피 코드화를 위한 높은 처리량 하드웨어 아키텍처 S. M. Najmabadi, Z.Wang, Y. Baroud, S. Simon, ISPA 2015
- https://github.com/Cyan4973/FiniteStateEntropy Yann Collet에 의한 tANS의 유한 상태 엔트로피(FSE) 구현
- https://github.com/rygorous/ryg_rans Fabian Giesen의 rANS 구현
- https://github.com/jkbonfield/rans_static James K에 의한 rANS 및 아티메틱 코딩의 신속한 구현.본필드
- https://github.com/facebook/zstd/ Yann Collet의 Facebook Zstandard 컴프레서(LZ4 저자)
- https://github.com/lzfse/lzfse Apple Inc.의 LZFSE 컴프레서(LZ+FSE)
- 유럽생물정보학연구소의 CRAM 3.0 DNA 압축기(1rANS 주문)(SAMtools의 일부)
- 구글 VP10용 https://chromium-review.googlesource.com/ #/c/318743 구현
- https://chromium-review.googlesource.com/ #/c/338781/구글 WebP 구현
- https://github.com/google/draco/tree/master/core Google Draco 3D 압축 라이브러리
- https://aomedia.googlesource.com/aom/+/master/aom_dsp의 오픈 미디어 제휴 구현
- http://demonstrations.wolfram.com/DataCompressionUsingAsymmetricNumeralSystems/ Wolfram 데모 프로젝트
- http://gamma.cs.unc.edu/GST/ GST: GPU 디코딩 가능한 초압축 텍스처
- A의 압축책 이해.해키