[ML] Gradient Descent
2024. 2. 22. 13:48ㆍ카테고리 없음
1. 경사하강법
경사하강법(Gradient Descent)는 함수의 최소값 또는 극소값을 찾기 위한 반복적인 최적화 알고리즘입니다. 쉽게 말하면, 산을 내려가는 가장 빠른 길을 찾는 방법이라고 생각할 수 있습니다. 여기서 산은 최소화하고자 하는 함수를 말합니다.
2. 경사하강법의 단계
- 임의의 시작점 선택 : 우선 함수의 그래프 상에서 임의의 점을 선택합니다. 이 점은 우리가 최적화를 시작하는 위치입니다. $x_0$
- 경사 계산 : 선택한 점에서 함수의 기울기를 계산합니다. 여기서 기울기는 어떤 방향으로 이동하면 함수의 값이 가장 빠르게 감소하는지를 나타냅니다. $$x_{\text{current}}$$
- 이동 : 계산된 경사의 반대 방향으로 작은 단계를 이동합니다. 경사가 급한 곳으로 이동하면 함수의 값이 빠르게 감소합니다. 이동거리는 학습률에 의해 결정되며, 이 값이 너무 크면 최소값을 지나치게 되고, 너무 작으면 최적화 과정이 느려집니다. $$x_{\text{next}}=x_{\text{current}}-\alpha \nabla f(x_{\text{current}})$$ $\alpha$는 학습률, $ \nabla f(x_{\text{current}})$는 현재 위치에서의 기울기
- 반복 : 새로운 위치에서 다시 기울기를 계산하고, 이동을 반복합니다. 이 과정을 함수의 값이 더 이상 크게 감소하지 않거나, 설정된 반복 횟수에 도달할 때까지 계속합니다.
3. Python에서 구현
import numpy as np
# 목표 함수
def f(x):
return x ** 2
# 함수 f의 도함수(미분)
def df(x):
return 2 * x
# 경사하강법 구현
def gradient_descent(starting_point, learning_rate, num_iterations):
x = starting_point
for i in range(num_iterations):
grad = df(x) # 현재 x에서의 기울기(미분값) 계산
x = x - learning_rate * grad # x 업데이트
print(f"반복 {i+1}: x = {x}, f(x) = {f(x)}")
return x
# 하이퍼파라미터
starting_point = 10 # 시작점
learning_rate = 0.1 # 학습률
num_iterations = 10 # 반복 횟수
# 경사하강법 실행
minimum_x = gradient_descent(starting_point, learning_rate, num_iterations)
print(f"최소값에 도달한 x: {minimum_x}, f(x)의 최소값: {f(minimum_x)}")