본문 바로가기
programming/python

[PY] 머신러닝과 부동소수점

by AteN 2022. 11. 21.

부동소수점

머신러닝에서 부동소수점은 매우 중요합니다. 머신러닝 모델은 대개 숫자들의 배열로 나타내어지며, 부동소수점은 대부분의 숫자를 나타낼 때 사용됩니다. 부동소수점은 고정소수점보다 더 정확한 표현을 제공하기 때문에, 머신러닝 모델에서 사용되는 숫자들은 대개 부동소수점으로 표현됩니다.

머신러닝 모델에서 부동소수점은 주로 신경망의 가중치와 편향을 나타내는데 사용됩니다. 이러한 매개변수들은 학습 알고리즘에 의해 조정되며, 이 과정에서 부동소수점의 정밀도가 매우 중요합니다. 정밀도가 높을수록 모델이 더 높은 정확도를 달성할 수 있지만, 연산 비용이 증가할 수 있습니다.

머신러닝에서 부동소수점 연산은 대개 GPU를 사용하여 수행됩니다. 이는 GPU가 대량의 부동소수점 연산을 지원하기 때문입니다. GPU의 대부분은 32비트 또는 64비트 부동소수점 연산을 지원하며, 최신 GPU에서는 16비트 부동소수점 연산도 지원됩니다. 16비트 연산은 32비트 연산보다 더 빠르고 메모리 사용량도 적습니다.

따라서 부동소수점 연산의 정밀도와 성능을 균형있게 유지하는 것이 중요합니다. 이를 위해 머신러닝 라이브러리와 하드웨어는 각각의 장점을 최대한 활용하여 최적의 성능을 제공하도록 최적화됩니다.

 

부동 소수점 표현

  • 고정 소수점 표현보다 표현의 정밀도를 높일 수 있음
  • 아주 작은 수와 아주 큰 수의 표현에 적합
  • 수 표현에 필요한 자리 수에 있어 효율적임
  • 과학이나 공학, 수학적인 응용에 주로 사용되는 수 표현
  • 부동 소수점 수의 연산은 고정 소수점 연산에 비해 복잡하며, 연산 시간이 많이 걸림

 

부동 소수점의 형식

부동소수점은 32bit와 64bit 로 나누어지며, 아래와 같이 지수부와 기수부에 따라 표현한다

1. 단일 정밀도 (single-precision) 부동 소수점 방식 = 단정도

  • 32bit 실수로 표현
  • [ S(부호) : 1비트] [ E(지수부) : 8비트 ] [ M(기수부) : 23비트 ]

2. 복수 정밀도 (Double-precision) 부동 소수점 방식 = 배정도

  • 64bit 실수로 표현
  • [ S(부호) : 1비트 ] [ E(지수부) : 11비트 ] [ M(기수부) : 52비트 ]

※지수(E) 필드의 비트 수 증가 - 표현 가능한 수의 범위 확장

※기수(M) 필드의 비트 수 증가 - 정밀도 증가

 

정규화된 표현

  • 정규화를 수행하는 이유 : 유효 숫자를 늘리기 위함
  • 32비트(float) 메모리에 부동소수점을 저장할 때는 유효자릿수 7자리까지는 거의 가능하다.
  • 64비트(double) 메모리에 부동소수점을 저장할 때는 유효자릿수 16자리까지는 거의 가능하다.

ex) 11010 를 정규화로 표현

0.1101 x \(2^5\)

부호 (S) ; 0 (양수)

지수 (E) ; 00000101(5)

기수 (M) : 1101 0000 0000 0000 0000 000

 

바이이스(Bias)된 지수

  • 정규화된 부동 소수점 방식으로 표현하게 될 경우 지수의 음수처리 문제가 발생

11010 → 0.1101 x \(2^5\)

0.000001101 → 0.1101 x \(2^-5\)

  • 지부수에서 음수를 처리할 수 없으므로 지수부를 양수로 만들기 위해 약속된 바이어스 수를 더함

지수부가 8비트인 경우 지수부가 7비트인 경우

-128 바이어스법 : 지수 + 128 (100000000)-127 바이어스법 : 지수 + 127 (011111111) - 64 바이어스법 : 지수 + 64(1000000)

ex) 바이어스된 지수를 사용한 부동 소수점 표현의 예 (128 바이어스의 경우)

  • 13.625

13.625 = 1101.101(2) = 0.1101101 x \(2^3\)

부호 (S) ; 1 (음수)

지수 (E) ; 00000100(4) + 100000000(128) = 10000100

기수 (M) : 1101 1010 0000 0000 0000 000

 

IEEE754 표준 부동 소수점 표현

  • 부동 소수점 수의 표현 방식의 통일을 위하여 미국 전기전자공학회(IEEE)에서 정의한 표준

부호 (S) ; 양수(0), 음수(1)지수 (E) ; 127 바이어스 사용기수 (M) : 1.M의 형태, 소수점 아래의 M부분만 기수 필드에 저장 (1은 hidden bit)

 

ex) IEEE754 표준 부동 소수점 표현의 예

  • 13.625

13.625 = 1101.101(2) = 1.101101 x 2^3

부호 (S)  :  1 (음수)

지수 (E)  :  00000011(3) + 01111111(127) = 10000010

기수 (M) :  1101 0100 0000 0000 0000 000

댓글