728x90
서론
- 학습하는 방법에 대해서 앞으로 계속 사용하게 될 것이기에 이번 기회에 정리를 해두려고 한다.
- 들어가기에 앞서 Optimizer는 목표를 최대화, 최소화하는 해를 찾는 과정이다.
- 이 포스트는 최소 SGD와 그를 받침하는 개념에 대해 알고 있다고 가정하고 작성하겠습니다.
- SGD w, Adagrad, RMSProp, Adam, AdamW 에 대해서 알아볼 예정이고 이들은 합쳐지거나 부족한 점을 채운 것들이 많아서 앞의 몇개를 습득하면 뒤의 내용은 그렇게 어렵지 않다.
- 특히 이름만 봐도 알 수 있는 것들이 많다.
본론
- 다양한 종류가 있는데, 그 중에서 가장 기초가 되는 Stochastic gradient descent + momentum은 이 글의 포스트에도 나와있으므로 짧게 설명하자면 기존의 값을 이용해서 좀 더 빠르게 해를 찾도록 하는 것이다.
- AdaGrad2011는 각 매개변수에 대해 학습률을 적응적으로 조정합니다. 자주 업데이트되는 매개변수는 학습률이 낮아지고, 덜 자주 업데이트되는 매개변수는 학습률이 높아집니다. 1. θt+1=θt−η√Gt+ϵ⊙gt
- θt는 현재 매개변수 벡터
- η는 초기 학습률
- Gt,Gt,Gt는 이전 기울기의 제곱합을 대각 성분으로 갖는 대각 행렬 → 크게 업데이트 되면 분모에 있기에 학습률이 작아지는 효과를 얻는다.
- ϵ는 분모가 0이 되는 것을 방지하기 위한 작은 상수
- gt,gt,gt는 현재 기울기 벡터
- ⊙는 요소별 곱셈을 나타냅니다.
- Gt=∑ti=1gi⊙gi
- 적응적 학습률: 각 매개변수마다 학습률이 다르게 적용되어, 빈번하게 업데이트되는 매개변수는 학습률이 줄어들고, 드물게 업데이트되는 매개변수는 학습률이 유지되거나 높아집니다. 이는 희소한 데이터나 특징이 있는 문제에 효과적입니다.
- 자동 학습률 감소: 학습 과정에서 학습률이 자동으로 감소하여, 큰 초기 학습률로 시작해도 안정적인 수렴이 가능합니다.
- 학습률의 급격한 감소: 기울기의 제곱합이 계속해서 누적되므로, 시간이 지남에 따라 학습률이 너무 작아질 수 있습니다. 이로 인해 학습이 너무 느려지거나 멈출 수 있습니다.
- 메모리 사용량 증가: 각 매개변수에 대해 기울기의 제곱합을 저장해야 하므로, 매개변수의 수가 많을 경우 메모리 사용량이 증가할 수 있습니다.
- RMSProp RootMeanSquarePropagation는 AdaGrad의 변형으로, 단점 중 기울기의 제곱합이 더해지는 문제로 학습률이 작아지기에 이를 해결하는 방법이다.
- θ_{t+1}=θ_t−\frac{\eta}{\sqrt{E[g^2]t+ϵ}}g_t → 여기서 G_t가 변경됨, 쉽게말하면 매개변수 기울기 값의 평균을 낸거다. 그럼 그 평균을 그냥 내는가?
- E[g^2]_t는 시점 t에서의 기울기 제곱의 이동 평균
- \gamma는 이동 평균의 가중치 일반적으로 0.9로 설정
- g_t는 시점 t에서의 기울기 벡터
- E[g^2]t=γE[g^2]{t−1}+(1−γ)g_t^2 → 수식을 보면 이전의 평균값과 현재의 값을 가중치를 통해서 구하게 된다.
- θ_{t+1}=θ_t−\frac{\eta}{\sqrt{E[g^2]t+ϵ}}g_t → 여기서 G_t가 변경됨, 쉽게말하면 매개변수 기울기 값의 평균을 낸거다. 그럼 그 평균을 그냥 내는가?
- Adam Adaptive Moment Estimation → Adam은 RMSProp과 모멘텀을 결합한 최적화 알고리즘입니다. Adam 알고리즘은 기울기의 1차 모멘텀 추정치와 2차 모멘텀 추정치를 모두 사용하여 학습률을 적응적으로 조정하고, 안정적인 수렴을 도모합니다.
- 기울기 계산: gt=∇_θJ(θ_t)
- 1차 모멘텀 업데이트:
- m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t
- 2차 모멘텀 업데이트:
- 1차 모멘텀과 2차 모멘텀이 뭔가요? → 기울기의 위의 제곱에 따른 명칭
- 1차 모멘텀은 기울기의1승 이동 평균을 나타내며, 이는 기울기의 추정치라고 할 수 있습니다. 일반적으로 이는 모멘텀을 추가하여 기울기의 노이즈를 줄이고 더 안정적인 업데이트를 가능하게 합니다.
- 2차 모멘텀은 기울기의 제곱2승 평균을 나타내며, 이는 기울기의 분산을 추정합니다. 이는 학습률을 조정하는 데 사용되며, 기울기의 크기에 따라 학습률을 적응적으로 변화시킵니다.
- v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2
- 1차 모멘텀과 2차 모멘텀이 뭔가요? → 기울기의 위의 제곱에 따른 명칭
- 바이어스 보정:
- 왜 이러한 보정이 필요한가?1차 모멘텀 추정치의 바이어스 보정m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_tm_t = \beta_1^t m_0 + (1 - \beta_1) \sum_{i=1}^{t} \beta_1^{t-i} g_im_t = (1 - \beta_1) \sum_{i=1}^{t} \beta_1^{t-i} g_i이를 보정하기 위해 \beta_1^t로 나누어주면, 바이어스가 제거된 \hat{m}_t를 얻을 수 있습니다:
- \hat{m}_t = \frac{m_t}{1 - \beta_1^t}
- 이 식은 기울기 g_i의 지수 가중 이동 평균입니다. 하지만 초기 단계에서는 \beta_1^t가 매우 작기 때문에,m_t의 값이 실제보다 작게 추정됩니다.
- 여기서 m_0 = m이므로,
- 이 식을 t에 대해 전개해보면,
- Adam 알고리즘에서 1차 모멘텀 m_t는 다음과 같이 계산됩니다:
- 바이어스 보정의 이유를 수학적으로 이해해 보겠습니다.
- \hat{v}_t = \frac{v_t}{1 - \beta_2^t}
- 매개변수 업데이트:
- \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t
- AdamW → Adam에서 가중치 감쇠를 분리적용된 내용입니다.
- Adam의 가중치 감쇠
- θ_{t+1}=θ_t−η(\frac{\hat m^t}{\sqrt{v^t+ϵ}}+λθ_t)
- 가중치가 특정하게 커지는 것을 방지하도록 하는 것을 가중치 감쇠라고 한다. AdamW는 이를 분리해서 순서를 준 것이다.
- \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t
- θ_{t+1}=θ_{t+1}−ηλθ_t → 이렇게 순서를 줘서 사용함으로써 정규화가 순수하게 정규화로만 작동하게 되어 최적화 과정에 영향을 주지 않습니다.
- Adam의 가중치 감쇠
결론
- SGD W가 기초적인 Optimizer입니다.
- 여기서 각 매개변수 별로 가중치를 줘서 하고 싶습니다. → Adagrad
- 그런데 학습률이 너무 작아지니 가중치를 평균을 내서 씁시다 → RMSProp
- RMSProp에서 Momentum을 합쳐봅시다 → Adam
- 최적화 식을 좀 분리해서 목적에 맞게 분리합시다 → AdamW
728x90
'Learn' 카테고리의 다른 글
[데이터처리와 분석] K-Mean 실습 및 확인 0 | 2024.06.13 |
---|---|
[컴퓨터비전] R-CNN 0 | 2024.06.13 |
[데이터처리와분석] 데이터 준비하기 0 | 2024.06.12 |
[머신러닝] Normalization 종류 0 | 2024.06.12 |
[머신러닝] Momentum & Nesterov 2 | 2024.06.11 |