지수 가중 이동평균(Exponentially Weighted Averages) *

2 분 소요

  • 제목에 * 표시가 있는 것은 추가할 내용이 있거나 수정할 내용이 있다는 표시입니다.
  • 이 글은 deepLearning.ai의 Andrew Ng 교수님 강의를 정리하였음을 미리 밝힙니다.

지수 가중 이동평균(Exponentially Weighted Averages)

지수 가중 이동평균은 경사하강법 및 미니배치 경사하강법보다 효율적인 알고리즘을 이해하기위해 알아야하는 개념입니다. 이 개념은 최근 데이터에 더 많은 영향을 받는 데이터들의 평균 흐름을 계산하기 위한 것으로 최근 데이터에 더 높은 가중치를 줍니다. 수식으로 알아보겠습니다.

여기서 번째 데이터의 가중 지수가중이동평균입니다. 그리고 값은 하이퍼파라미터로 최적의 값을 찾아야하는데 보통은 0.9를 많이 사용합니다. 마지막으로 번째 데이터의 값입니다. 그럼 먼저 값을 변경해보면서 이 수식에 대한 이해를 해보겠습니다.

우선, 가 0.9일 경우를 보겠습니다. 사실 이 때의 는 이전 10개의 데이터의 평균과 거의 같습니다. 이는 아래 식으로 계산해낼 수 있습니다.

average of the previous data

우선 지금은 에 따른 지수가중이동평균값을 이해하기위해 위 식이 성립하는 이유는 나중에 언급하겠습니다. 다시 돌아와서 가 0.9일때 지수가중이동평균 그래프는 다음과 같이 그려집니다. 아래 붉은선 그래프는 일년동안의 기온변화를 지수가중이동평균으로 나타낸 그래프입니다.


absolute
Andrew Ng 강의 슬라이드


그렇다면 값을 조금 높여서 0.98일때는 어떤 그래프가 그려질까요?


absolute


위와 같이 가 0.98일때, 0.9일때보다 완만하고 부드러운 곡선인 이유는 1/(1-0.98)의 값이 50이므로 위 녹색 그래프는 50개 데이터의 평균값으로 만들어지기 때문입니다. 더 많은 데이터의 평균값을 이용하기 때문에 곡선이 더 부드러워 집니다. 이는 원래의 데이터의 값과 더 멀어진다고도 할 수 있습니다. 더 큰 범위 데이터에서 평균 낸 값이기 때문입니다. 여기서 내릴 수 있는 결론은 값이 클수록 선이 더 부드러워진다는 것입니다. 그렇다면 를 0.5로 낮춘다면 어떤 그래프가 그려질까요? 그래프를 그리기 이전에 어떻게 그려질지 예측할 수 있을 것입니다.


absolute


1/(1-0.5)의 값이 2이므로 2개의 데이터의 평균값으로 그래프가 그려집니다. 오직 2개의 데이터만 이용하므로 노이즈가 심하고 민감한 그래프가 그려지는 것입니다.

그럼 이제 처음에 봤던 지수가중이동평균 식을 상세하게 분석해 보겠습니다.

설명을 편하게 하기위해서 의 순서를 역순으로 했습니다. 맨 위에 에 대한 식은 를 대체해주므로써 아래와 같이 표현할 수 있습니다.

그리고 위 식의 을 또 다음과 같이 대체할 수 있습니다.

반복적으로 값을 대체해준 후 풀어쓰면 아래와 같은 식이 나오지요.

마지막 식을 통해서 규칙성을 파악하셨겠지만 는 이전 데이터에 지수적으로 감소하는 함수를 곱해주고 모두 더해주는 것입니다. 앞의 계수들을 모두 더하면 1 또는 1에 가까운 값이 됩니다. 이는 아래서 자세히 설명드릴 편향보정 이라고 불리는 값 입니다. 이 값들에 의해 지수가중평균이 되는 것입니다. 그럼 가 얼마나 많은 데이터의 평균값이 되는지 궁금하실 겁니다. 위 예시에서 사용한 값인 0.9의 10거듭제곱 값은 대략적으로 0.35와 같습니다. 이는 값과도 대략적으로 같습니다. 일반적으로 표현하자면

즉, 값이 되기까지 이전 10개의 데이터가 필요한 것입니다. 이를 한 눈에 이해하기 위해서 아래 그림을 확인해 보겠습니다.


absolute


위 그림과 같이 10개 이전의 데이터의 가중치가 현재 가중치의 약 1/3로 줄어드는 것입니다. 이전에 예시로 들었던 값인 0.98의 경우 이 대략적으로 와 같습니다. 이는 이전에 언급했던 를 관습적으로 쓰는 이유입니다. 이기 때문이지요.

실제로 구현할 때는 을 모두 변수화 하지 않습니다. 아래와 같이 값을 덮어씌워 줍니다. ( 로 표시한 이유는 를 매개변수로 하는 지수가중이동평균을 계산한다는 것을 나타내기 위함입니다.)

Repeat {

}

이렇게 는 매번 업데이트 됩니다. 이렇게 지수평균값을 얻는 장점은 아주 적은 메모리를 사용한다는 점입니다. 가장 최근에 얻은 값을 계속 덮어쓰기만 하면 되니까요. 이 방법은 컴퓨터 계산비용과 메모리 효율 측면에서 더 효율적이기 때문에 오늘날 머신러닝에서 많이 사용하고 있습니다.

댓글남기기