[pytorch]torch.optim.RMSprop

ma-kjh·2024년 8월 18일
0

Pytorch

목록 보기
19/20

https://pytorch.org/docs/stable/generated/torch.optim.RMSprop.html

RMSprop 수도코드는 아래와 같다.

차근차근 위 내용을 설명해보자.

일단 RMSprop이 왜나왔나부터 보면

AdaGrad의 학습이 진행될 때 학습률(Learning rate)이 꾸준히 감소한다는 문제. RMSProp은 이러한 한계점을 보완한 최적화 기법으로 EMA(Exponential Moving Average)를 사용한 gradient update를 사용.

gtθft(θt1)g_t\leftarrow \nabla_\theta f_t(\theta_{t-1})

이전 parameter에서 theta에 대한 gradient를 구한다.

gtgt+λθt1g_t\leftarrow g_t + \lambda \theta_{t-1}

weight decay 있다면, 해당 weight decay 만큼 더해준다. (추후 weight decay 설명)

vtαvt1+(1α)gt2v_t\leftarrow\alpha v_{t-1}+(1-\alpha) g_t^2

여기서 vtv_t의 의미는 gradient를 얼만큼 업데이트 해줄 지 정해주는 값.

RMSprop에서 centered 옵션은 옵티마이저가 가중치 업데이트를 계산할 때, 변화량(gradient)을 처리하는 방식에 변화를 준다.

Centered RMSprop

centered=True 옵션을 사용하는 경우, RMSprop은 gradient의 제곱값만 사용하는 대신, 중심화된 (centered) 방법으로 변형. 이는 다음과 같은 추가 단계를 포함.:

  1. 평균 변화량 E[g]tE[g]_t의 추정:
    E[g]t=ρE[g]t1+(1ρ)gtE[g]_t = \rho E[g]_{t-1} + (1-\rho) g_t
    이 식은 gradient의 이동 평균을 추정.

  2. 중심화된 제곱 변화량의 추정:
    Centered E[g2]t=E[g2]t(E[g]t)2\text{Centered } E[g^2]_t = E[g^2]_t - (E[g]_t)^2
    이 식은 gradient의 제곱값에서 평균의 제곱을 빼서 중앙값을 조정한 것입니다. 이는 변수의 분산과 유사하게 동작.

  3. 가중치 업데이트:
    θt+1=θtηCentered E[g2]t+ϵgt\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\text{Centered } E[g^2]_t + \epsilon}} g_t

이게 아니라면 그대로 업데이트.

profile
거인의 어깨에 올라서서 더 넓은 세상을 바라보라 - 아이작 뉴턴

0개의 댓글