Sangmun

Gradient descent 직접 구현 (python) 본문

네이버 AI 부스트캠프 4기

Gradient descent 직접 구현 (python)

상상2 2022. 9. 25. 20:06

네이버 AI 부스트캠프 1주차 심화 과제를 구현하면서 찾아본 내용이다.

 

https://www.youtube.com/watch?v=KgH3ZWmMxLE&t=335s 

import numpy as np
import matplotlib.pyplot as plt

# X값 랜덤 생성 및 방정식 생성
X = np.random.rand(100)
Y = 0.2*X + 0.5

# 랜덤하게 생성된 데이터를 바탕으로 그래프 그리기
plt.figure(figsize=(8,6))
plt.scatter(X,Y)
plt.show()
# 그래프를 그려주는 함수
def plot_prediction(pred,y):
    plt.figure(figsize=(8,6))
    # target 그래프 그리기
    plt.scatter(X,y)
    
    # 학습으로 예측한 그래프 그리기
    plt.scatter(X,pred)
    plt.show()
W = np.random.uniform(-1,1)
b = np.random.uniform(-1,1)

learning_rate = 0.7

for epoch in range(100):
    Y_Pred = W*X + b

    # L1 norm
    error = np.abs(Y_Pred - Y).mean()

    if error < 0.001:
        break
    
    # gradient descent 계산
    w_grad = learning_rate * ((Y_Pred - Y)*X).mean()
    b_grad = learning_rate * (Y_Pred -Y).mean()

    # W, b 값 갱신
    W = W - w_grad
    b = b - b_grad

    # 10 epoch 마다 target과 학습된 그래프 그리기
    if epoch % 10 == 0:
        Y_pred = W*X + b
        plot_prediction(Y_Pred,Y)

매 epoch 마다 pred가 target에 가까워지는 모습

 

위 예제에서는 error를 L1 norm으로 구현하였지만 과제는 L2 norm으로 바꿔 구현해보았다.

 

Comments