Optimizer

임광영·2022년 7월 11일
0

DeepLearning

목록 보기
15/18

Optimization (최적화)

학습에 있어서 중요한 것은 틀리지 않은 방향으로 학습하는 것.

loss function의 최솟값을 찾는 것이 학습의 목표.

최솟값을 찾아가는 과정 : 최적화(optimization)
이 과정을 행하는 알고리즘 : 최적화 알고리즘(optimizer).

Objective vs Loss vs Cost
Objective function : 학습을 통해 최적화시키려는 함수.
Loss function : single input에 대한 yyy^\hat{y} 사이의 오차를 계산하는 함수.
Cost function : entire input에 대해서 오차를 계산하는 함수.

즉, Objective ftn > Loss ftn > Cost ftn



Gradient Descent

경사(Gradient)가 가파른 방향으로 이동하여 최솟값을 찾는 알고리즘.
목적함수 J(θ)J(\theta)의 최소화.

θt+1=θtη×θJ(θ)\theta_{t+1}=\theta_t-\eta\times\nabla_{\theta} J(\theta) where η\eta is a learning rate.

Gradient θJ(θ)\nabla_{\theta}J(\theta)를 빼줌으로써 최솟값을 찾음.

Learning rate η\eta
η\eta가 작다면 수렴 속도가 느려짐.
η\eta가 크다면 minimum을 지나쳐버릴 수 있고 발산할 수도 있음.

1) Batch Gradient Descent (BGD)

전체 학습 데이터를 하나의 batch로 묶어 학습.
전체 data set에 대한 error의 평균을 구하여 Gradient 계산.

장점
업데이트 횟수가 적음. (1 epoch당 1회 업데이트)
안정적인 수렴.

단점
학습이 오래 걸림.
local minimum에 빠지기 쉬움.

2) Stochastic Gradient Descent (SGD)

전체 학습 데이터 중 단 하나의 데이터를 이용하여 학습.
전체 data set 중 랜덤하게 하나의 데이터를 학습하므로 확률적.

장점
적은 데이터로 학습 가능.
1회 학습이 빠름.
local minimum에 잘 빠지지 않음.

단점
불안정적인 수렴.
saddle Point에서 학습 종료.

3) Mini-batch Gradient Descent (MGD)

BGD와 SGD의 절충안.
전체 학습 데이터를 batch size개로 나누어 학습.

장점
계산량이 BGD보다 적으므로 학습이 상대적으로 빠름.
SGD에 비해 정확도가 높음.
local minimum을 어느정도 피할 수 있음.

Mini-batch size
전체 데이터 크기를 n
1) Mini-batch size = n : Batch Gradient Descent
2) Mini-batch size = 1 : Stochastic Gradient Descent
3) Mini-batch size < m : Mini-batch Gradient Descent


Momentum

SGD의 gradient descent의 이동 과정에서 '관성' 부여.
과거의 이동 과정을 기억하여 추가적 이동.

mt=γmt1+ηθtJ(θt)m_t=\gamma m_{t-1}+\eta\nabla_{\theta_{t}}J(\theta_{t}), γ(0,1)\gamma∈(0,1)

θt+1=θtmt∴\theta_{t+1}=\theta_t-m_t
(γ\gamma는 gradient가 0일 경우, 서서히 줄어드는 역할. 주로 0.90.9.)

장점
관성을 이용하여 local minimum이나 saddle point에서 벗어남.

단점
overshooting.
θ\theta 이외에도 과거의 관성을 저장해야하므로 메모리가 두 배 필요.


Nesterov Accelerated Gradient (NAG)

Momentum 방식을 기초로 하되, 미래를 먼저 보고 현재의 관성을 조절하여 학습.
overshooting을 막기 위해 미래를 먼저 가서 overshooting된 만큼 조절.

Momentum Update
momentum step (γmt1\gamma m_{t-1})과 gradient step (ηθtJ(θt)\eta\nabla_{\theta_{t}}J(\theta_{t}))의 독립적 합산.

NAG Update
momentum step (γmt1\gamma m_{t-1})을 먼저 이동한 후, 그 위치에서의 gradient step (ηθtJ(θtγmt1)\eta\nabla_{\theta_{t}}J(\theta_{t}-\gamma m_{t-1}))만큼 이동.

Why ηθtJ(θtγmt1)\eta\nabla_{\theta_{t}}J(\theta_{t}-\gamma m_{t-1}) ?
θt+1=θtmt\theta_{t+1}=\theta_t-m_t (미래)의 위치에서 gradient 계산.
mtm_t를 알지 못하므로 γmt1\gamma m_{t-1} 사용.
즉, θtγmt1\theta_t-\gamma m_{t-1}.

mt=γmt1+ηθtJ(θtγmt1)m_t=\gamma m_{t-1}+\eta\nabla_{\theta_{t}}J(\theta_{t}-\gamma m_{t-1}), γ(0,1)\gamma∈(0,1)

θt+1=θtmt∴\theta_{t+1}=\theta_t-m_t

장점
관성에만 의존하지 않고 momentum 방향으로 이동한 후, 방향을 결정.


AdaGrad (Adaptive Gradient)

SGD, Momentum, NAG는 모든 params에 동일한 learning rate 적용.
이는 sparse한 경우 비효율적.
⇒ params의 이전 gradient를 저장.
⇒ 각 params에 따라 step size를 다르게 함.

θt,i\theta_{t,i} : tt번째 step의 ii번 param
gt,i=θtJ(θt,i)g_{t,i}=\nabla_{\theta_t}J(\theta_{t,i})
Gt,i=g1,i2+g2,i2+  +gt,i2G_{t,i}=g_{1,i}^2+g_{2,i}^2+\ ···\ +g_{t,i}^2 (곡면의 변화량)

θt+1,i=θt,i∴\theta_{t+1,i}=\theta_{t,i}-η(Gt,i+ϵ)1/2\eta\over(G_{t,i}+\epsilon)^{1/2}gt,ig_{t,i}

변화 (gt,ig_{t,i})가 적음 ⇔ Gt,iG_{t,i}↓ ⇔ step size↑
변화 (gt,ig_{t,i})가 큼 ⇔ Gt,iG_{t,i}↑ ⇔ step size↓

단점
tt가 증가할수록 Gt,iG_{t,i}도 증가하므로, step size가 작아져서 learning rate가 소실.


RMSProp

Adagrad의 경우 learning rate 소실.
Gt,iG_{t,i}를 지수 가중 이동평균으로 대체 (hyper param β\beta).
⇒ learning rate가 소실되지 않으며, 상대적인 크기 유지.

E[g2]t=βE[g2]t1+(1β)gt2E[g^2]_t=\beta E[g^2]_{t-1}+(1-\beta)g_t^2
(E[g2]tE[g^2]_tGtG_t의 가중 이동 평균; 최근 곡면의 변화량)

θt+1=θt∴\theta_{t+1}=\theta_t-η(E[g2]t+ϵ)1/2\eta\over(E[g^2]_t+\epsilon)^{1/2}gtg_t

지수 가중 이동평균
E[g2]t=βE[g2]t1+(1β)gt2E[g^2]_t=\beta E[g^2]_{t-1}+(1-\beta)g_t^2 (β\beta는 주로 0.90.9)
=βt1E[g2]1+(1β)(gt2+βgt12+  +βt1g12)=\beta^{t-1}E[g^2]_1+(1-\beta)(g_t^2+\beta g_{t-1}^2+\ ···\ +\beta^{t-1}g_1^2)
최근 변화 (gt2g_t^2)는 많이 반영, 오래된 변화 (βt1g12\beta^{t-1}g_1^2)는 적게 반영.

변화 (gtg_t)가 적음 ⇔ E[g2]tE[g^2]_t↓ ⇔ step size↑
변화 (gtg_t)가 큼 ⇔ E[g2]tE[g^2]_t↑ ⇔ step size↓

단점
초기 경로의 편향 문제


Adam (Adaptive Moment Estimation)

Adam = Momentum (관성) + RMSProp (최근 곡면의 변화량)
즉, E[g]tE[g]_t (Momentum)과 E[g2]tE[g^2]_t (RMSProp) 업데이트.

Moment
확률변수 XXnn차 moment : E[Xn]E[X^n]

moment 값은 모수이므로 추정 (estimation)해야함.

mt=β1mt1+(1β1)gtm_t=\beta_1m_{t-1}+(1-\beta_1)g_t (gradient의 1차 moment)
vt=β2vt1+(1β2)gt2v_t=\beta_2v_{t-1}+(1-\beta_2)g_t^2 (gradient의 2차 moment)

θt+1=θt∴\theta_{t+1}=\theta_t-η(vt+ϵ)1/2\eta\over(v_t+\epsilon)^{1/2}mtm_t
이는 학습 초기에 가중치들이 0으로 편향되는 경향.

Why?
m0=v0=0m_0=v_0=0
v1v_1이 작아지면서 θ1\theta_1은 출발 지점 θ0\theta_0과 멀어짐.

편향을 보정하기 위해,
mt^=\hat{m_t}=mt1β1tm_t\over1-\beta_1^t, vt^=\hat{v_t}=vt1β2tv_t\over1-\beta_2^t (β1=0.9,β2=0.99\beta_1=0.9,\beta_2=0.99 사용)

θt+1=θt∴\theta_{t+1}=\theta_t-η(vt^+ϵ)1/2\eta\over(\hat{v_t}+\epsilon)^{1/2}mt^\hat{m_t}


NAdam (Nesterov-accelerated Adaptive Memoment Adam)

NAdam = Nag + Adam

Nag 변형
mt=γmt1+ηθtJ(θt)m_t=\gamma m_{t-1}+\eta\nabla_{\theta_t}J(\theta_t)

θt+1=θt(γmt+ηθtJ(θt))∴\theta_{t+1}=\theta_t-(\gamma m_t+\eta\nabla_{\theta_t}J(\theta_t))
θt+1=θtmt+1∴\theta_{t+1}=\theta_t-m_{t+1}

Adam 업데이트
θt+1=θt\theta_{t+1}=\theta_t-η(vt^+ϵ)1/2\eta\over(\hat{v_t}+\epsilon)^{1/2}(β1mt^+(\beta_1\hat{m_t}+(1β1)gt1β1t(1-\beta_1)g_t\over1-\beta_1^t))


Reference
[DL] 최적화 알고리즘 - SGD, Momentum, Nesterov momentum, AdaGrad
[DL] 최적화 알고리즘 - RMSProp, Adam
[딥러닝] 딥러닝 최적화 알고리즘 알고 쓰자. 딥러닝 옵티마이저(optimizer) 총정리
Gradient Descent Optimization Algorithms 정리

0개의 댓글