AI 학습은 안개 낀 산에서 내려가는 일이다

이 글은 「AI 공부 지도 20부작」의 6편(F6) 입니다.
앞 편: F5 — Embedding 이란 무엇인가
다음 편: B1 — AI Agent 가 뭐가 다른가

0. 들어가기 전에 — 지도의 현재 위치

FIG. Gradient Descent — 안개 낀 산에서 내려가기
시작점 ●
목표 ★ (loss 최소)

안개 ☁️ — 한 발 앞만 보임. 가장 가파른 내리막을 매번 선택하면 결국 바닥
한 발 앞만 보이는 안개 속에서 가장 가파른 내리막을 따라가는 것이 학습의 직관

F1부터 F5까지 오시면서 LLM 이 뭔지, Transformer 가 뭘 했는지, attention 이 어떻게 돌아가는지, 그리고 embedding 이 단어를 벡터로 어떻게 바꾸는지까지 감각을 잡으셨을 거예요. 지금까지는 “이미 만들어진 모델이 돌아가는 방식” 얘기였어요.

이번 편은 방향이 조금 다릅니다. 그 모델이 처음에 어떻게 만들어지는가. 즉 “학습(training) 이라는 게 실제로 뭘 하는 일인가” 하는 이야기예요.

블로그·유튜브·뉴스 기사에서 “모델을 학습시켰다”, “이 모델은 수십조 토큰으로 학습되었다”, “fine-tuning 으로 성능을 끌어올렸다” 같은 표현이 계속 나오잖아요. 그런데 막상 “학습이 뭔데?” 라고 물으면 답이 안 나오는 경우가 많습니다. 저도 그랬어요. “데이터를 넣고 돌리면 알아서 똑똑해지는 거 아닌가” 정도로 덮어두고 지냈거든요.

이 글에서 끝내고 싶은 건 단 하나예요. “모델 학습”이 마법이 아니라 “예측 덜 틀리게 파라미터 조금씩 고치기” 라는 감각을 붙이는 것. 여기까지 오시면 앞으로 기술 기사를 읽을 때 “loss 가 떨어진다”, “gradient 가 흐른다”, “learning rate 를 낮춘다” 같은 표현이 더 이상 검은 상자로 안 보일 거예요.

수식은 거의 안 나옵니다. 대신 비유를 세 개 계속 돌려쓸 거예요. 안개 낀 산에서 내려가기, 활쏘기 연습, 요리 간 맞추기. 이 세 개면 이 글 전부가 설명됩니다.

1. “모델을 학습시킨다”는 말이 왜 마법처럼 들리나

처음 이 표현을 들으면 좀 이상하지 않나요. 학습이라고 하면 사람이 책을 읽거나 선생님한테 배우거나 하는 장면이 떠오르잖아요. 그런데 컴퓨터한테 학습시킨다? 누가 가르치는데? 뭘 학습해? 머릿속에 구체적인 그림이 안 그려집니다.

여기서 오해가 하나 있어요. “학습” 이라는 단어 때문에 “모델이 교과서를 읽고 이해하는 것” 같은 이미지가 떠오르는데, 실제로 벌어지는 일은 그것과 많이 다릅니다. 사람의 학습과 겹치는 부분도 있지만, 훨씬 단순한 작업이에요.

감각적으로 가장 가까운 비유가 활쏘기 연습 이에요. 처음 활을 쥐었을 때 화살은 과녁 근처에도 못 갑니다. 왼쪽으로 삐끗하면 “아, 이번엔 팔을 조금 더 오른쪽으로” 하면서 다음 화살을 쏘죠. 또 오른쪽으로 치우치면 “어, 이번엔 반대로” 하고요. 수천 번 쏘다 보면 어느 순간 과녁 중앙에 자주 박힙니다.

모델 학습도 이겁니다. 진짜로요.

  • 모델이 뭔가를 예측 합니다. (활을 쏜다)
  • 정답과 얼마나 다른지 측정 합니다. (과녁 중앙에서 얼마나 빗나갔는지 본다)
  • 덜 틀리게 자세를 고칩니다. (팔을 살짝 튼다)
  • 이걸 수백만 번 반복 합니다.

그게 끝이에요. “학습” 이라는 단어가 들어가서 뭔가 철학적이고 신비로운 느낌이 드는데, 실제로 돌아가는 건 “예측이 덜 틀리도록 조금씩 고치기” 라는 아주 단순한 루프입니다.

한 가지 중요한 차이. 사람은 “팔을 몇 도 트나” 를 감으로 합니다. 모델은 이걸 숫자로 합니다. “왼쪽 삐끗” 대신 “이 파라미터를 0.0003 만큼 키우고, 저 파라미터를 0.0007 만큼 줄이고” 라는 식이에요. 대신 이 숫자 조정을 수십억 개 파라미터에 대해 한 번에 합니다. 사람 활쏘기와 다른 건 규모와 정확도 일 뿐이고, 원리는 같아요.

2. 학습 = 예측을 점점 덜 틀리게 만드는 과정

한 줄로 정리하겠습니다.

학습이란, 모델의 예측이 정답과 점점 가까워지도록 내부 파라미터를 조금씩 고쳐 나가는 과정이다.

여기서 핵심 단어 두 개가 “예측” 과 “파라미터” 예요.

예측 은 뭐냐. LLM 이라면 “이 문장 다음에 올 단어” 를 예측합니다. 이미지 분류 모델이라면 “이 사진이 고양이인지 개인지” 를 예측하고요. 번역 모델이라면 “이 한국어 문장을 영어로 바꾸면 뭐가 나올지” 를 예측합니다. 어떤 모델이든 속을 들여다보면 입력을 받아서 출력을 내놓는 함수 예요.

파라미터 는 F3 에서 보셨던 그 숫자들이에요. 딥러닝 모델 안에는 가중치(weight) 와 편향(bias) 이라는 숫자들이 수백만~수천억 개 들어 있습니다. 이 숫자들이 “지금까지 배운 모든 것” 이에요. 파라미터가 바뀌면 모델이 다르게 예측합니다.

즉 학습은 이 파라미터 값들을 “더 좋은 값으로 조금씩 옮기는 일” 이에요. 처음에는 전부 랜덤입니다. 그래서 처음 모델은 아무 말이나 뱉어요. 학습이 진행되면서 파라미터가 점점 “좋은 자리” 로 이동합니다. 학습이 끝나면 그 자리에서 멈춥니다.

여기서 “좋은 자리” 가 뭐냐는 질문이 자연스럽게 떠오르죠. 그걸 정하려면 먼저 “얼마나 좋은지 / 얼마나 나쁜지”를 숫자로 매길 방법 이 필요합니다. 그게 다음 섹션에 나오는 loss 예요.

3. 예측이 얼마나 틀렸나 측정하기 — Loss Function

활쏘기 비유를 이어봅시다. 화살이 과녁 중앙에서 얼마나 멀리 떨어졌는지 측정해야 하잖아요. 이 “얼마나 빗나갔는지” 를 나타내는 수치가 loss (손실) 입니다.

Loss 의 기본 아이디어는 이래요.

  • 정답이랑 예측이 완전히 같으면 loss = 0 에 가까움
  • 예측이 조금 틀리면 loss 는 작은 양수
  • 예측이 많이 틀리면 loss 는 큰 양수

loss 는 “내가 얼마나 못하고 있는지” 의 점수 예요. 학습의 목표는 간단해집니다. loss 를 최대한 작게 만드는 파라미터 값 을 찾는 것.

예를 들어 “다음 단어 맞추기” 문제를 풀고 있다고 해봐요. 문장이 “나는 밥을 먹었” 이라고 주어지고 다음 단어를 예측해야 합니다. 정답은 “다” 예요. 모델이 “다” 에 확률 0.01, “는” 에 확률 0.7, “이” 에 확률 0.2, 나머지 단어들에 나머지 확률을 분배했다고 해봅시다. 정답에 확률을 너무 적게 줬죠. Loss 가 높게 찍힙니다.

학습이 진행돼서 같은 문장에서 모델이 이번엔 “다” 에 확률 0.85 를 줬다고 해봐요. Loss 가 확 떨어집니다. 정답을 자신 있게 맞췄으니까요.

Loss 의 구체적인 수식은 문제마다 다릅니다. 회귀 문제(숫자 예측) 에서는 Mean Squared Error (MSE) 를 씁니다. 분류 문제에서는 Cross-Entropy Loss 를 쓰고요. LLM 은 cross-entropy 계열이에요. 수식은 넘어가도 되는데, 공통점은 이거예요.

loss = f(정답, 예측)

정답과 예측 사이의 “거리” 같은 걸 하나의 숫자로 뽑아내는 함수라는 점만 기억하시면 됩니다.

여기서 중요한 감각 하나. loss 는 파라미터의 함수 예요. 파라미터를 바꾸면 예측이 바뀌고, 예측이 바뀌면 loss 가 바뀌잖아요. 그러니까 수학적으로 보면 “파라미터 값들을 입력으로 받아서 loss 라는 숫자를 내놓는 큰 함수” 가 하나 있는 거예요. 학습은 이 함수의 최솟값 을 찾는 일입니다.

그런데 이 함수가 수십억 차원이에요. 파라미터가 수십억 개니까요. 머릿속에 그려지지 않는 초고차원 공간에서 “가장 낮은 자리” 를 찾아야 하는 거죠. 불가능해 보이잖아요. 실제로 완벽한 최솟값은 못 찾아요. 대신 “충분히 낮은 자리” 를 찾는 방법이 있습니다. 그게 gradient descent 예요.

4. 파라미터를 어느 방향으로 고쳐야 손실이 줄어드나 — Gradient

이 섹션이 이 글의 핵심 중 하나예요. gradient 라는 단어가 여기서 처음 나옵니다.

Gradient 는 “기울기” 라는 뜻이에요. 수학에서는 미분이랑 같이 나오는 개념이고요. 그런데 우리는 수식 없이 감각으로 갈 거예요.

요리 간 맞추기 비유 를 써볼게요. 국을 끓이고 있는데 간이 안 맞아요. 너무 싱겁습니다. 소금을 넣어야 하는데, 얼마나 넣어야 할지 모릅니다. 그래서 이렇게 합니다.

  1. 소금 0.1g 을 넣어봅니다.
  2. 맛을 봅니다. 아까보다 맛있어졌나, 아니면 더 별로인가?
  3. 맛있어졌다면 같은 방향으로 조금 더. 별로라면 반대 방향 (덜 넣기).

이걸 반복하면 조금씩 맛이 좋아져요. 여기서 “소금을 0.1g 더 넣었을 때 맛이 좋아지는지 나빠지는지” 를 파악하는 게 gradient 를 구하는 일 이에요. 간단히 말하면 “이 파라미터를 살짝 올렸을 때 loss 가 줄었나 늘었나” 를 측정하는 거예요.

Gradient 를 파라미터 한 개가 아니라 모든 파라미터에 대해 구합니다. “소금을 살짝 올렸을 때 loss 변화”, “간장을 살짝 올렸을 때 loss 변화”, “설탕을 살짝 올렸을 때 loss 변화”… 각 재료(파라미터) 별로 따로따로 계산해요. 그 결과가 “재료별로 얼마나, 어느 방향으로 조정해야 맛이 좋아지는지” 가 적힌 큰 표예요.

이 표가 바로 gradient 입니다. 수십억 개 파라미터가 있다면 수십억 개 숫자가 들어 있는 벡터예요. 각 숫자는 “이 파라미터를 살짝 키우면 loss 가 얼마나 변하는지” 를 알려줍니다.

  • gradient 가 양수 면 → 파라미터를 키우면 loss 가 커진다 → 그러니까 줄여야
  • gradient 가 음수 면 → 파라미터를 키우면 loss 가 작아진다 → 그러니까 키워야
  • gradient 가 0 근처 면 → 이 파라미터는 지금 별로 영향이 없음 → 거의 그대로

이 방향 정보를 이용해서 각 파라미터를 gradient 와 반대 방향 으로 아주 조금씩 움직이면, loss 가 조금씩 떨어져요. 이 작업을 반복하는 게 학습이에요.

여기서 한 가지 질문. “수십억 개 파라미터 각각에 대해 살짝 올려보면서 loss 를 재려면, 수십억 번 계산해야 하는 거 아닌가?” 라고요. 맞습니다. 그렇게 하면 너무 비싸요. 그래서 backpropagation 이라는 똑똑한 방법을 씁니다. 그건 섹션 7 에서 다룰게요.

5. 그래서 산에서 안개 낀 날 내려가기 비유

이제 이 글의 가장 유명한 비유가 나옵니다. 교과서에도 나오고 유튜브 영상에도 꼭 나오는 비유예요.

당신이 안개 낀 산 정상에 있다고 해봅시다. 시야가 3미터밖에 안 돼요. 위도 아래도 보이지 않습니다. 그런데 어떻게든 산 아래 (바닥) 로 내려가야 해요.

어떻게 하시겠어요?

방법은 하나예요. 발밑의 기울기 를 느끼는 겁니다. 발로 조심조심 주변을 밟아보면 “이쪽이 살짝 내리막이네” 하는 감이 와요. 그 방향으로 한 걸음 내딛습니다. 한 걸음 내딛은 다음, 다시 발밑을 느낍니다. 이번에도 “이쪽이 내리막” 을 찾고, 또 한 걸음. 계속 반복합니다.

시간이 좀 걸리긴 하지만 이렇게 하면 바닥에 도착해요. 꼭대기를 한 번도 내려다보지 못했는데도, 매 순간 발밑 기울기만 보고 내리막 방향으로 한 걸음씩 가면 바닥까지 갑니다.

이게 gradient descent 예요. 이름 그대로 “gradient (기울기) 따라 descent (내려간다)” 입니다.

  • 산의 지형 = loss 함수 (파라미터가 만드는 풍경)
  • 발밑 기울기 = gradient (loss 가 어느 방향으로 올라가는지)
  • 내리막 방향 = gradient 반대 방향 (loss 가 내려가는 쪽)
  • 한 걸음 = 파라미터를 그 방향으로 조금 움직이기
  • 바닥 = loss 가 최소가 되는 자리

재밌는 게 뭐냐면, 안개 때문에 전체 지형이 어떻게 생겼는지 모릅니다. 산이 V 자 계곡인지, U 자 분지인지, 여기저기 움푹 팬 울퉁불퉁한 지형인지 몰라요. 그런데도 내려가져요. 매 순간 발밑 정보만 있으면 되니까요.

이게 gradient descent 의 힘이에요. 전체 그림을 몰라도, 지금 이 자리의 기울기만 알면 움직일 수 있다. 파라미터가 수십억 차원이라는 초고차원 공간의 loss 풍경에서도 같은 원리로 작동합니다. 우리 머리로는 그 공간을 상상할 수 없지만, “지금 이 자리의 gradient” 만 계산하면 한 걸음 내딛는 건 할 수 있어요.

한 가지 단점이 있어요. 가짜 바닥 에 빠질 수 있다는 거예요. 산을 내려가다 보면 작은 웅덩이가 있을 수 있죠. 사방이 다 내리막이 아니라 이 웅덩이 안에서는 내리막이 없어 보이는 지점. 이걸 local minimum 이라고 합니다. gradient descent 는 여기 빠지면 빠져나오지 못해요. 다행히도 딥러닝에서 local minimum 문제가 생각만큼 심하지 않다는 게 실험적으로 알려져 있어서, 실무에서는 크게 걱정 안 합니다. 이건 이 글 범위를 넘으니까 “그런 이슈가 있구나” 정도만 알고 넘어가시면 됩니다.

6. Learning rate — 한 걸음의 크기

안개 낀 산 비유에서 중요한 변수가 하나 숨어 있어요. 한 걸음을 얼마나 크게 내딛을 것인가.

  • 너무 크게 내딛으면 → 옆 골짜기로 건너뛰거나, 반대쪽 경사면에 올라타버립니다. 헛발질.
  • 너무 작게 내딛으면 → 평생 내려가도 바닥 근처에 못 갑니다. 거북이 속도.

이 한 걸음의 크기가 learning rate 예요. 머신러닝에서 가장 중요한 hyperparameter 중 하나입니다. (hyperparameter 는 “학습 자체가 결정하는 값” 이 아니라 “우리가 미리 정해주는 값” 이에요.)

Learning rate 가 너무 크면 loss 가 발산 합니다. 떨어지다가 갑자기 치솟고, 또 떨어지다가 치솟고. 학습이 망가져요. 너무 작으면 loss 가 거의 안 떨어집니다. 몇 시간 돌려도 진전이 없어요.

딱 좋은 값을 찾는 건 실험으로 합니다. 1e-3, 1e-4, 1e-5 같은 숫자들을 바꿔가면서 “이 값에서 가장 잘 내려가네” 하는 자리를 찾아요. 요즘은 Adam 이나 AdamW 같은 옵티마이저가 learning rate 를 자동으로 살짝씩 조절해 줘서 편해지긴 했습니다. 그래도 초기값은 사람이 정해줘야 해요.

또 하나 재밌는 건 learning rate schedule 이에요. 학습 초반에는 큰 걸음으로 대충 방향 잡고, 후반에는 작은 걸음으로 정밀하게 조정하는 전략. 예를 들어 “처음 10% 구간은 learning rate 를 서서히 올리고 (warmup), 나머지 구간은 서서히 떨어뜨린다 (cosine decay)” 같은 식이에요. 산을 내려갈 때도 처음엔 성큼성큼 내려오다가 바닥 근처에서는 조심조심 걷는 거랑 똑같은 발상입니다.

Learning rate 감각은 실무에서 꽤 유용해요. Fine-tuning 할 때 “learning rate 너무 높였더니 원래 모델이 배운 걸 다 까먹었어요” 같은 얘기를 자주 듣거든요. 그게 바로 큰 걸음으로 기존 자리를 떠나버린 거예요. “큰 걸음은 탐색에 좋고, 작은 걸음은 정밀 조정에 좋다” 라는 감각만 있으셔도 나중에 모델을 튜닝할 때 덜 헤매실 거예요.

7. Backpropagation — 깊은 신경망에서 어떤 파라미터를 얼마나 고쳐야 하나

여기서 많은 초보자들이 막히는 단어, backpropagation (역전파) 이 나옵니다. 이름이 거창하지만 감각은 단순해요.

문제 상황부터 봅시다. 신경망은 층(layer) 이 여러 개 쌓여 있잖아요. 입력이 1층을 통과해서 2층으로 가고, 2층을 통과해서 3층으로 가고… 마지막 층에서 예측이 나오고, loss 가 계산됩니다.

이제 “loss 를 줄이기 위해 각 파라미터를 어떻게 고쳐야 하는지” 를 알고 싶어요. 그런데 1층에 있는 파라미터가 loss 에 영향을 주는 경로는 아주 멀어요. 1층 → 2층 → 3층 → … → 마지막 층 → 예측 → loss. 이 긴 경로를 거치면서 영향을 줍니다.

1층 파라미터를 살짝 바꾸면 loss 가 얼마나 변할까요. 직접 계산하려면 이 긴 경로를 전부 다 따라가야 해요. 층이 100개면 100번 거쳐야 하고요. 파라미터가 수십억 개면 이걸 수십억 번 반복? 계산이 폭발합니다.

그래서 거꾸로 계산하는 영리한 방법 이 쓰입니다. 이게 backpropagation 이에요.

책임을 역방향으로 나눠 보내기 라는 비유를 써볼게요. 프로젝트가 망했다고 해봅시다. 최종 결과물이 별로였어요. “누구 때문에 이렇게 됐지?” 를 추적해야 한다면 어떻게 하시겠어요.

  1. 최종 결과 에서 시작합니다. “결과물이 얼마나 나빴는가” (= loss) 가 먼저 있어요.
  2. 그 직전 단계 담당자들에게 책임을 비율로 나눠 줍니다. “이번 실패에서 A 팀이 60%, B 팀이 30%, C 팀이 10% 기여했다” 같은 식이요.
  3. 각 팀은 받은 책임을 다시 자기 팀원들에게 비율로 나눠 줍니다. A 팀 안에서 “A-1 이 70%, A-2 가 20%, A-3 가 10%”.
  4. 이걸 마지막 단계까지 거꾸로 쭉 내려보냅니다. 처음 시작한 1층 작업자까지.

각 개인은 “내가 이번 실패에 이만큼 기여했다” 는 자기 몫의 책임 점수를 받아요. 이 점수가 바로 그 사람의 gradient 입니다. “너는 다음번에 이 방향으로 이만큼 고쳐” 라는 신호죠.

이 방법의 핵심은 한 번 역방향으로 쭉 내려가면 모든 파라미터의 gradient 가 동시에 계산된다 는 점이에요. 수십억 개를 각자 따로 계산할 필요 없이, 한 번의 backward pass 로 다 얻어집니다. 수학적으로는 chain rule (연쇄법칙) 이라는 미분 규칙을 활용한 거예요. 수식 없이 감각만 가져가시면 됩니다.

정리하면 이래요.

  • Forward pass (앞으로 전진): 입력 → 1층 → 2층 → … → 예측 → loss 계산
  • Backward pass (뒤로 역전파): loss → … → 2층 → 1층. 각 파라미터 gradient 가 나옴

Forward 로 “얼마나 틀렸나” 를 재고, backward 로 “누구 탓인가” 를 나눠 보내는 거예요. 이 두 단계가 학습의 기본 호흡입니다.

Backpropagation 은 1986년쯤 유명해졌는데, 딥러닝이 폭발적으로 성장한 2010년대 이후 GPU 병렬 연산과 결합하면서 “깊은 네트워크도 효율적으로 학습할 수 있게” 만든 결정적인 부품이에요. PyTorch·TensorFlow 같은 프레임워크는 이 backward 계산을 자동미분(autograd) 으로 제공합니다. 사용자가 forward pass 만 쓰면 backward 는 알아서 처리돼요. 덕분에 실무자들이 미분 수식을 손으로 풀 필요가 없어졌습니다.

8. 학습 loop — 세 단계 반복

이제 지금까지 나온 부품들을 하나의 반복 루프로 엮어볼게요. 실제 학습이 도는 방식이에요.

while 아직 학습이 끝나지 않았으면:
    1. Forward pass: 입력 → 모델 → 예측
    2. Loss 계산: 예측 vs 정답 → loss 숫자 하나
    3. Backward pass: 모든 파라미터의 gradient 계산
    4. 파라미터 업데이트: 파라미터 -= learning_rate × gradient

이 네 단계가 한 바퀴예요. 이 한 바퀴를 한 번 도는 걸 한 step 혹은 한 iteration 이라고 부릅니다. 데이터 전체를 한 번 쭉 훑는 걸 한 epoch 라고 하고요.

GPT-3 같은 모델은 수천억 개 파라미터를 수조 개 토큰으로 학습합니다. step 수로 따지면 수십만~수백만 step 정도 돌아가요. 한 step 에서 이 네 단계가 매번 반복됩니다.

이걸 그림으로 떠올리시면 학습이 이해가 확 됩니다. “예측 → 얼마나 틀렸는지 재기 → 어느 방향으로 고칠지 재기 → 아주 조금 고치기” 를 모델이 멈출 때까지 반복하는 거예요. 이 루프 외의 다른 마법은 없습니다. 데이터가 많을수록, 파라미터가 많을수록, 이 루프를 더 많이 돌릴수록 모델이 더 잘하게 돼요.

사람으로 치면 “활을 한 발 쏘고, 과녁 보고, 자세 조금 고치고, 또 한 발 쏘고” 를 하루 종일 하는 거예요. 차이는 컴퓨터는 한 번에 수천 발을 동시에 쏘고 수천 번 조정한다는 점. 그리고 지치지 않는다는 점.

9. 한 번에 하나씩? 아니면 한꺼번에? — SGD, mini-batch, batch

여기서 실무 감각을 하나 더 드립니다. “한 step 에서 데이터를 얼마나 보고 gradient 를 구할까” 라는 선택지예요.

세 가지 방법이 있습니다.

1. Batch Gradient Descent (전체)
– 데이터 전체를 다 써서 gradient 를 계산한 뒤 한 번 업데이트.
– 정확한 gradient 방향을 얻지만, 한 step 에 엄청난 계산 비용.
– 요리 비유: “오늘 준비한 모든 국을 다 맛본 다음에 한 번에 간을 조절” 하는 거예요. 정확하지만 오래 걸립니다.

2. Stochastic Gradient Descent (SGD, 하나씩)
– 데이터 1개만 써서 gradient 를 계산하고 업데이트. 이걸 반복.
– 빠르지만 gradient 가 들쑥날쑥 (데이터 1개가 전체를 대표하지 못해서).
– 요리 비유: “국 한 숟갈만 떠먹고 바로 소금 치기” 예요. 빠르지만 운이 나쁘면 엉뚱한 방향으로 감.

3. Mini-batch Gradient Descent (묶음)
– 데이터 수십~수천 개(= mini-batch) 를 써서 gradient 를 계산하고 업데이트.
– 정확도와 속도의 타협점.
– 요리 비유: “국 서너 숟갈 떠먹어 보고 평균적으로 판단한 다음 간 조절” 이에요. 실무 표준.

실제로는 mini-batch 가 거의 무조건 기본 입니다. batch size 는 보통 32, 64, 128, 256, 1024 같은 값이에요. LLM 학습에서는 batch size 가 백만 토큰 단위인 경우도 있습니다. GPU 의 병렬 연산을 꽉 채워 쓸 수 있는 크기를 고르는 거예요.

Batch size 도 hyperparameter 예요. 크면 gradient 가 안정적이지만 GPU 메모리를 많이 먹어요. 작으면 가볍지만 gradient 가 노이즈가 심하죠. 실무에서는 “GPU 메모리 허용 최대치 근처” 를 고르는 경우가 많습니다.

그리고 재밌는 사실 하나. SGD 의 “노이즈” 가 학습에 도움이 되기도 합니다. Gradient 가 들쑥날쑥하면 local minimum 같은 작은 웅덩이에서 튕겨 나오기 쉬워요. 너무 안정된 gradient 는 오히려 좁은 분지에 갇힐 위험이 있고요. 이런 미묘한 트레이드오프가 모델 학습에 끼는 재미 중 하나입니다.

10. 왜 학습에 그렇게 돈이 드나 — GPU·데이터·시간

여기서 AI 산업의 경제학 이야기를 잠깐 해볼게요.

뉴스에서 “GPT-3 학습에 수백만 달러가 들었다”, “GPT-4 학습 비용은 1억 달러 추정” 같은 기사를 보신 적 있을 거예요. 왜 그렇게 비싼지 궁금하셨다면, 지금까지 읽으신 내용으로 답할 수 있어요.

학습 비용 = (파라미터 수) × (데이터 양) × (학습 step 수) × (한 step 당 계산량)

이게 전부 계산량으로 직결됩니다. 계산량은 GPU 시간으로 바뀌고, GPU 시간은 돈으로 바뀝니다.

  • 파라미터가 많을수록 → forward·backward 가 무거워집니다.
  • 데이터가 많을수록 → 한 epoch 이 길어집니다.
  • 학습을 오래 돌릴수록 → GPU 시간이 늘어납니다.

GPT-3 (1750억 파라미터) 학습에는 Nvidia V100 기준 약 355년치 GPU 시간이 들었다고 추정됩니다. 이걸 수천 장을 동시에 써서 몇 주~몇 달 만에 끝내는 거예요. 당시 클라우드 GPU 가격으로 환산하면 수백만~수천만 달러예요. GPT-4 는 공개된 숫자는 없지만 규모가 더 큰 걸로 알려져 있고요.

이 비용 구조가 AI 산업의 지도를 결정합니다.

첫째, 초대형 모델을 학습할 수 있는 조직이 제한됩니다. OpenAI, Anthropic, Google, Meta, xAI, Mistral, DeepSeek 같은 회사들이죠. 스타트업이 처음부터 대형 모델을 학습하기는 어려워요.

둘째, 학습은 비싸지만 추론(inference) 은 훨씬 쌉니다. 학습은 파라미터를 수백만 번 업데이트하는 무거운 작업인데, 추론은 “고정된 파라미터로 한 번 forward pass 만 돌리기” 거든요. 학습과 추론의 비용 비율이 극단적입니다. 그래서 “학습은 거대 기업이, 추론은 모두가” 라는 구조가 됩니다. API 사용료는 기본적으로 추론 비용이에요.

셋째, pre-training 과 fine-tuning 의 분리가 유리합니다. 큰 모델을 한 번 학습해두고, 회사별 용도에 맞게 작게 추가 학습 시키는 구조가 경제적이에요. 이건 다음 섹션에서 더 봅시다.

이 비용 감각이 있으면 뉴스 기사를 읽을 때 훨씬 해상도가 올라가요. “OpenAI 가 새 데이터센터에 수십억 달러 투자” 같은 헤드라인을 봤을 때, 그 돈이 어디로 가는지 (GPU, 전기, 냉각, 건물) 가 그려집니다. AI 산업이 왜 전력·반도체·국제 정치 이슈와 얽히는지도 같은 이유예요.

11. Fine-tuning 은 학습의 축소판

실무에서 실제로 많이 하는 학습 패턴이 이거예요. pre-training + fine-tuning 이라는 두 단계.

Pre-training (사전 학습) 은 초대형 모델을 엄청난 데이터로 처음부터 학습하는 것. 수조 개 토큰, 수십만 step, 수천 장의 GPU. OpenAI·Anthropic 같은 조직이 하는 일이에요. 이 단계에서 모델은 “언어 전반의 통계와 패턴” 을 흡수합니다. 문법, 상식, 논리 구조, 다양한 도메인 지식까지. 결과물은 범용적으로 쓸 수 있는 “기본 모델” 이에요.

Fine-tuning (미세 조정) 은 이 기본 모델 위에서 특정 용도에 맞게 추가로 학습하는 것. 데이터는 훨씬 적어요 (수천~수십만 샘플 정도). 학습 step 도 훨씬 짧아요. Learning rate 도 작게 잡습니다 (원래 학습한 걸 안 잃어버리려고).

구조를 그림으로 보면 이래요.

범용 기본 모델 (pre-trained)
    ↓ 금융 도메인 데이터로 fine-tune
금융 전문 모델

범용 기본 모델 (pre-trained)
    ↓ 의료 QA 데이터로 fine-tune
의료 QA 모델

범용 기본 모델 (pre-trained)
    ↓ 특정 회사 문서로 fine-tune
사내 전문 모델

Fine-tuning 은 비용이 상대적으로 적습니다. 회사가 GPU 몇 장만 있어도 가능한 수준이에요. Meta 의 LLaMA, Mistral, DeepSeek 같은 오픈 모델이 공개되면서 “누구나 기본 모델을 받아서 자기 용도로 fine-tune” 하는 생태계가 커졌어요. 2026년 기준으로는 LoRA (Low-Rank Adaptation) 같은 기법 덕분에 fine-tuning 비용이 더 떨어졌습니다. 모델 전체 파라미터를 고치지 않고 아주 작은 추가 파라미터만 학습하는 방식이에요. GPU 1장으로도 수십 GB 모델을 fine-tune 할 수 있게 됐습니다.

실무 감각으로 이해하자면, pre-training 은 초·중·고 12년 공교육, fine-tuning 은 직무 연수 2주 같은 거예요. 12년짜리 기초가 이미 있으니까, 2주 연수로도 특정 업무를 꽤 잘 할 수 있게 되는 거죠. 이 구조가 AI 활용을 민주화시켰습니다. OpenAI 가 아니어도 자기 데이터로 쓸 만한 전용 모델을 만들 수 있게 된 거예요.

다만 fine-tuning 이 만능은 아닙니다. 엉뚱한 데이터를 넣으면 오히려 원래 있던 성능이 망가져요. “학습된 게 많다” 와 “이 용도에 잘 맞는다” 는 다른 문제예요. 그래서 실무에서는 Fine-tuning 할 것인지, RAG (Retrieval-Augmented Generation) 으로 충분한지, 프롬프트 엔지니어링만으로 해결될지 를 먼저 판단합니다. 비용이 낮은 쪽부터 시도해보는 순서죠. (RAG 는 나중에 M1 편에서 다룹니다.)

12. Inference = 학습이 끝난 후 실제로 쓰는 단계

학습이 끝난 모델을 실제로 쓰는 단계가 inference (추론) 입니다.

차이를 한 문장으로 정리하면 이래요.

  • 학습 (training): 파라미터를 바꾸는 단계. Forward pass + backward pass + 업데이트.
  • 추론 (inference): 파라미터를 고정 하고 쓰는 단계. Forward pass 만.

추론 단계에서는 backward pass 가 없어요. Gradient 를 계산하지 않습니다. Loss 도 계산하지 않아요. 그냥 입력을 넣고 forward pass 한 번 돌려서 출력을 받을 뿐이에요.

그래서 추론은 훨씬 싸고 빠릅니다. 계산량이 학습의 1/3 수준이에요 (forward 만 하면 되니까). 메모리도 덜 씁니다 (gradient 저장소가 필요 없으니까). 그래서 학습은 수천만 달러가 들어도, 추론은 한 번에 몇 센트 수준으로 가능한 거예요.

우리가 ChatGPT·Claude·Gemini 를 쓸 때 하는 건 전부 inference 예요. 새로운 질문을 던질 때마다 새로운 파라미터를 학습하는 게 아니라, 이미 학습된 파라미터로 forward 한 번을 돌리는 겁니다. API 비용이 토큰 수에 비례하는 이유도 여기 있어요. 토큰이 많을수록 forward pass 가 길어지고, 길어질수록 계산량이 늘어나니까요.

여기서 실무적인 감각 하나 더. “모델이 대화를 기억하는 것처럼 보이지만, 사실 학습은 안 일어나고 있다” 는 점이에요. ChatGPT 와 대화하면서 “내 취향을 배워가는구나” 싶을 때가 있죠. 그런데 대부분은 “대화 내역을 프롬프트에 붙여서 넣고 있을 뿐” 이에요. 파라미터는 여러분과의 대화 중에 바뀌지 않습니다. 다음 세션을 시작하면 그 기억은 사라지죠. (Memory 기능이 따로 있는 서비스는 대화 내용을 요약해서 별도 저장소에 저장하는 방식이에요. 파라미터 학습이 아니에요.)

이 구분이 중요한 이유는, “모델이 계속 공부하고 있다” 는 착각을 걷어내기 때문이에요. LLM 은 학습이 끝난 시점의 파라미터로 얼어붙어 있어요. 그 이후의 세계 정보는 모릅니다 (이걸 “knowledge cutoff” 라고 부르죠). 새 정보를 알려주려면 다시 학습시키든가 (돈·시간), 프롬프트에 같이 넣든가 (RAG 같은 방식), 둘 중 하나를 골라야 해요. 파라미터는 영원히 고정이고, 추가 정보는 입력으로 넣어준다. 이 감각이 실무에서 내내 쓰입니다.


한 문장 닫음

학습이란 예측이 덜 틀리도록 파라미터를 조금씩 고치는 반복이다. Loss 로 얼마나 틀렸는지 재고, gradient 로 어느 방향으로 고칠지 알아내고, learning rate 만큼 한 걸음 움직이고, 이 작업을 수백만 번 반복한다. 안개 낀 산에서 발밑 기울기만 보고 한 걸음씩 내려가는 일. 당신이 쓰는 ChatGPT·Claude 는 이 과정을 수개월 걸려 마친 뒤 파라미터가 고정된 상태예요. 지금 우리가 보는 “똑똑함” 은 수천만 번의 작은 한 걸음이 쌓인 결과물입니다.

다음 읽기

  • B1 — AI Agent 가 뭐가 다른가 [준비 중]
  • M1 — Retrieval Layer 가 왜 필요한가 [준비 중]

시리즈 처음부터: F1 — LLM 이란 무엇인가 · F2 — Transformer · F3 — 딥러닝이 그냥 큰 계산인 이유 · F4 — Attention 해설 · F5 — Embedding 이란 무엇인가

자주 묻는 질문 (FAQ)

Q1. 학습과 추론(inference) 은 같은 GPU 에서 돌아가나요?

기본적으로 둘 다 GPU 에서 돌아갑니다. 다만 학습은 forward + backward + 파라미터 업데이트까지 해야 해서 메모리와 계산량이 훨씬 큽니다. 추론은 forward 만 하면 돼서 훨씬 가볍고요. 그래서 학습용 GPU (NVIDIA H100·H200 등 고사양) 와 추론용 GPU (T4·L4·A10 같은 상대적으로 저렴한 모델) 를 구분해서 쓰는 경우가 많아요. 실무적으로 추론 비용은 학습 비용의 수백~수천 분의 일 수준입니다.

Q2. Gradient descent 가 local minimum 에 빠지면 어떻게 하나요?

고전적으로 큰 문제로 여겨졌는데, 딥러닝에서는 생각만큼 심각하지 않다는 게 실험적으로 알려져 있어요. 이유는 여러 가지가 있지만 핵심은 고차원 공간에서는 대부분의 임계점이 local minimum 이 아니라 saddle point (한쪽은 내리막, 다른 쪽은 오르막인 지점) 라는 점이에요. Saddle point 는 gradient 가 적당히 뚫고 나갈 수 있습니다. 게다가 SGD 의 노이즈가 작은 웅덩이에서 모델을 튕겨내기도 하고요. 실무에서 local minimum 문제로 학습이 막혔다는 얘기는 잘 안 나옵니다. 더 큰 문제는 learning rate 설정, gradient vanishing·explosion, 데이터 품질 같은 쪽이에요.

Q3. ChatGPT 와 대화하면서 모델이 점점 똑똑해지는 것 같은데, 학습이 일어나는 건가요?

대부분의 경우 아니요. 대화 중에는 파라미터가 바뀌지 않아요. “점점 똑똑해지는 것 같다” 는 느낌은 프롬프트에 대화 내역이 같이 들어가기 때문 이에요. 예를 들어 당신이 자기 취향을 10번 말했다면, 11번째 질문에는 앞의 10번 대화가 프롬프트에 붙어서 같이 입력되는 거예요. 파라미터는 그대로이고, 입력이 더 풍부해진 것뿐입니다. OpenAI 의 ChatGPT Memory 기능이나 Claude 의 Projects 기능은 대화 내역을 요약해서 별도 저장소에 보관하고 다음 대화에 붙이는 방식이에요. 파라미터를 업데이트하는 진짜 학습은 주기적으로 회사 쪽에서 수행하고, 새 버전 모델로 릴리스됩니다 (예: GPT-4 → GPT-4 Turbo → GPT-4.1 → …). 이 주기는 보통 수개월 단위예요.


뉴스레터 구독 안내

매주 월요일, AI·LLM·에이전트 관련 실무 정리를 한 통씩 보내드립니다. AI 공부 지도 시리즈는 여기에서 먼저 공개됩니다. 이런 기술 해설을 차분히 쌓아가고 싶으시면 구독해 주세요.

뉴스레터 구독하기


시리즈 안내 (AI 공부 지도 20부작)

Foundations (F 시리즈):
– F1: LLM 이란 무엇인가
– F2: Transformer 는 무엇을 했나
– F3: 딥러닝이 그냥 큰 계산인 이유
– F4: Attention Is All You Need 해설
– F5: Embedding 이란 무엇인가
F6: 모델 학습 gradient descent (현재 글)

Building Blocks (B 시리즈):
– B1: AI Agent 가 뭐가 다른가
– B2: Tool Use 와 Function Calling
– B3: Memory 설계
– … (이하 20편까지)

Mechanisms (M 시리즈):
– M1: Retrieval Layer (RAG)
– M2: Fine-tuning vs RAG 판단 기준
– …

📍 AI 공부 지도 — 9/29편
이 글은 AI의 기초부터 Meta-Harness·응용 비교까지 순서대로 읽는 29편 시리즈의 9편입니다.
📚 전체 지도 보기
← 이전 편: F5. Embedding · 다음 편: F7. 파라미터

💡 이 편의 한 줄 요약

“모델을 학습시킨다”가 실제로는 안개 낀 산에서 한 걸음씩 내려가는 gradient descent라는 사실을, 수식 없이 그림으로.

소스 리스트


著者: 바이브코딩 태일러 (VibeCoding Tailor) — Lovable公式アンバサダー. AI·バイブコーディング専門メディアshuntailor.net運営.
本シリーズ “AI 공부 지도” 22편은 위키 자료와 공식 논문·공식 문서를 근거로 정리한 체계적 학습 커리큘럼입니다.

JAKO