본문 바로가기
CS(Computer Science)/인공지능

4. 경사하강법

by 동욷 2023. 3. 18.

Gradient Descent

- 가장 일반적인 최적화 알고리즘 중에 하나

- 함수의 최소값을 찾기 위한 방법

- 현재 위치에서의 기울기 (gradient)를 구하고, 그 기울기가 가리키는 방향으로 이동하여 함수의 최소값을 찾음

 

1) 초기값 설정 : 가중치(weight)나 편향(bias)과 같은 모델의 매개변수를 초기값으로 설정

 

2) 기울기 계산 : 초기값으로 설정된 매개변수에서의 함수의 기울기(gradient) 계산 / 기울기 방향, 크기 알수 있음

 

3) 매개변수 업데이트 : 함수의 기울기 방향으로 매개변수를 업데이트 / 학습률(learning rate)라는 하이퍼 파리미터에 따라 업데이트 양이 결정된다

 

4) 종료조건 확인 : 일정한 반복 횟수나, 기울기의 크기가 충분히 작아졌을 때, 최적화 종료

 

5) 최적화 결과 출력 : 최적의 매개변수 값을 출력

 

 

Ex) 경사하강법을 사용하는 선형회귀 알고리즘을 이용하여 가중치와 편향을 업데이트 할때마다 손실 함수의 값을 계산하여 그래프로 나타내기

 

from sklearn.datasets import load_diabetes
import matplotlib.pyplot as plt
diabetes = load_diabetes()

x = diabetes.data[:, 2]
y = diabetes.target 

 

#초기 가중치 / 편향 설정
w = 1.0
b = 1.0

 

# x[0]에 대한 입력으로 예측값 y_hat 계산, 가중치를 0.1 증가시킨 w_inc 계산, 이에대한 예측값 y_hat_inc 계산


y_hat = x[0] * w + b
w_inc = w + 0.1

y_hat_inc = w_inc * x[0] + b

 

 

# 가중치의 변화율 w_rate 계산 , w + w_rate로 w_new 값 갱신 


w_rate = (y_hat_inc - y_hat) / (w_inc - w)

w_new = w + w_rate

 

#편향을 0.1 증가시킨 b_inc와 이에 대한 예측값 y_hat_inc 계산


b_inc = b + 0.1
y_hat_inc = x[0] * w + b_inc

 

# 편향의 변화율 b_rate 계산, b + 1하여 b_new 갱신


b_rate = (y_hat_inc - y_hat) / (b_inc - b)

b_new = b + 1

 

#err에 실제값과 예측값의 차이인 오차를 계산
err = y[0] - y_hat

 

# 가중치와 편향을 오차와 변화율을 이용하여 갱신

w_new = w + w_rate * err
b_new = b + 1 * err

 

# 두번째 데이터 샘플 추출
y_hat = x[1] * w_new + b_new
err = y[1] - y_hat
w_rate = x[1]
w_new = w_new + w_rate *err
b_new = b_new + 1 * err

 

# 샘플 인덱스 1부터 99까지 경사 하강법 진행
for i in range(1,100):
     for x_i, y_i in zip(x,y):
        y_hat = x_i * w + b
        err = y_i - y_hat
        w_rate = x_i
        w = w + w_rate * err
        b = b + 1 *err

# 경사하강법으로 찾은 가중치와 절편을 이용하여 그래프를 그림

# 산점도를 그리고, x축 범위를 -0.1~0.15로 설정

# 선을 그리고 그래프 출력
plt.scatter(x,y)
pt1 = (-0.1, -0.1*w + b)
pt2 = (0.15, 0.15*w + b)
plt.plot([pt1[0], pt2[0]],[pt1[1], pt2[1]])
plt.show()

 

결과

 

728x90

'CS(Computer Science) > 인공지능' 카테고리의 다른 글

6. 로지스틱 회귀  (0) 2023.03.19
5. 뉴런 생성 & 시그모이드 함수  (0) 2023.03.18
3. 선형 회귀  (0) 2023.03.18
2. 딥러닝을 위한 도구  (0) 2023.03.18
1. 딥러닝을 위한 도구  (0) 2023.03.17