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()
결과
'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 |