4. 수치 계산
기계 학습 알고리즘에는 대량의 수치 계산이 필요하다. 대체로 그런 알고리즘들은 정답에 해당하는 기호적 표현을 제공하는 수학 공식을 해석적으로 유도해서 문제를 푸는 것이 아니라, 어떤 반복적인 과정을 통해서 정답의 추정값을 계속 갱신함으로써 문제를 푼다. 최적화나 일차연립방정식 풀기가 그런 예이다.
그런데 디지털 컴퓨터에서는 실수가 관여하는 수학 함수를 그냥 평가하는 것 자체가 어려운 일일 수 있다. 있는 유한한 메모리를 가진 디지털 컴퓨터는 실수를 정확하게 표현할 수 없기 때문이다.
4.1 넘침과 아래넘침
디지털 컴퓨터에서 연속 수학을 수행할 때 근본적인 난제는 무한히 많은 실수를 유한한 개수의 비트 패턴들로 표현해야 한다는 것이다. 이런경우 근사 오차가 발생할 수밖에 없다는 뜻이다.
많은 경우 그러한 오차는 그냥 반올림일 뿐이다. 그러나 이는 여러 연산을 거치면서 오차가 점점 쌓이면 문제가 커진다.
over, under flow 에 대해 안정화할 필요가 있는 함수의 한 예가 소프트 맥스 함수 softmax function 이다.
소프트 맥스 함수는 멀티누이 분포를 따르는 확률들을 예측하는 데 흔히 쓰인다.
소프트 맥스 함수의 정의
모든 x_i 가 어떤 상수 c 와 같으면 해석적으로 모든 출력이 1/n 과 같아야 한다. 그러나 수치적으로는 c 의 크기가 클 때 그렇게 되지 않을 수 있다. c 의 크기가 아주 큰 음수이면 exp(c) 는 underflow 가 발생한다.
결과적으로 소프트맥스 함수의 분모가 0이 되어서 최종 결과가 정의되지 않는 사태가 발생한다.
대신 입력 벡터에 스칼라를 더하거나 빼도 소프트맥스 함수의 값이 해석적으로 변하지 않으므로 입력 벡터에 스칼라를 더하거나 빼도 소프트맥스 함수 값이 해석적으로 변하지 않음을 확인할 수 있다.
그러나 분자의 underflow로 전체 수식이 0으로 평가될 수 있음을 주목해야 한다.
심층 학습 알고리즘을 구현할 때 수치 문제를 항상 염두해야 한다.