ML_AI/네이버 부클 AI 엔지니어 기초 다지기 : AI Tech 준비과정

[코드 리뷰 프로젝트] 경사하강법 구현 백업

안정민 2024. 6. 6. 14:36

1. 경사하강법 (Gradient Descent) 을 구현할 데이터 쌍을 numpy 라이브러리를 활용해 생성한다

import numpy as np

xy = np.array([[1., 2., 3., 4., 5., 6.],
              [10., 20., 30., 40., 50., 60.]])
              
x_train = xy[0]
y_train = xy[1]

 

- split, stack, concatenate과 같은 방법들도 array가 클 때는 자주 사용한다. 특히 해당 방법을 사용할 때 axis를 잘 설정해야 원하는 결과를 얻을 수 있다.

-numpy의 split 메소드, vsplit 메소드, flatten 메소드 활용

split_xy = np.split(xy, 2, axis=0)
x_train = split_xy[0].flatten()
y_train = split_xy[1].flatten()

or

split_xy = np.vsplit(xy, 2)
x_train = split_xy[0].flatten()
y_train = split_xy[1].flatten()

 

 

 

2. 임의의 숫자로 학습률 Learning rate, weight 가중치 및 bias 초기화 (파라미터 초기값 설정)

np.random.seed(0)

beta_gd = np.random.uniform(-1, 1, size=(1,))
bias = np.random.uniform(-1, 1, size=(1,))
learning_rate = 0.001

 

-uniform distribution으로부터 샘플링을 하는 np.random.rand를 사용하는 방법도 있다.

beta_gd, bias = np.random.rand(2,)

 

 

3. 경사하강법 구현 및 학습 진행

#학습 epoch 수 = 1000, 100회마다 학습 현황 출력하도록 반복문 formatting을 통해 설정

for i in range(1000):
  pred = (x_train * beta_gd) + bias
  error = ((y_train-pred)**2).mean()

  #mean() 함수 사용하는 이유는 w와 b가 벡터 행렬로 주어졌기 때문에 합산해서 계산해야함
  gd_w = ((y_train-pred) * 2 * x_train).mean()
  gd_b = ((y_train-pred) * 2).mean()

  beta_gd -= learning_rate * gd_w
  bias -= learning_rate * gd_b

  if i % 100 == 0 :
    # print(beta_gd)
    print('Epoch {:10d}/1000 cost : {:10f}, w: {:10f}, b: {:10f}'.format(i, error, beta_gd.item(), bias.item()))

 

-formatting하는 방법 3가지 -> %string, format 함수 사용, f-string 사용

 

 

 

## numpy에 대해서 완전히 익히고 있어야 할 듯... 무슨 함수 주로 사용되는지, 어떤 함수들이 있는지 확실하게 공부하고 바로바로 쓸 수 있도록 익혀야겠다 특히 선형대수학 연산 함수들...!

 


0. 전체 코드

 

Gradient_Descent.py
0.00MB

 

 

 

 

 

 

본 포스트의 학습 내용은 부스트클래스 <AI 엔지니어 기초 다지기 : 부스트캠프 AI Tech 준비과정> 강의 내용을 바탕으로 작성되었습니다.