일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 비선형모델
- 회귀학습
- Nonlinear Model
- 비선형 함수
- Machine learning
- Nonlinear Function
- regression
- least square
- struct
- 맵리듀스
- c++
- 회귀
- 선형모델
- kubernetes
- member function
- MapReduce
- call by value
- Linear Regression
- 지도학습
- local minimum
- inheritance
- Effective C++
- call by reference
- virtual function
- Class
- overriding
- 머신러닝
- 딥러닝
- 최소제곱법
- Overloading
- Today
- Total
J's Study log
05. Linear Regression - Gradient Descent 본문
05. Linear Regression - Gradient Descent
정우섭 2023. 7. 4. 17:03Gradient Descent
우리가 Gradient Descent를 사용하는 목적은 당연히 Cost Function의 최솟값을 찾기 위해서이다.
Gradient Descent는 아래 사진에 보이는 이론으로 optimal 𝜃 값을 찾는다.
미분결과값이 양수인 경우, 양수방향으로 이동시키기 위해서 𝜃 값을 증가시킨다.
반대로, 미분결과값이 음수인 경우에는 𝜃 값을 감소시킨다.
연산을 수행할 때, 𝛂(learning rate) 값을 곱해준다.
Learning Rate
머신러닝에서 "learning rate"(학습률)은 모델의 학습 속도를 제어하는 매개변수다.
학습률은 Gradient Descent와 같은 최적화 알고리즘에서 사용되며, 모델 파라미터를 업데이트하는 간격을 결정한다.
학습률이 너무 높으면, 모델은 최적의 솔루션을 "넘어서" 버릴 수 있다.
이는 모델이 최소비용을 찾는 과정에서 비용 함수의 골짜기를 너무 크게 건너뛰어서 적절한 해답을 찾지 못하게 만들 수 있다.
학습률이 너무 높아서 모델의 학습이 수렴하지 않고, 비용 함수 값이 진동하거나 발산할 수 있다.
반대로 학습률이 너무 낮으면, 모델은 최적의 솔루션에 도달하는 데 너무 많은 시간을 소요하게 된다.
학습률이 너무 낮아서 모델의 학습이 매우 느려질 수 있으며, 때로는 지역 최솟값에 갇히거나, 최적의 해답에 도달하기 전에 학습이 중단될 수 있다.
따라서 학습률은 매우 중요한 하이퍼파라미터로, 적절한 값을 설정하는 것이 중요하다.
이 값을 찾는 일반적인 방법은 여러 학습률을 시도하고 검증 오차가 가장 낮은 값을 선택하는 Greed Search이나 Random Search 등이다.(결국 노가다이다..)
또한, 학습률 스케줄링 같은 기법을 사용하여 학습 과정 동안 학습률을 동적으로 조정할 수도 있다.
Gradient Descent Update
위 결과를 얻기 위해, 아래 수식을 통해 𝜃 값이 수렴할 때까지 연산을 수행한다.
𝜃 값 업데이트 시에 조심해야하는 문제가 있다.
아래와 같이 각 𝜃 에 대한 업데이트를 모든 𝜃 에 대한 연산이 끝난 후, 동시에 수행되어야 한다는 것이다.
왜 그런 것일까?
동시에 업데이트 하지않으면(사진:Incorrect의 경우) temp1을 연산할 때 문제가 발생한다.
원래 (𝜃0, 𝜃1)에 대한 연산을 수행해야하는데, (업데이트 된 𝜃0, 𝜃1)에 대한 연산이 수행되기 때문에 오류가 발생하기 때문이다.
Gradient Descent Algorithm
Batch Gradient Descent: 전체 훈련 세트에 대해 그래디언트를 계산한다. 이 방법은 전체 데이터에 대해 계산을 하기 때문에 한 번의 업데이트가 많은 시간과 메모리를 필요로 하지만, 최적화 과정이 안정적이다.
- m = M → Batch Gradient Descent (BGD)
- 장점: 올바른 방향을 가리킴, 단점: 속도가 느리고, local minimum에 빠질 수 있음
Stochastic Gradient Descent (SGD): SGD는 매개변수를 업데이트하기 위해 훈련 세트에서 무작위로 선택한 하나의 샘플에 대해 그래디언트를 계산한다. 이 방법은 계산이 빠르고 메모리를 적게 사용하지만, 업데이트가 불안정하고 최적화 과정이 불규칙적이다.
- m = 1 → Stochastic Gradient Descent (SGD)
- 장점: 더 넓은 탐색 범위를 가짐, 단점: 잘못된 방향을 가리킬 수 있음 (수렴하기 어려움)
Mini-Batch Gradient Descent: 이 방법은 Batch와 SGD의 중간 형태로, 훈련 세트의 작은 무작위 부분집합(즉, mini-batch)에 대해 그래디언트를 계산한다. 이 방법은 Batch와 SGD의 장점을 혼합한 것으로, 계산 효율성과 알고리즘의 안정성 사이에 좋은 균형을 제공한다.
- m = 1~M중간의 어떤 숫자 → Mini-batch Gradient Descent
- 대부분 선호됨.
Mini-batch GD의 hyperparameter
- Batch: 그래디언트를 계산하는 데 사용되는 데이터 샘플들의 그룹, 배치 크기가 클수록 더 많은 메모리가 필요하다.
- Epoch: 모든 훈련 샘플을 방문하는 과정, 지금까지는 단순화를 위해 이를 "반복(iteration)"이라고 부르곤 했다.
- Iteration: 배치 데이터가 알고리즘을 통과하는 횟수, 각 반복에서 데이터는 다른 배치 세트를 만들기 위해 섞인다.
Challenges of Gradient Descent
- 언제 학습을 멈출 것인가?
- 어떻게 적절한 Learning rate를 고를 것인가?
- Local minimum 문제
1. 언제 학습을 멈출 것인가?
너무 일찍 학습을 멈추면 모델이 아직 충분히 학습되지 않을 수 있고, 너무 늦게 멈추면 과적합(overfitting)이 발생할 수 있다.
이러한 문제를 해결하기 위한 전략으로는 'Early Stopping'이 있다. 이는 검증 세트에서의 성능이 더 이상 향상되지 않을 때 학습을 멈추는 방법이다.
또 다른 전략으로는 학습률(learning rate)이 더 이상 개선되지 않을 때 학습을 중단하는 것이 있다.
2. 어떻게 적절한 Learning rate를 고를 것인가?
너무 큰 학습률은 알고리즘이 최적의 솔루션으로 수렴하는 것을 방해할 수 있다.
반면 너무 작은 학습률은 수렴하는데 많은 시간이 걸릴 수 있다.
이를 해결하는 전략 중 하나는 '학습률 스케줄링'이다. 이 방법은 학습이 진행됨에 따라 학습률을 점차 감소시키는 것이다.
또 다른 방법은 'Adaptive learning rate' 기법이다. 이는 각 매개변수에 대해 개별적인 학습률을 동적으로 조정하는 방법으로, 예를 들면 Adam, RMSprop, Adagrad 등이 있다.
3. Local minimum 문제
그래디언트 디센트는 종종 최적이 아닌 솔루션인 local minimum에 빠질 수 있다.
이 문제를 극복하기 위해 'momentum(관성)'을 사용하는 방법이 있다. 이 방법은 이전 단계에서의 gradient를 계산에 포함시켜 지역 최소값에서 벗어나는데 도움을 준다.
momentum을 사용한다는 말은 이전에 업데이트에 대한 관성을 반영한다는 것이다.
(아래 사진 참조)
'momentum'의 장점은 위 그림과 같이 관성을 통해 일부 local minimun을 극복할 확률이 생긴다.
(보장은 안된다. 어떤 알고리즘을 사용할지, 관성에 대한 learning rate 등에 따라 성능이 다르다.)
또 다른 방법은 'Stochastic Gradient Descent'(SGD) 또는 'Mini-batch Gradient Descent'를 사용하는 것이다.
이들 방법은 각 업데이트에서 전체 데이터 세트 대신 한 개 또는 작은 배치의 샘플을 사용하여 노이즈를 추가하고 지역 최소값에서 벗어나는 것을 돕는다.
아래는 앞서 설명한 알고리즘과 이를 더 발전시킨 여러 알고리즘에 대한 학습과정을 보여준다.
다음 글에서는 Logistic Regression(classification)에 대해 알아보겠다!
'Machine Learning > Supervised Learning(감독학습)' 카테고리의 다른 글
04. Linear Regression - Least Square (0) | 2023.06.30 |
---|---|
03. Linear Regression - Intro. (0) | 2023.06.26 |
02. Supervised Learning (0) | 2023.06.26 |