Processing math: 100%

ABOUT ME

깃허브 주소 : https://github.com/tolfromj

Today
Yesterday
Total
  • EMA(Exponential Moving Average, EMA) 지수이동평균
    Mathematics/Calculus 2023. 11. 22. 22:45

    * EMA(Exponential Moving Average, EMA) 지수 이동 평균

    https://www.youtube.com/watch?v=NxTFlzBjS-4&list=PLkDaE6sCZn6Hn0vK8co82zjQtt3T2Nkqc&index=18

    각 날짜별 온도를 가지고 지수이동평균을 구하고자 한다.

    현재의 지수이동평균값은 과거의 온도값의 영향에 가중치를 곱해서 구한 값이다. 즉 과거의 영향을 고려해서 값을 표현하고자 할 때 사용되는 것이다.

    지수평활법(EMA)이 모든 과거 데이터를 고려하는 반면, 이동평균(MA)은 k개의 과거 데이터 포인트만을 고려한다는 점에서 차이가 있다.

    (주식에서 5일 선, 120일 선 등은 MA를 말하는 것이고, 지수평활법에서는 모든 과거 데이터를 고려하므로, 5일 선, 120일 선 등의 표현은 조금 부적절해보인다.)

    Andrew Ng의 Deep Learing 강의

     

     

    theta는 1~100일의 현재 온도이고,  v는 지수이동평균값을 의미한다. 가중치(혹은 모멘텀) beta를 0.9로 잡아서 "10일" 지수이동평균을 구하는 과정이다.

    결론부터 말하자면,
    "x 축 : 시간, y축 : theta의 계수"인 그래프를 그렸을 때, theta의 계수 값이 1/e배로 감소하는데 걸리는 일 수(day)를 "00일" 지수이동평균 이라고 부른다.
     예를 들어 beta를 0.98로 설정하면, 시간과 theta의 계수에 대한 그래프를 그렸을 때, theta의 계수 값이 1/e배로 감소하는데 걸리는 시간은  50일(t=1/(1-beta)=1/(1-0.98)=50)이고, 이를 50일 지수이동평균이라고 부른다. 

     

    Vt=βVt1+(1β)θtvt는 이전 θ값의 영향을 β만큼 반영한 가중치 평균값이다.

    예를들어 β 가 0.9라고 할 때, 11β=110.9=10 이고, 

     

     v100=0.9v99+0.1θ100

     v99=0.9v98+0.1θ99

     v98=0.9v97+0.1θ98

     v97=0.9v96+0.1θ97

     v96=0.9v95+0.1θ96

    ...

    v0=0

    에서 v100v1 ~ v99 를 대입해보자.

    v100=0.9(0.9V98+0.1θ99) + 0.1 \theta_{100}$

    ...

    정리해주면 아래와 같다.

    v100=0.1θ100+0.10.91θ99+0.1(0.9)2θ98+0.1(0.9)3θ97+...+0.1(0.9)99θ1

    위 식은 θ에 대한 값과  0.1(β)100t 값을 element-wise product(요소별곱셈)한 것인데, 

    θ의 계수인 0.1(β)100t 부분만 살펴보면, t가 커질수록 지수적으로 증가하는 지수그래프 꼴이다.

    x=100이전까지는 초록선의 y값이 더 크다.

    0.1까지의 그래프가 잘 안 보이므로 그래프를 확대 및 과장해서 그리면 아래와 같다.

    조금 더 직관적으로 이해하기 위해 β의 값에 따른 의 변화를 θ의 계수의 변화를 살펴보고 최종적으로 지수평균값 v의 변화를 살펴보자.
    (1ϵ)1ϵ1e임을 이용해서  지수평균값v를 어림잡아 계산할 수 있다.

     

    예를 들어 beta를 0.9로 설정하면, θ의 계수 값이 1e로 감소하는데 걸리는 시간은  10일(t11β=110.9=10)이다. 

     

    또한 beta를 0.98로 설정하면, 시간과 theta의 계수에 대한 그래프를 그렸을 때, θ의 계수 값이 1e배로 감소하는데 걸리는 시간은  50일(t11β=110.98=50)이다.

     

    ( 왜 1e배 감소하는 지점을 기준으로 잡는가? - 모르겠다... )

    더보기

    1e배로 감소하는 지점을 기준으로 잡는 이유는 잘 모르겠다. 위키피디아에서 그 부분을 기준으로 잡는다고만 설명하는 것 같다.

    https://en.wikipedia.org/wiki/Exponential_smoothing

     

     

    초록 선이 y=0.10.98100t이다. 

    빨간 선이 y=0.10.9100t이고,

     

     

     

    지수평균값은 θθ의 계수 값의 요소곱임을 상기해서 위 결과를 아래 식과 연결시켜 생각해보자.

     

    v100=0.1θ100+0.10.981θ99+0.1(0.98)2θ98+0.1(0.98)3θ97+...+0.1(0.98)99θ1

     

    v100=0.1θ100+0.10.91θ99+0.1(0.9)2θ98+0.1(0.9)3θ97+...+0.1(0.9)99θ1

     

    β=0.98일 때는 θ50에서의 계수가 0.11e이고,

    β=0.9일 때는 θ90에서의 계수가 0.11e이다.

     

    β가 커질수록 θ의 계수가 감소하는데 오래 걸린다는 말이고, 최근 정보(θ가 큰 순)에 더 큰 가중치를 부여한다는 뜻이다. 즉 먼 과거의 정보는 서서히 잊고 새로운 정보를 크게 반영한다. (다시 말하면, 과거 정보의 반영 규모를 기하급수적으로 감소시킨다.)

     

     

    2023.09.12 - [Machine Learning] - [DL] Gradient Descent Methods

     

    [DL] Gradient Descent Methods

    * stochastic gradient descent 하나의 샘플로 gradient를 계산한다. * Mini-batch gradient descent a subset of data(샘플 일부)로 gradient를 계산한다. large batch methods는 sharp minimizers로 수렴되는 경향이 있고, small-batch met

    operationcoding.tistory.com

    Adam의 수식을 가져와서 지수이동평균의 관점에서 분석해보자.

    Adam

    Wt+1=Wtηvt+ϵ1β221βt1mt

    vt=β2vt1+(1β2)g2t 에서 g2t는 gradient 값을 제곱한 값인데,

    1vt+ϵ에서 분모에 EMA of gradient squares값은 Adagrad의 Gt와 닮았다.

    Adagrad

    1Gt+ϵ1vt+ϵ는 많이 변화시켰던 파라미터는 적게 변화시키고, 적게 변화시켰던 파라미터는 많이 변화시키는 방법인데, Adagrad의 문제는 Gt(sum of gradient squres)가 많이 학습된 이후에는 그 값이 매우 커지기 때문에 분모가 무한대로 가면서 학습이 안 되는 것이다. 하지만 Adam의 vt은 과거의 정보는 서서히 잊고 새로운 정보를 크게 반영하는 지수이동평균을 썼기 때문에 분모가 무한히 커지지 않는다. 

    또한 모멘텀 개념에도 지수이동평균을 적용해서, 최근의 정보를 더 크게 반영하면서 모멘텀의 학습 관성효과를 얻는다.

     

    댓글

Designed by Tistory.