이 강의의 목표는 손실을 줄이기 위해 파라미터를 어느 방향으로 움직이는지 이해하는 것입니다.
먼저 오늘의 핵심 식을 봅니다.
xt+1=xt−η∇f(xt)
이 식을 외우기 전에, 식 안의 말과 기호를 먼저 하나씩 풀어야 합니다.
| 기호 |
읽는 법 |
뜻 |
| f(x) |
손실함수 f |
지금 틀린 정도를 나타내는 함수 |
| ∇f(x) |
f의 그래디언트 |
손실이 가장 빨리 커지는 방향 |
| xt |
t번째 x |
t번 갱신한 파라미터 값 |
| η |
에타 |
학습률, 한 번에 움직이는 크기 |
| v |
브이 |
모멘텀에서 쌓아 온 이동 방향 |
| m, v |
엠, 브이 |
Adam의 1차·2차 모멘트 추정값 |
| β |
베타 |
과거 값을 얼마나 유지할지 정하는 비율 |
수학에서 어려운 부분은 계산보다 읽기입니다. 뜻을 모르고 계산하면 공식이 암호처럼 보입니다.
안개 낀 산에서 아래로 내려간다고 생각합시다. 전체 지도는 없어도 지금 자리에서 가장 가파르게 올라가는 방향은 알 수 있습니다. 그 반대로 한 걸음씩 가면 낮은 곳으로 갈 수 있습니다. 걸음 크기가 학습률 η입니다.
핵심 식을 다시 봅니다.
xt+1=xt−η∇f(xt)
기호를 하나씩 대입해 읽습니다.
- xt: 지금의 파라미터입니다. 산에서 지금 서 있는 자리입니다.
- ∇f(xt): 지금 자리에서 손실이 가장 빨리 커지는 방향입니다. 올라가는 방향입니다.
- −∇f(xt): 부호를 뒤집었으니 손실이 가장 빨리 줄어드는 방향, 즉 내려가는 방향입니다.
- η: 그 방향으로 얼마나 갈지 정하는 걸음 크기입니다.
- xt+1: 한 걸음 옮긴 뒤의 새 자리입니다.
즉 이 식은 "지금 자리에서 가장 가파른 내리막으로 η만큼 이동하라"를 기호로 적은 것입니다.
손실을 줄이려면 어느 방향으로 움직여야 할까요. 이것을 1차 근사로 따져 봅니다. 지금 자리 x에서 방향 d로 조금 움직이면 손실 변화는 다음과 같이 근사됩니다.
f(x+d)≈f(x)+∇f(x)Td
손실을 가장 많이 줄이려면 ∇f(x)Td를 가장 작게(가장 음수로) 만드는 방향 d를 골라야 합니다. 걸음 길이를 고정하면, 내적 ∇f(x)Td는 d가 ∇f(x)와 정반대 방향일 때 최소가 됩니다.
d=−∇f(x)
이때 ∇f(x)Td=−∥∇f(x)∥2≤0이므로 손실이 확실히 줄어듭니다. 그래서 −∇f가 하강 방향이고, 여기에 걸음 크기 η를 곱해 갱신식 xt+1=xt−η∇f(xt)를 얻습니다.
경사하강법은 골짜기가 길쭉하면 좌우로 지그재그하며 느리게 내려갑니다. 모멘텀은 공이 굴러 내려가듯 이전 이동 방향을 일부 유지해 이 흔들림을 줄입니다.
vt+1=βvt+∇f(xt)
xt+1=xt−ηvt+1
v는 과거의 기울기들을 β 비율로 쌓아 온 값입니다. 매번 방향이 바뀌는 성분은 서로 상쇄되어 작아지고, 계속 같은 쪽을 가리키는 성분은 누적되어 커집니다. 그래서 진짜 내리막 방향으로는 가속하고, 좌우 흔들림은 줄어듭니다. 보통 β=0.9를 씁니다.
Adam은 기울기의 1차 모멘트 m(평균 방향)과 2차 모멘트 v(크기 제곱의 평균)를 함께 추정합니다.
mt=β1mt−1+(1−β1)gt
vt=β2vt−1+(1−β2)gt2
여기서 gt=∇f(xt)입니다. 처음에는 m0=v0=0에서 시작해 값이 0쪽으로 치우치므로, 편향보정을 합니다.
m^t=1−β1tmt,v^t=1−β2tvt
갱신식은 다음과 같습니다.
xt+1=xt−ηv^t+ϵm^t
v^t로 나누므로, 기울기가 크게 요동치는 방향은 보폭이 자동으로 줄고, 기울기가 작고 꾸준한 방향은 보폭이 커집니다. 즉 방향마다 다른 학습률을 쓰는 셈입니다. 보통 β1=0.9, β2=0.999, ϵ=10−8을 씁니다.
문제: f(x)=x2를 경사하강법으로 최소화하라. 최소점은 x=0입니다.
기울기는 ∇f(x)=2x이므로 갱신식은
xt+1=xt−η⋅2xt=(1−2η)xt
입니다. 시작점을 x0=1로 둡니다.
적당한 학습률 η=0.1이면 1−2η=0.8이므로
x0=1,x1=0.8,x2=0.64,x3=0.512, …
로 점점 0에 가까워집니다. 잘 수렴합니다.
그러나 학습률이 너무 크면, 예를 들어 η=1.1이면 1−2η=−1.2이므로
x0=1,x1=−1.2,x2=1.44,x3=−1.728, …
로 크기가 점점 커지며 부호만 바뀝니다. 최소점을 매번 지나쳐 오히려 멀어지는 발산입니다. 실제로 ∣1−2η∣<1, 즉 0<η<1일 때만 수렴합니다. 이것이 학습률을 신중히 골라야 하는 이유입니다.
- 현재 손실 f(xt)를 계산합니다.
- 기울기 ∇f(xt)를 구합니다.
- 하강 방향 −∇f(xt)를 정합니다.
- 학습률 η만큼 이동해 xt+1을 얻습니다.
- 필요하면 모멘텀 v나 Adam의 m,v를 갱신하며 반복합니다.
- −∇f가 하강 방향인 이유는 1차 근사 f(x+d)≈f(x)+∇fTd에서 d=−∇f일 때 감소가 최대이기 때문입니다.
- 기본 갱신식은 xt+1=xt−η∇f(xt)입니다.
- 모멘텀은 v←βv+∇f, x←x−ηv로 흔들림을 줄입니다.
- Adam은 1차·2차 모멘트 m,v와 편향보정으로 방향별 보폭을 조절합니다.
- 학습률이 너무 크면(η>1 예시) 최소점을 지나쳐 발산합니다.
xt+1=xt−η∇f(xt)
- 1차 근사로 왜 −∇f가 손실을 가장 많이 줄이는 방향인지 설명할 수 있는가?
- 모멘텀 갱신식 v←βv+∇f가 왜 지그재그를 줄이는지 말할 수 있는가?
- Adam에서 v^t로 나누는 것이 무엇을 조절하는지 아는가?
- f(x)=x2, x0=1에서 η=1.1이면 왜 발산하는지 수치로 보일 수 있는가?
- η가 어떤 범위일 때 f(x)=x2가 수렴하는가?