Showing

[인공지능] 경사하강법 본문

컴퓨터 공학, 전산학/인공지능,딥러닝

[인공지능] 경사하강법

RabbitCode 2024. 10. 30. 16:37

이번 글에서는 경사 하강법을 이용해 선형 회귀 모델을 학습하는 방법과 코드 예제를 작성해보도록 한다.

 

경사 하강법은 모델의 오차를 줄이기 위해 파라미터(기울기와 절편)를 반복적으로 업데이트하는 최적화 알고리즘이다.

 

 

경사 하강법을 사용해 주어진 데이터에 가장 잘 맞는 직선을 찾아가는 예제를 살펴본다.

1. 데이터 준비

먼저 공부 시간과 점수 간의 관계를 나타내는 간단한 데이터를 준비한다.

 

import numpy as np
import matplotlib.pyplot as plt

# 공부시간 X와 성적 Y의 리스트
data = [[2, 81], [4, 93], [6, 91], [8, 97]]
x = [i[0] for i in data]
y = [i[1] for i in data]

# 그래프로 나타내보기
plt.figure(figsize=(8,5))
plt.scatter(x, y)
plt.show()

2. 경사 하강법으로 학습하기 위한 초기 설정

경사 하강법을 사용하려면, 먼저 넘파이 배열로 변환하여 계산에 용이하게 준비한다. 또한 학습률과 반복 횟수를 설정하고, 기울기와 절편의 초기값을 0으로 설정한다.

# 리스트로 되어 있는 x와 y값을 넘파이 배열로 바꾸어준다. (인덱스를 주어 하나씩 불러와 계산이 가능해 지도록 하기 위함.)
x_data = np.array(x)
y_data = np.array(y)

# 기울기 a와 절편 b 값을 초기화
a = 0
b = 0

# 학습률을 정한다.
lr = 0.01

# 몇 번 반복될지를 설정한다.
epochs = 2001

x_data와 y_data는 넘파이 배열로 변환하여 계산의 효율성을 높인다. 기울기 a와 절편 b는 경사 하강법에 의해 학습되며, 학습률 lr과 반복 횟수 epochs는 학습 속도와 반복 범위를 결정한다.

3. 경사 하강법 알고리즘 구현

경사 하강법을 통해 기울기와 절편을 업데이트하며 학습을 진행한다. 오차 함수를 미분한 값(a_diff와 b_diff)을 사용하여 파라미터를 수정한다.

# 경사 하강법을 시작합니다.
for i in range(epochs): # epoch 수 만큼 반복
    a_diff = (2/len(x_data)) * sum((a * x_data + b - y_data) * x_data)  # 오차함수를 a로 미분
    b_diff = (2/len(x_data)) * sum(a * x_data + b - y_data)             # 오차함수를 b로 미분
    a = a - lr * a_diff  # 학습률을 곱해 기울기 a값을 업데이트합니다.
    b = b - lr * b_diff  # 학습률을 곱해 기울기 b값을 업데이트합니다.
    if i % 100 == 0:  # 100번 반복될 때마다 현재의 a값, b값을 출력합니다.
        print("epoch=%.f, 기울기=%.04f, 절편=%.04f" % (i, a, b))

위 코드에서 a_diff와 b_diff는 각각 기울기와 절편에 대한 오차 함수의 미분 값이다. 경사 하강법을 사용해 a와 b를 반복적으로 업데이트하여 오차를 줄여나간다. i % 100 == 0일 때마다 현재의 기울기와 절편 값을 출력하여 학습 진행 상황을 확인할 수 있다.

4. 학습 결과 확인

반복이 끝난 후, 학습된 기울기와 절편 값을 사용해 예측 값을 계산하고, 실제 데이터와 비교하여 시각화한다.

# 앞서 구한 기울기와 절편을 이용해 그래프를 그려본다
y_pred = a * x_data + b
plt.scatter(x, y)
plt.plot(x_data, y_pred)
plt.show()

위 코드에서는 y_pred에 학습된 기울기와 절편을 이용해 예측값을 저장하고, plt.plot을 통해 예측 직선을 그린다. plt.scatter를 사용해 실제 데이터를 산점도로 표시하여 모델의 예측 결과를 시각적으로 비교한다.

5. 경사 하강법의 원리

경사 하강법은 기울기와 절편을 반복적으로 업데이트하여 오차를 줄여나간다. 업데이트는 각 파라미터에 대한 오차의 변화율을 바탕으로 이뤄지며, 이 변화율은 오차 함수를 미분하여 구한다. 학습률 lr은 파라미터의 변화 폭을 조절하는 역할을 한다. 학습률이 너무 크면 파라미터가 최적 값에서 벗어날 위험이 있고, 너무 작으면 학습 속도가 느려진다.

 

결론

경사 하강법은 데이터와 가장 잘 맞는 직선을 찾기 위한 효율적인 알고리즘이다. 이번 예제에서는 단순 선형 회귀 모델을 학습하기 위해 경사 하강법을 사용했으며, 이 과정을 통해 기울기와 절편을 학습하여 주어진 데이터에 대한 예측을 수행하였다. 경사 하강법은 선형 회귀 외에도 다양한 머신러닝 모델에서 사용되며, 학습 과정의 핵심 역할을 한다.