반응형

Regression

  • Regression to the mean : 전체의 데이터는 평균으로 회기하려는 성질이 있다

Linear Regression

  • 데이터를 가장 잘 대변하는 직선 방정식을 찾는 방법을 말함

Hypothesis

  • 가설, 데이터를 대변하는 방정식

Cost

  • Hypothesis에 의해 나온 결과값(예측값)과 실제 값의 차이
  • Cost, Loss, Error 등으로 부름
  • Cost를 최소화하는 식을 찾는게 목표임
  • 실제 값과의 차이를 계산하면 음수가 나올 수도 있고, 양수가 나올 수도 있기 때문에 이 값의 크기를 누적할 수 있도록 제곱해서 평균을 구하는 식으로 많이 사용함

Gradient Descent

  • Cost를 최소화하는 값을 찾는 알고리즘을 말함
  • cost 함수를 미분한 값(기울기)와 learning rate(alpha)값을 W에서 빼는 작업을 반복하여 최적의 W값을 찾는걸 목표로함

 

예제 코드

  • 코드
import tensorflow as tf

# y = x 방정식을 학습하기위한 데이터
# H(x) = W * x + b
# W = 1, b = 0에 가까워져야 학습 성공
x_data = [1, 2, 3, 4, 5]
y_data = [1, 2, 3, 4, 5]

# 초기값, 임의의 값으로 지정
W = tf.Variable(2.9)
b = tf.Variable(0.5)

learning_rate = 0.01

for i in range(100 + 1):
    with tf.GradientTape() as tape:
        # 가설 함수
        hypothesis = W * x_data + b
        # 비용 함수
        cost = tf.reduce_mean(tf.square(hypothesis - y_data))

    # W와 b의 기울기를 각각 반환(Gradient)
    W_grad, b_grad = tape.gradient(cost, [W, b])

    # W와 b의 값을 업데이트(Descent)
    W.assign_sub(learning_rate * W_grad)
    b.assign_sub(learning_rate * b_grad)

    if i % 10 == 0:
        print("{:5}|{:10.4f}|{:10.4}|{:10.6f}".format(i, W.numpy(), b.numpy(), cost))

# W = 1, b = 0에 가까워졌으므로 각각 5, 2.5에 가까운 값을 출력해야함
print((W * 5 + b).numpy())  # 5.00667
print((W * 2.5 + b).numpy())  # 2.4946702
  • 결과
    0|    2.4520|     0.376| 45.660004
   10|    1.1036|  0.003398|  0.206336
   20|    1.0128|  -0.02091|  0.001026
   30|    1.0065|  -0.02184|  0.000093
   40|    1.0059|  -0.02123|  0.000083
   50|    1.0057|  -0.02053|  0.000077
   60|    1.0055|  -0.01984|  0.000072
   70|    1.0053|  -0.01918|  0.000067
   80|    1.0051|  -0.01854|  0.000063
   90|    1.0050|  -0.01793|  0.000059
  100|    1.0048|  -0.01733|  0.000055
5.00667
2.4946702

간소화한 예제 코드

  • 코드
import tensorflow as tf

x_data = [1, 2, 3, 4, 5]
y_data = [1, 2, 3, 4, 5]

# 초기값, 임의의 값으로 지정
W = tf.Variable(2.9)

learning_rate = 0.01

for i in range(100 + 1):
    hypothesis = W * x_data  # hypothesis = tf.multiply(W, x_data)
    gradient = tf.reduce_mean((hypothesis - y_data) * x_data)
    descent = W - learning_rate * gradient

    W.assign(descent)

    if i % 10 == 0:
        print("{:5}|{:10.4f}".format(i, W.numpy()))

# W = 1, b = 0에 가까워졌으므로 각각 5, 2.5에 가까운 값을 출력해야함
print((W * 5).numpy())  # 5.000074
print((W * 2.5).numpy())  # 2.500037
  • 결과
    0|    2.6910
   10|    1.5273
   20|    1.1644
   30|    1.0513
   40|    1.0160
   50|    1.0050
   60|    1.0016
   70|    1.0005
   80|    1.0002
   90|    1.0000
  100|    1.0000
5.000074
2.500037

참고

반응형

'Development > Deep Learning' 카테고리의 다른 글

[Deep Learning] LSTM  (0) 2020.12.28
[Deep Learning] Keras 기초  (0) 2020.12.28
[Deep Learning] Multi Variable Linear Regression  (0) 2020.12.28
[Deep Learning] 기본  (0) 2020.12.28

+ Recent posts