AI 하드웨어·소프트웨어 스택
소프트맥스 함수 exp(xi)/Σexp(xj)를 계산할 때 각 xi에서 최댓값을 뺀 뒤 계산하는 경우가 많은 이유로 올바른 것은 무엇인가?
- A계산 결과를 근삿값으로 바꾸어 빠르게 하기 위해
- B최대 요소를 반드시 0으로 만들기 위해
- C결과는 그대로이면서 exp 값이 너무 커져 오버플로(무한대가 됨)하는 것을 막을 수 있기 때문
정답과 해설 보기
정답: C. 결과는 그대로이면서 exp 값이 너무 커져 오버플로(무한대가 됨)하는 것을 막을 수 있기 때문
exp는 급격히 커지는 함수여서, 예를 들어 FP16에서는 x가 11 정도를 넘으면 exp(x)가 표현 가능한 최댓값을 넘어 버립니다. 모든 x에서 같은 상수 m을 빼면 분자와 분모가 모두 exp(-m)배가 될 뿐 결과는 변하지 않습니다. 최댓값을 빼면 지수가 0 이하가 되어 exp 값이 1 이하로 수렴하므로 오버플로하지 않습니다. 낮은 정밀도로 계산하는 AI에서 특히 중요한 기법이며 고속 어텐션 구현에서도 사용됩니다.
- A. 결과는 정확히 같습니다.
- B. 최대 요소의 출력이 가장 커지며 0이 되지 않습니다.
- C. 정답입니다. 분자와 분모에 같은 계수가 곱해질 뿐입니다.