반응형
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
undefinedcopy
- 결과
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
undefinedcopy
간소화한 예제 코드
- 코드
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
undefinedcopy
- 결과
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
undefinedcopy
참고
반응형
'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 |