티스토리 뷰

반응형

Coursera Optimization Algorithm

잘 작동되는 모델을 찾으려고 훈련을 반복해야하는 숙명에 놓여있는 머신러닝.

훈련의 반복이니까 모델을 빠르게 학습시키는 것도 중요하다.

엄청나게 많은 큰 데이터를 훈련하는 것은 엄청 느릴 것인데 그때문에 최적화 알고리즘을 사용하여 효율성을 좋게만들어야한다.



지난 시간에 그 중 하나인 미니배치경사하강법을 알았는데 그것보다 더 효율적인 알고리즘을 배우겠다..

하지만 일단, 그에 앞서서 다음을 알아야한다.

  • Exponentilally weighted average (지수가중평균)
  • Bias Correction (편향 보정)

 

이번 포스트에서는 지수가중평균에 대해서 알아보자.



Exponentilally weighted average(지수가중평균)

매개변수를 바꿈으로써 약간씩 다른 효과를 얻게되고 이를 통해 가장 잘 작동하는 것을 찾는 것.

통계학에서 나왔고 신경망 훈련에 사용되는 몇몇 최적화 알고리즘의 주요 구성요소이다.

What is it?

런던의 1년 동안의 기후 데이터를 가지고 있다고 생각하자. 이 데이터의 시간 흐름에 따른 온도의 이동 평균 흐름 을 알아보고 싶다.

단순히 평균값을 구하면 될 것 같지만, 온도가 높고 낮음이 시간에 따라 크기 때문에 특정한 날짜의 기온 흐름을 계산할 때 과거의 데이터가 분석흐름을 망칠 것이다.

그러므로 계산을 할 때 과거의 데이터에서는 영향을 덜 받게, 최근의 데이터에서는 영향을 많이 받을 수 있게 영향력을 달리할 수 있는 계산을 해야한다. 그래서 사람들은 최근 데이터에 과거와 현재 데이터의 가중치를 적용하여 흐름을 계산했고 그것을 단순이동평균이라고 불렀다. 근데 우리는 이것에서 더 나아가서 과거의 영향력이 시간이 지남에 따라 지수적으로 감소 할 수 있게끔 영향력을 죽여버리고 싶다. 즉, 지수적으로 감소하는 가중치를 적용하여 오래된 데이터일수록 현재의 경향에 더 적은 영향을 미치게 하는 것이다. 그것이 Exponentilally weighted average(지수가중평균) 이다.



How can I do?

  • 각 날의 데이터는 Θ 라고 생각하자.
    • ex) Θ = 8월 12일의 온도
  • 0~1의 값을 가지는 가중치 β 가 있다.
    • ex) β = 0.9
  • Vt를 그 날의 경향이라고 생각하면 경향은 아래와 같이 구할 수 있다.
V0 = 0
V1 = β*V0 + (1-β)*Θ1
V2 = β*V1 + (1-β)*Θ2-1
...

vt = β*vt-1 + (1-β)*Θt

β 를 0.9로 설정하면 10일동안의 기온 평균과 비슷해지고 빨간색 그래프를 얻게 된다.



β 를 0.98 으로 설정하면 50일동안의 기온 평균과 비슷해지고 보라색 그래프를 얻게 된다.



곡선이 부드러워졌다. 더 많은 날짜의 기온과 평균을 이용하였기때문이다. 큰 범위에서 기온 평균을 구하기 때문에 올바른 값에선 벗어날 수 밖에 없다.오래된 데이터에 가중치가 비교적 크게 잡혀있으므로 최신의 동향보다는 과거의 데이터에 비교적 더 많이 이끌리는 것이다.

즉, 지수가중평균은 β 가 커지면 더 느리게 적응한다.

그럼 β가 낮을 때는 어떨까?
β가 0.5일 때는 2일의 기온평균만 구하는 것과 비슷해진다. 그래서 노란색 그래프를 얻게된다.



노이즈가 많지만 기온 변화에 빠르게 적응한다. 즉 최신의 경향을 더 많이 캐치할 수 있는 것이다.

 

머신러닝에선 어떻게 쓰일까?

앞에서 식을 봤을 때 V100까지 구한다고 생각해보자.

V100을 구하려면 앞의 항이 필요할 것이다. 근데 앞의 항은 앞의 항에서 나왔고 앞의 항은 그 앞의 항에서 나오고.... 반복이다.

그럼 굳이 앞의 항들을 각각 메모리에 다 저장할 필요가 있을까?

V100로 오기까지의 앞선 항들의 값들은 모두 메모리에 저장할 필요없이 계속 메모리에 덮어씌우기만 하면 될 것이다. 그래서 아주 적은 메모리를 사용하게 되어 효율적이다. 평균을 계산하는 가장 정확하고 최선인 방법은 아니다. 그럴려면 그냥 명시적으로 10일이나 50일 구하고 10이나 50으로 나누는 것이 더 추정치가 좋다. 그런데 그럴려면 메모리가 많이 들고 복잡한 구현이 필요하다. 머신러닝은 많은 변수를 계산해야하기 때문에 많은 변수의 평균(흐름에 따른)을 내고싶으면 컴퓨터 계산비용과 메모리 효율이 좋은 이 지수 가중 평균방법 을 쓴다.

반응형
댓글
반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함