혼합 정밀도와 손실 스케일링

모델이 실제로 학습하는 방법 — 순수 경사 하강법에서 Adam까지

혼합 정밀도 훈련은 속도와 메모리를 위해 더 작은 수 형식을 사용합니다. 모든 계산을 전체 정밀도(표준 32비트 부동소수점)로 저장하는 대신, 많은 연산이 float16이나 bfloat16을 씁니다. 이 16비트 형식들은 메모리를 절반만 차지하는 대신 정밀도가 낮아지고, float16의 경우 표현할 수 있는 크기의 범위도 더 좁아집니다.

위험은 수치 범위에 있습니다. 어떤 그래디언트는 아주 작습니다. 작은 수가 0으로 반올림되어 버리면, 최적화기는 정보를 잃습니다. 손실 스케일링은 역전파 전에 손실에 곱셈을 해서 그런 작은 그래디언트들을 지켜 낸 다음, 나중에 그래디언트를 다시 나누어 줍니다.

정수 그램 단위로 반올림하는 주방 저울은 아주 적은 향신료 한 꼬집을 놓칠 수 있습니다. 똑같은 한 꼬집을 열 번 모아 함께 달면, 저울은 그 합계를 볼 수 있습니다. 그런 다음 10으로 나누어 한 꼬집을 되찾습니다. 손실 스케일링도 같은 요령을 씁니다. 작은 값을 표현하기 쉽게 만든 다음, 나중에 다시 스케일을 되돌리는 것입니다. 아래 그림은 무엇이 걸려 있는지를 상기시켜 줍니다. 하강은 각 스텝의 그래디언트가 연산 과정에서 살아남을 때만 작동합니다. 정밀도는 루프 자체를 바꾸지는 않지만, 최솟값 근처의 미세한 기울기가 그 루프에 여전히 보이는지 아닌지를 결정합니다.

머신러닝에서의 위치혼합 정밀도는 대형 신경망이 최신 하드웨어에서 빠르게 훈련되는 이유 중 하나입니다. 최적화기는 여전히 같은 개념을 필요로 하지만, 수치 스케일이 이제 훈련 레시피의 일부가 됩니다.
▶ 혼합 정밀도와 손실 스케일링
← 교대 최소제곱법배치 크기 스케일링 →