반응형

선형회귀(Linear Regression)

- 종속 변수 y와 한 개 이상의 독립변수 x와의 선형 상관 관계를 모델링하는 기법

- 최적의 기울기(weight)와 편향(bias)을 구하는 것이 문제

- 평가 기준을 세워, 최적의 기울기와 편향을 탐색

- 단순 반복을 해서 최적의 파라미터를 찾는 것은 어렵다! -> Gradient Descent 등을 사용

 

# 1. Data set
import numpy as np
import matplotlib.pyplot as plt
import random

param1 = random.randint(1, 5) # 기울기
param2 = random.randint(20, 40) # 편향

data = [[3, 24], [6, 48], [9, 40], [12, 52]]
x = np.array([i[0] for i in data])
y = np.array([i[1] for i in data])

plt.plot(x, y, "b.")


# 2. 모델
def model(x):
  y = param1 * x + param2
  return y
  
  
  
 # 3. RMSE
def rmse(predict, true):
  return np.sqrt(((predict -  true) ** 2).mean())
  
  
  # 4. Initial Graph
predict = []
for i in x:
  predict.append(model(i))

predict = np.array(predict)

plt.plot(x, predict, "r-")
plt.plot(x, y, "b.")


# 5. Calculate RMSE
rmse_result = rmse(predict, y)
print(rmse_result)


# 6. Repeat the process
for k in range(10):
  param1 = random.randint(1, 5)
  param2 = random.randint(2, 40)

  # Prediction
  predict = []
  for i in x:
    predict.append(model(i))

  predict = np.array(predict)

  # Calculate RMSE
  rmse_result = rmse(predict, y)

  # Print setting
  print("Param1: {}".format(param1))
  print("Param2: {}".format(param2))
  print("RMSE: {}".format(rmse_result))
  
  
  # 7. Plot each case
param1 = 5
param2 = 36

# Prediction
predict= []
for i in x:
  predict.append(model(i))

predict = np.array(predict)

plt.plot(x, predict, "r-")
plt.plot(x, y, "b.")

 

 

 

경사하강법 (Gradient Descent)

- 일정한 거리를 움직이면서 오차 함수에서의 최저점을 찾는 방법

- 기울기가 0이 되는 지점이 최저점이라는 아이디어라는 것에서 착안

- 경사를 내려가는 것과 같다고 하여 Gradient Descent라는 이름이 붙게 됨

- 학습률(Learning rate)는 얼마만큼 움직일지 결정하는 것

  -> 너무 크면 최저점을 찾지 못하고 발산, 너무 작으면 오래 걸린다.

 

SGD (Stochastic Gradient Descent)

- 가장 단순한, 확률적 경사 하강법으로 지정해둔 학습률만큼 이동하는 것

- 상당히 비효율적인 움직임을 보이게 됨

- Momentum, AdaGrad, RMSProp과 같은 보조적인 수단을 활용함

 

Momentum

- 기울기의 방향으로 물체가 가속된다는 물리 법칙을 적용

 

AdaGrad

- 학습률을 효과적으로 변경해야 하는 필요성이 대두됨

- 매개변수의 원소 중, 변화가 큰 원소는 학습률을 낮게 적용함

- 즉, 가중치가 크게 변한 파라미터는 next step에서 적게 움직이게 함

 

RMSProp

- AdaGrad는 기울기를 계속 제[곱하기 때문에 결국 나중에는 거의 변하지 않음

- 이를 보완하기 위한 알고리즘

- 지수 이동평균을 사용해 과거 기울기는 서서히 잊고, 최신 기울기 정보를 크게 반영

 

Adam (Adaptive Moment Estimation)

- Momentum + RMSProp Optimizer

- 기울기의 지수 평균과 제곱값의 지수 평균을 저장

- 결과적으로 많이 사용되는 것으로 기억하면 됨

반응형
복사했습니다!