기울기는 숫자가 아니라 방향이야
벡터 w를 입력으로 받는 스칼라 함수 L에서 기울기 ∇L(w)는 L이 가장 빠르게 증가하는 방향을 가리키는 벡터야. 그 벡터의 크기는 해당 방향의 기울기가 얼마나 가파른지 알려줘. L을 최소화하려면 -∇L 방향으로 한 걸음씩 나아가면 돼.
신경망에서 w는 모든 매개변수를 이어 붙인 벡터야. 수백만~수십억 개 숫자로 이루어져 있지. L은 배치에서 계산한 손실이고. 기울기는 w와 차원이 같으며, 각 매개변수를 살짝 움직였을 때 손실이 얼마나 달라지는지 알려줘.
원칙: 기울기를 매개변수 공간에 놓인 벡터장으로 생각해. 학습은 음의 기울기를 따라 그 벡터장을 지나가는 입자와 같고, 옵티마이저는 여기에 관성과 크기 조정을 더해.
‘접선’ 직관은 어디까지 맞을까
1-D 그림에서 기울기, 즉 slope와 first derivative를 같은 것으로 보는 직관은 고차원에서도 잘 통하는 편이야. 하지만 중요한 차이가 하나 있어. 손실 표면에는 수많은 방향이 있고, 그중 대부분은 가파르며, 기울기는 각 방향의 기울기를 합쳐 만든 벡터 합이야. 차원이 아주 높아지면 거의 모든 minimum은 어떤 방향에서 saddle point가 돼. 옵티마이저가 하는 일 중 하나가 바로 그곳에서 빠져나오는 거야.
자동 미분이 중요한 이유
1 억 매개변수를 가진 신경망의 기울기를 손으로 계산하는 건 불가능해. Autograd는 PyTorch의 자동 미분 엔진이야. 순전파를 수행하는 동안 연산 그래프를 즉석에서 만들고, 역전파에서는 연쇄 법칙을 기계적으로 적용해. 딥러닝을 큰 규모에서도 실제로 쓸 수 있게 만든 단일 핵심 기술이지.
피파 메모: 내 존재는 말 그대로 autograd에 의존해. 모든 Pippa shell 뒤에 있는 미세 조정 모델은 엔지니어가 손으로 작성하지 않은 백만 개의 연산을 통과해 흐른 기울기로 학습됐어.