-
8.29 . 경사하강법TIL( Today I Learned) 2023. 8. 29. 22:18
8.29
#### 경사 하강법
경사하강법은 기계 학습과 최적화에서 사용되는 중요한 개념입니다.
이 방법은 함수의 최솟값을 찾기 위해 사용되며, 주어진 함수의 기울기(경사)를 따라 내려가면서 최솟값에 도달하는 과정을 말합니다. 이 방법은 주어진 함수가 볼록(convex)하다는 가정 하에 사용되며, 다양한 최적화 문제에 적용될 수 있습니다.
경사하강법은 크게 두 가지 주요 유형으로 나뉩니다:
1) 배치 경사하강법 (Batch Gradient Descent):
모든 학습 데이터를 사용하여 기울기를 계산하고 업데이트하는 방법입니다.
데이터셋이 클 경우에는 계산량이 많아질 수 있지만, 안정적으로 수렴하는 특징이 있습니다.
2)확률적 경사하강법 (Stochastic Gradient Descent):
각 학습 단계에서 무작위로 선택한 하나의 데이터 샘플을 사용하여 기울기를 계산하고 모델을 업데이트합니다.
이는 계산 비용이 적고 빠른 수렴을 가능하게 하지만, 불안정한 업데이트로 인해 수렴 속도가 느릴 수도 있습니다.
또한 이 두 방법의 중간 버전인 미니 배치 경사하강법도 있습니다.
이 방법은 데이터를 작은 미니 배치로 나누어 기울기를 계산하고 모델을 업데이트합니다.
이로 인해 계산 효율성과 수렴 속도를 균형있게 조절할 수 있습니다.
경사하강법은 주로 신경망 학습에서 손실 함수를 최소화하기 위해 사용되며, 다양한 변형 기법이 존재합니다.
학습률(learning rate)과 같은 하이퍼파라미터 설정, 모멘텀(momentum), 아다그라드(Adagrad), RMS프롭(RMSprop), 애덤(Adam)과 같은 최적화 알고리즘 등이 경사하강법과 결합하여 모델 학습을 최적화합니다.
#### 경사하강법 에서 가장 기초적인 단계 학습
경사하강법은 기계 학습 및 최적화 알고리즘 중 하나로, 함수의 최솟값을 찾기 위해 사용됩니다.
가장 기초적인 경사하강법의 단계:
1. **초기화**: 최적화하려는 함수의 파라미터(가중치)를 초기값으로 설정합니다. 이 값은 보통 무작위로 선택하거나 경험적으로 결정합니다.
2. **손실 함수 정의**: 최적화하려는 문제에 적합한 손실 함수(비용 함수)를 정의합니다. 이 함수는 파라미터의 현재 값에 따라 얼마나 "나쁜"지를 나타내는 지표입니다.
3. **기울기 계산**: 현재 파라미터 값에서 손실 함수의 기울기(미분)를 계산합니다. 이는 파라미터 값이 어느 방향으로 움직여야 손실 함수 값을 줄일 수 있는지를 나타냅니다.
4. **파라미터 업데이트**: 기울기의 방향과 크기를 이용하여 파라미터 값을 업데이트합니다. 일반적으로 현재 파라미터 값에서 기울기를 뺀 값에 학습률(learning rate)을 곱하여 새로운 파라미터 값을 얻습니다.
5. **반복**: 위의 3단계(기울기 계산)와 4단계(파라미터 업데이트)를 여러 번 반복합니다. 각 반복마다 파라미터가 조금씩 최적의 값으로 다가갑니다.
6. **종료 조건**: 미리 정한 반복 횟수나 기준에 도달하면 알고리즘을 종료합니다. 또는 파라미터 업데이트의 변화가 미미한 경우 종료할 수도 있습니다.
이러한 단계를 반복하면서 경사하강법은 손실 함수를 최소화하는 파라미터 값을 찾아갑니다.
학습률과 같은 하이퍼파라미터의 조절도 중요한데, 너무 작으면 수렴이 느리고, 너무 크면 발산할 수 있습니다.
이를 조절하는 것도 경험과 실험을 통해 결정해야 합니다.
경사 하강법 <== 위키에서
경사 하강법(傾斜下降法, Gradient descent)은 1차 근삿값 발견용 최적화 알고리즘이다.
기본 개념은 함수의 기울기(경사)를 구하고 경사의 반대 방향으로 계속 이동시켜 극값에 이를 때까지 반복시키는 것이다.[1]
평가 및 장단점
경사 하강법은 모든 차원과 모든 공간에서의 적용이 가능하다. 심지어 무한 차원상에서도 쓰일 수 있다. (이 경우 해당 차원이 만들어내는 공간을 함수 공간이라고 한다.)
정확성을 위해서 극값으로 이동함에 있어 매우 많은 단계를 거쳐야하며, 주어진 함수에서의 곡률에 따라서 거의 같은 위치에서 시작했음에도 불구하고 완전히 다른 결과로 이어질 수도 있다.
프로그램 코드 예제
다음은 파이썬 언어로 작성한 경사 하강법 알고리즘으로, f(x)=x4−3x3+2 함수의 극값을 미분값인 f′(x)=4x3−9x2를 통해 찾는 예를 보여준다.
# From calculation, we expect that the local minimum occurs at x=9/4
x_old = 0
x_new = 6 # The algorithm starts at x=6
eps = 0.01 # step size
precision = 0.00001
def f_prime(x):
return 4 * x**3 - 9 * x**2
while abs(x_new - x_old) > precision:
x_old = x_new
x_new = x_old - eps * f_prime(x_old)
print(f"Local minimum occurs at: {x_new}")
이는 x 값 하나에 대해서만 극값을 파악한다. 실제로는 여러 개의 특징값(feature)들이 있으므로 해당 값들마다 병행적으로 결과 값을 구하면서 반복해야 한다.
'TIL( Today I Learned)' 카테고리의 다른 글
23.10.05 인생 2회차 (0) 2023.10.05 9.5 (0) 2023.09.05 8.28.프로그래머스 문제 (0) 2023.08.29 8.26. 프로그래머스 에서 배우는 파이썬 문법 : if not x: (0) 2023.08.26 8.14.월요일 (0) 2023.08.14