C.W.K.
Stream
Lesson 05 of 06 · published

Linear regression 직접 구현 — 보편 loop

~14 min · training-loop, gradient-descent, regression

Level 0Level 0
0 XP0/78 lessons0/17 achievements
0/100 XP to next level100 XP to go0% complete

보편 4단계 패턴 만들기

GradientTape를 진짜로 체화하는 가장 좋은 방법은 Keras 없이 linear regression 만드는 거 — raw TF로 manual gradient descent. 여기서 쓰는 4단계가 model.fit이 내부에서 도는 그 패턴이야.

Linear regression: y_pred = W*x + b의 MSE 최소화하는 W, b 찾기.

모든 training loop의 4단계:

  1. Forward pass — tape 안에서 prediction 계산해야 TF가 op 녹화.
  2. Loss — 스칼라 loss 계산, 역시 tape 안에서.
  3. Backward passtape.gradient(loss, [W, b])가 chain rule 자동 적용.
  4. Updateassign_sub로 각 파라미터에서 learning_rate × gradient 빼기.

Code

Linear regression — no Keras·python
import tensorflow as tf
import numpy as np

# Synthetic data: y = 2x + 3 + noise
np.random.seed(42)
X = np.linspace(-1, 1, 100).astype(np.float32)
y_true = 2 * X + 3 + 0.1 * np.random.randn(100).astype(np.float32)

# Initialize parameters as Variables
W = tf.Variable(tf.random.normal([1]))
b = tf.Variable(tf.zeros([1]))
learning_rate = 0.1

for epoch in range(200):
    with tf.GradientTape() as tape:
        y_pred = W * X + b                                   # 1. forward
        loss = tf.reduce_mean(tf.square(y_true - y_pred))    # 2. loss

    dL_dW, dL_db = tape.gradient(loss, [W, b])              # 3. backward

    W.assign_sub(learning_rate * dL_dW)                      # 4. update
    b.assign_sub(learning_rate * dL_db)

    if epoch % 50 == 0:
        print(f"Epoch {epoch:3d}: loss={loss:.4f}, "
              f"W={W.numpy()[0]:.3f}, b={b.numpy()[0]:.3f}")

print(f"\nFinal: W={W.numpy()[0]:.3f} (true 2.0), "
      f"b={b.numpy()[0]:.3f} (true 3.0)")

Exercise

위 linear regression 코드를 manual assign_sub 대신 tf.keras.optimizers.Adam(0.1)로 바꿔. update 단계를 optimizer.apply_gradients(zip(grads, [W, b]))로 교체하고 수렴 속도 비슷하거나 빠른지 확인.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.