Range vs Resolution

마지막 수정:

precisiondtyperangeresolutionmantissaexponent

precision을 볼 때는 두 질문을 나눠야 한다.

1. 얼마나 큰/작은 숫자까지 표현할 수 있는가?
2. 가까운 숫자들을 얼마나 촘촘하게 구분할 수 있는가?

첫 번째가 range고, 두 번째가 resolution이다.

Range

range는 주로 exponent bit가 결정한다.

exponent bit 많음
-> 아주 작은 수와 아주 큰 수를 더 넓게 표현

BF16이 FP16보다 학습에서 안정적인 이유가 여기에 있다. BF16은 FP32처럼 exponent bit가 8개라서 range가 넓다.

Resolution

resolution은 주로 mantissa bit가 결정한다.

mantissa bit 많음
-> 1.0, 1.0001, 1.0002 같은 가까운 값을 더 촘촘하게 표현

mantissa bit가 줄어들면 실제 값은 가까운 representable value로 반올림된다. 이때 작은 변화가 사라질 수 있다.

1.0
2.0
같은 1~2 구간에서도 mantissa bit가 줄어들수록 찍을 수 있는 숫자 위치가 급격히 줄어든다.

왜 학습에서 중요할까

gradient와 weight update는 매우 작을 수 있다.

weight = 1.0
update = 0.00001

dtype의 resolution이 너무 거칠면 update가 숫자 표현에 반영되지 않을 수 있다. 또는 값이 너무 작아 표현 범위 바깥으로 밀려 0이 될 수도 있다.

이 문제가 mixed precision training에서 master weights, FP32 accumulation, loss scaling이 필요한 이유다.

확인

  • range와 resolution은 같은 말인가?
  • BF16은 FP16보다 range가 넓지만 어떤 비용을 치르는가?
  • 작은 gradient가 낮은 precision에서 사라질 수 있는 이유는 무엇인가?