Range vs Resolution
마지막 수정:
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
왜 학습에서 중요할까
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에서 사라질 수 있는 이유는 무엇인가?