Allen's 데이터 맛집

경사하강법(Gradient Descent)이란? - 비용 최소화의 핵심 알고리즘 본문

Machine Learning/머신러닝

경사하강법(Gradient Descent)이란? - 비용 최소화의 핵심 알고리즘

Allen93 2024. 1. 20. 01:56
머신 러닝과 딥러닝에서 핵심 최적화 알고리즘 중 하나인 경사하강법에 대해 알아보겠습니다. 경사하강법은 모델의 비용 함수를 최소화하는 가중치(Weight)와 편향(Bias)을 찾기 위한 핵심 방법 중 하나입니다.

 

 

 




경사하강법이란?


경사하강법은 모델을 학습시키기 위해 가중치와 편향을 조정하는 최적화 알고리즘 중 하나입니다. 모델이 예측한 값과 실제 값 사이의 오차를 나타내는 비용 함수를 최소화하기 위해 사용됩니다.


경사하강법의 기본 아이디어

경사하강법은 다음과 같은 기본 아이디어를 가지고 있습니다:

1.초기화: 모델의 가중치와 편향을 초기값으로 설정합니다.
2.예측: 주어진 입력에 대해 모델을 사용하여 예측값을 계산합니다.
3.비용 함수: 예측값과 실제값의 차이를 나타내는 비용 함수를 정의합니다.
4.경사 계산: 비용 함수의 최소값을 찾기 위해 가중치와 편향에 대한 편미분(Gradient)을 계산합니다.
5.가중치 업데이트: 계산된 경사를 이용하여 현재의 가중치를 조정합니다.
6.수렴 확인: 비용이 충분히 작아지거나 일정 횟수 동안 변화하지 않을 때까지 3~5단계를 반복합니다.

 

 


경사하강법의 종류


1. 배치 경사하강법 (Batch Gradient Descent):
전체 훈련 데이터를 사용하여 한 번의 업데이트를 수행합니다.
데이터가 많을 경우 계산 비용이 큽니다.


2. 확률적 경사하강법 (Stochastic Gradient Descent - SGD):
각 훈련 데이터마다 업데이트를 수행합니다.
빠른 수렴이 가능하지만 노이즈가 크다는 단점이 있습니다.


3. 미니 배치 경사하강법 (Mini-batch Gradient Descent):
일정한 크기의 미니 배치를 사용하여 업데이트를 수행합니다.
일반적으로 가장 많이 사용되는 경사하강법 중 하나입니다.

 


예시: 선형 회귀 모델 학습


배경 : 주어진 데이터에 대해 선형 회귀 모델을 학습시키고자 합니다.
해결 방법 : 경사하강법을 사용하여 비용 함수를 최소화하는 가중치와 편향을 찾습니다.

import numpy as np
import matplotlib.pyplot as plt

# 가상의 데이터 생성
np.random.seed(42)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

# 경사하강법을 위한 선형 회귀 모델 정의
X_b = np.c_[np.ones((100, 1)), X]  # 편향을 위한 특성 추가
eta = 0.1  # 학습률
n_iterations = 1000

# 초기 가중치 설정
theta = np.random.randn(2, 1)

# 경사하강법 수행
for iteration in range(n_iterations):
    gradients = 2/100 * X_b.T.dot(X_b.dot(theta) - y)
    theta = theta - eta * gradients

# 학습된 선형 회귀 모델
print("학습된 가중치(Weight)와 편향(Bias):", theta)

# 결과 시각화
plt.scatter(X, y)
plt.plot(X, X_b.dot(theta), color='red', label='Linear Regression')
plt.xlabel('X')
plt.ylabel('y')
plt.legend()
plt.show()

이 예시에서는 경사하강법을 사용하여 선형 회귀 모델을 학습시킵니다. 학습된 가중치와 편향은 데이터에 가장 잘 맞는 직선을 나타냅니다.

경사하강법은 머신 러닝과 딥러닝에서 모델 학습의 핵심 알고리즘 중 하나로, 다양한 최적화 기법과 함께 사용되어 모델을 효과적으로 학습시킵니다. 이를 통해 데이터에 적합한 모델 파라미터를 찾고 예측 성능을 향상시킬 수 있습니다.