대표적인 경량화 방법중 하나인 Quantization 에 대해 알아보도록 하고, 이를 이해하기 위해 필요한 기초적인 개념에 대해 살펴보도록 한다.
컴퓨터는 0
과 1
로 이루어진 기계어로 표현된다. 그래서 우리가 사용하는 10진수를 2진수로 변환하여 컴퓨터가 이해할 수 있는 숫자로 표현할줄 알아야 한다. 정수(Integer) 의 10진수 -> 2진수
변환은 익히 알고 있는데, 소수점이 포함된 실수(Real Number)는 어떻게 표현될까?
우선 소수부 변환 방식을 알아야 하는데 정수 변환 방법과는 반대로 변환하면 된다. 즉, 정수 10진수 -> 2진수
변환시 2로 나눠서 변환하였다면, 반대로 소수부는 2를 곱해서 변환한다. 구체적으로 를 2진수로 변환하는 과정은 다음과 같다.
고정 소수점(Fixed Point)
표현 방식은 고정된 소수점을 기준으로 정수부, 소수부를 표현하는 것을 말한다. 위의 그림처럼 32-bit
체계를 쓴다고 가정한다면, 첫 비트는 부호를 결정하는 부호비트(Sign Bit)
로 0
이면 양수 / 1
이면 음수 를 나타낸다. 나머지 비트들은 고정된 소수점을 기준으로 8-bit 의 정수부(Integer Part)
, 23-bit 의 소수부(Fractional Part)
로 나뉘게 된다. 구체적으로 를 고정 소수점으로 표현한다면 다음과 같다.
Sign Bit : 양수이므로 0
으로 채운다.
Integer Part : 이고 나머지 bit는 0
으로 채운다.
Fractional Part : 이고 나머지 bit는 0
으로 채운다.$
고정 소수점 표현방식은 구현하기에는 편리하지만, 비트 수 대비 표현 가능한 수의 범위 또는 정밀도가 낮기 때문에 실수를 다룰 필요가 있는 범용 시스템에서는 거의 쓰이지 않고, 높은 정밀도가 필요 없는 소규모 시스템에서는 간혹 쓰이기도 한다고 한다.
부동 소수점(Floating Point)
표현 방식은 소수점이 고정되지 않고 좌우로 움직일 수 있도록 표현 하는것을 말한다. 위의 그림처럼 32-bit
체계를 따른다고 가정하면, IEEE 754 에 따르면 첫 비트는 부호를 결정하는 부호비트(Sign Bit)
로 0
이면 양수 / 1
이면 음수 를 나타낸다. 나머지 비트들은 8-bit 의 지수부(Exponent)
, 23-bit 의 가수부(Fraction/Mantissa)
로 나뉘게 된다. 그렇다면 지수부
와 가수부
는 무엇을 의미하는 것일까?
위에서 사용한 예제 를 사용하여 부동 소수점 방식으로 표현되는 과정을 살펴보도록 한다.
정규화 된 부동소수점 수
여기서 말하는 정규화의 의미는 다음과 같이 으로 표현하는 것을 말한다. 즉, 정수부에 1만 남을때까지 소수점을 좌 / 우로 소수점을 민다. 가령, 를 정규화 하면 소수점을 왼쪽으로 밀어 를 얻게 된다. 주의할것은 만약 를 정규화 한다면 소수점을 오른쪽으로 밀어 로 정규화 한다.
가수부
(1)번에서 얻은 정규화 된 부동 소수점 수 에서 가수부는 이다. 하지만 정규화 시 항상 정수부가 1 이 되도록 하기 때문에 소수점 이후의 부분 만을 가수부에 표현한다. 이때 1
을 Hidden Bit
라고 부르기도 한다 .
지수부
(1)번에서의 예시처럼 지수의 부호는 양수 / 음수 의 값을 가질 수 있다.(부호 비트는 지수의 부호가 아닌 전체 숫자의 부호를 뜻하는 것이므로 혼동하지 않도록 한다.) 하지만 지수의 부호를 표현하기 위해 지수 부호비트를 새로 만드는것은 복잡한 일이다. 그래서 32-bit
체계를 기준으로 지수부가 8-bit로 표현 되므로 지수가 표현될수 있는 경우의 수 를 양수, 음수로 나누어 0~126(00000000~01111110)
은 음수(-127~-1)
/ 127(01111111)
는 0
/ 128~255(10000000~11111111)
은 양수(1~128)
를 표현하도록 만든다. 구체적으로 (1)번에서 정규화된 부동 소수점 에서 지수는 2
이다. 이때 단순히 로 표현한다면 -125
를 의미하는 것이므로 bias=127
를 더한 를 지수부에 채운다.(만약 64-bit
체계라면 지수부는 11-bit , 가수부 는 52-bit 이다. 따라서 지수부는 를 표현할수 있기 때문에 bias=1023
이 된다.)
를 부동 소수점으로 표현하는 과정을 다시 한번 정리하면 다음과 같다.
Sign Bit : 양수이므로 0
으로 채운다.
Exponent : 정규화된 부동 소수점 수 의 지수 부분 2
와 bias=127
를 더해 를 지수부에 채운다.
Mantissa : 정규화된 부동 소수점 수 의 소수점 오른쪽 부분을 채워넣고 나머지 bit는 0
으로 채운다.
부동소수점 표현 방식은 bias, 정규화 등 고정 소수점 표현 방식보다 복잡하지만 비트 수 대비 표현 가능한 수의 범위와 정밀도 측면에서 보다 우위에 있다.
Fixed Point vs Floating Point 1
Fixed Point vs Floating Point 2