우리가 신경망(딥러닝) 모델을 최적화를 말하자면 매개변수 갱신에 대해 이야기하게 됩니다. 매개변수 갱신을 위해서는 기울기와 학습률이라는 개념을 알아야 되죠. 매개변수 갱신을 하다 보면 로컬 미니멈과 글로벌 미니멈이 있다는 것을 알게 되죠. 그리고 로컬 미니멈에 안 빠지게 하는 기법들로 옵티마이저라는 개념을 배우게 됩니다. 그럼 하나하나 이야기해보도록 하겠습니다.
매개변수 갱신이란?
신경망 매개변수 업데이트는 훈련 단계에서 신경망의 매개변수(가중치 및 편향)를 조정하는 프로세스를 말합니다. 이 매개변수를 효과적으로 갱신하기 위해서 옵티마이저를 사용합니다. 옵티마이저는 손실 함수 값을 최저로 하는 매개변수를 찾기 위한 문제를 푸는 역할을 합니다. 딥러닝의 특성상 매개변수 수가 엄청나게 많아 쉽게 찾기는 어려운 게 사실입니다.
경사하강법과 학습률
신경망 매개변수 업데이트와 관련된 두 가지 주요 구성요소는 다음과 같습니다.
Gradient Descent (최적화 알고리즘=옵티마이저)
손실 함수를 최소화하는 데 사용되는 최적화 알고리즘입니다. 이는 매개변수에 대한 손실 함수의 기울기와 반대 방향으로 반복적으로 이동하는 방식으로 작동합니다. 기울기는 손실의 변화율을 나타내며 반대 방향으로 이동하면 최소점에 도달하는 데 도움이 됩니다.
학습률
학습률은 최적화 중에 매개변수 공간의 단계 크기를 결정하는 하이퍼파라미터 입니다. 계산된 '기울기'에 따라 매개변수를 얼마나 조정해야 하는지 제어합니다. 학습률이 너무 작으면 수렴이 느려질 수 있고, 학습률이 너무 크면 최적화 프로세스가 진동하거나 심지어 발산할 수도 있습니다.
Local Minima vs Grobal Minima
최적화 알고리즘을 통해 우리는 최저점(Global mininum)을 찾으려고 애씁니다. Loss가 최소가 되길 원하는데 자칫 잘못하면 우리가 원하는 목표가 아닌 지점에서 최저점으로 판단할 수 있습니다. 전체를 볼 수 없기 때문에 제일 작다고 판별할 수 있는 거죠. 발생하는 이유는 Local minimum에서 gradient가 0이라 업데이트가 되지 않을 수 있기 때문입니다.
* 이 문제에 대한 개선 아이디어
- 초기 값의 설정을 어떻게 하는냐에 따라 처저점(Global mininum)에 도달에 영향을 미침
- 어떤 Optimizer를 선택하느냐가 영향을 미침
Local Minima 걱정 없는 이유?
딥러닝은 고차원의 공간의 문제를 주로 해결하는 데 사용하는데요. 사실상 Local minima 문제는 고차원에서 발생하기 힘든 현상입니다. 실제 딥러닝 모델에서는 엄청난 수의 가중치(weight)가 있습니다. 이 weight들이 모두 local minima에 빠져야 최저점으로 생각하고 매개변수 갱신이 정지됩니다.
고차원 공간에서의 Critical point, 즉 문제가 되는 지점은 대부분 saddle point입니다. saddle point는 안장처럼 생긴 아랫부분이라 이름 붙여졌습니다. local minima가 발생한다 해도 이는 global minimum이거나 global minimum의 근처의 에러값을 가기기 때문에 문제가 되지 않습니다. 이는 분석가들의 실험을 통해 알아낸 결과입니다. 또 Momentum, Adagrad, Adam 등의 더 발전된 옵티마이저(Optimzer)를 통해서도 Local minima 문제를 피할 수 있습니다.
내가 찾은 점이 최적일까?
흔히들 딥러닝 학습을 통해 찾은 모델이 최적화되었을까 의문을 가집니다. 딥러닝에서 다루는 비즈니스 문제는 Convexity(컴백시티, 하나의 볼록한 형태)를 만족하지 않습니다. 그래서 그 지점이 최저점(global Minima)인지는 정확히 알 수 없습니다. Saddle point가 아닌 local minimum이 발생하기도 힘들 뿐만 아니라 모든 방향에서 아래로 볼록인 local minima를 찾았다면 그 지점이 최저점(global minima) 일 가능성이 높습니다.
어떤 옵티마이저를 사용해야 하나?
딥러닝이 다른 문제에서 항상 뛰어난 옵티마이저 기법이라는 것은 아직까지는 없습니다. 학습률과 같은 하이퍼파라미터를 어떻게 설정하느냐에 따라서도 결과가 바뀌기도 합니다. 최근에는 Adam이 많이 쓰이는 추세이기는 합니다. 하지만 아직도 많은 연구에서는 초기 옵티마이저인 SGD를 사용하고 있습니다. 모멘텀과 AdaGrad도 업무에 따라 시도해 볼 만한 방법입니다. 여러 상황을 고려해서 다양하게 시도하는 것이 필요합니다. 아래는 옵티마이저를 고르는 기준입니다.
- 보폭을 중심으로 하는 방법을 사용하는지?
- AdaGrad, RMSProp, AdaDelta
- 보폭을 중심으로 Graident의 제곱을 연산
- 방향을 중심으로 하는 방법을 사용하는지?
- Momentum, NAG
- 방향을 중심으로 Graident를 연산
* 같이 읽으면 좋은 글
'딥러닝' 카테고리의 다른 글
딥러닝에서 왜 시드(seed) 고정할까? (0) | 2024.02.04 |
---|---|
딥러닝 가중치 초기화: Xavier, He 왜 하는걸까? (1) | 2024.02.03 |
신경망 매개변수 갱신: 옵티마이저 (0) | 2024.01.29 |
오차역전파 알고리즘: ReLU, Sigmoid, Affine, Softmax 계산 (0) | 2024.01.26 |
오차역전파 알고리즘: 핵심은 연쇄법칙(chain rule) (0) | 2024.01.25 |