Neural network 한테 학습은: batch 에서 model 이 얼마나 틀렸는지 측정하는 scalar loss 고르고, 모든 parameter 에 대한 그 loss 의 gradient 계산하고, 각 parameter 를 gradient 반대 방향으로 살짝 밀어. 많은 batch 동안 반복. 끝. 이 track 의 다른 모든 개념 — optimizer, schedule, regularization — 이 이 loop 의 refinement.
Loop 가 작동하는 이유는 calculus. Gradient 가 parameter space 에서 loss 를 가장 빨리 증가 시키는 방향을 알려줘 — 반대로 step 하면 loss 감소. 충분히 작은 step 이면 local minimum 향해 내려가.
원칙: Deep learning 의 학습은 그냥 (매우 high-dimensional) loss surface 에서 내리막 걷기. 다른 모든 건 implementation detail.
Magic 처럼 보이는데 안 그런 이유
Magic 은 70-billion-parameter model 의 loss surface 도 gradient descent 가 exploit 할 수 있는 structure 를 가진다는 거야. Empirically 큰 neural net 은 generalize 도 되는 영역에서 낮은 loss 찾아. 왜 작동하는지는 여전히 open research, 작동한다는 건 잘 정립됨 — field 가 흥미로운 이유.
Engineer 로서 실제 하는 일
Task 에 맞는 loss 고르기 (classification → cross-entropy, regression → MSE, ranking → triplet). Optimizer 고르기 (2026 년 default 는 AdamW). Learning rate 고르기 (1e-4 ~ 3e-3 부터 시작해서 tune). Training loop 돌리기. Loss curve 보기. Iterate.
팁: 첫 deep learning 직관 project 는 — 2-D quadratic loss surface 에 손으로 gradient descent 구현, trajectory 그리기, learning rate 가 path 어떻게 바꾸는지 보기. 20 분이면 track 의 나머지가 physical 하게 의미 있어져.
Code
Gradient descent on a 2-D bowl·python
import numpy as np
import matplotlib.pyplot as plt
def loss(w): return 0.5 * (w[0]**2 + 4 * w[1]**2)
def grad(w): return np.array([w[0], 4 * w[1]])
def gd(start, lr, steps):
path = [np.array(start, dtype=float)]
for _ in range(steps):
w = path[-1]
path.append(w - lr * grad(w))
return np.array(path)
slow = gd([2.0, 2.0], lr=0.1, steps=50) # gentle, smooth
fast = gd([2.0, 2.0], lr=0.4, steps=50) # zig-zags
toobig = gd([2.0, 2.0], lr=0.55, steps=50) # diverges
for name, path in [("lr=0.1", slow), ("lr=0.4", fast), ("lr=0.55", toobig)]:
plt.plot(path[:, 0], path[:, 1], label=name)
plt.legend(); plt.show()