Chapter 17

AI는 어떻게 계산하나

사진 속 고양이를 알아보고, 질문에 답하고, 글을 이어 쓰는 AI. 마법처럼 보이지만 그 속에서 CPU와 GPU가 하는 일은 지금까지 배운 것과 같다. 엄청나게 많은 곱셈과 덧셈이다. 이 장에서는 AI가 “배운다”는 것이 무슨 뜻인지, 왜 GPU가 필요한지, 왜 큰 모델은 메모리를 그렇게 많이 먹는지를 작은 실험으로 하나씩 확인한다.

규칙을 짜는 대신 예시로 배운다

지금까지 본 프로그램은 사람이 규칙을 하나하나 적은 것이었다. “잔액이 출금액보다 적으면 거절한다” 같은 식이다. 그런데 “사진에 고양이가 있으면 참”이라는 규칙은 어떻게 적을까? 귀가 뾰족하고, 수염이 있고… 하다 보면 끝이 없다. 각도, 조명, 털 색이 바뀔 때마다 예외가 생긴다.

머신러닝(machine learning)은 순서를 뒤집는다. 사람이 규칙을 적는 대신, 문제와 정답이 붙은 예시를 잔뜩 보여 주고 컴퓨터가 규칙을 스스로 찾게 한다. 찾아낸 규칙은 사람이 읽을 수 있는 문장이 아니라 수많은 숫자의 묶음이다. 이 묶음을 모델(model)이라 하고, 숫자 하나하나를 매개변수(parameter, 가중치)라 한다.

전통적인 프로그래밍 규칙사람이 작성 데이터새 메일 컴퓨터 답스팸? 아님? 머신러닝 데이터메일 10만 통 정답사람이 붙인 표시 학습숫자 조정 반복 규칙 = 모델숫자 묶음
그림 17-1. 전통적인 프로그램은 규칙을 받아 답을 낸다. 머신러닝은 예시와 정답을 받아 규칙(모델)을 만든다. 만들어진 모델은 이후 새 데이터에 답을 내는 데 쓰인다.

AI의 일은 두 단계로 나뉜다. 예시로 숫자를 맞춰 가는 학습(training), 그리고 완성된 모델로 새 질문에 답하는 추론(inference)이다. 주방으로 치면 학습은 요리사가 수천 번 맛을 보며 레시피를 다듬는 기간이고, 추론은 다듬어진 레시피로 손님 요리를 내는 영업 시간이다. 학습은 몇 달 동안 GPU 수천 대가 필요할 수 있지만, 추론은 휴대폰에서도 돌아갈 수 있다.

인공 뉴런 하나: 곱하고, 더하고, 판단한다

신경망의 가장 작은 부품은 인공 뉴런(artificial neuron)이다. 하는 일은 단순하다. 입력 몇 개를 받아 각각에 가중치를 곱해 더하고, 마지막에 편향(기준점)을 더한 다음, 그 값이 0보다 크면 “예”, 작으면 “아니오”라고 답한다.

점수 = w1 × 단맛 + w2 × 신맛 + b 점수 > 0 이면 “귤”, 아니면 “레몬”

가중치는 “이 입력을 얼마나 중요하게 볼까”를 뜻한다. 단맛이 귤의 증거라면 w1은 양수로 크게, 신맛이 레몬의 증거라면 w2는 음수가 된다. 이 숫자를 사람이 정하지 않고 예시로부터 찾아내는 것이 학습이다. 아래에서 직접 숫자를 돌려 보고, 컴퓨터가 고치는 모습도 지켜보자.

SIMULATOR

뉴런 하나로 귤과 레몬 가르기

학습
정답률—
고친 횟수0
현재 식—
가로축은 단맛, 세로축은 신맛이다. 동그라미는 귤, 세모는 레몬. 배경색은 뉴런의 판단(주황 = 귤, 초록 = 레몬)이고, 경계선이 점수 0인 곳이다. 고리가 쳐진 과일은 뉴런이 틀린 것. “틀린 것 하나 고치기”를 누르면 틀린 과일 하나를 골라 그 과일 쪽으로 경계가 조금 움직이도록 가중치를 고친다. 이 단순한 규칙(퍼셉트론 학습)을 반복하는 것만으로 경계가 제자리를 찾아간다.
요리사의 맛 판정

신참 요리사가 귤과 레몬을 맛만 보고 구분하려 한다. 처음엔 엉터리로 판정하다가, 틀릴 때마다 “단맛을 조금 더 믿자”, “신맛을 더 무겁게 보자”처럼 기준을 살짝 고친다. 뉴런의 학습도 같다. 한 번에 정답을 깨닫는 것이 아니라 틀린 만큼 조금씩 고친다.

학습이란 오차의 골짜기를 내려가는 것

뉴런이 몇 개일 때는 틀린 것을 하나씩 고쳐도 되지만, 숫자가 수십억 개라면 더 체계적인 방법이 필요하다. 먼저 모델이 얼마나 틀렸는지를 숫자 하나로 잰다. 이것을 손실(loss, 오차)이라 한다. 손님 불만 점수라고 생각하면 된다. 그러면 학습은 “불만 점수가 가장 낮아지는 가중치 찾기”가 된다.

가중치를 가로축, 손실을 세로축에 그리면 울퉁불퉁한 지형이 된다. 눈을 가리고 산에서 내려오려면? 발밑의 기울기를 느끼고 내리막 쪽으로 한 걸음씩 가면 된다. 이것이 경사 하강법(gradient descent)이다. 한 걸음의 크기를 학습률(learning rate)이라 한다.

SIMULATOR

경사 하강: 공을 골짜기로 굴리기

시작 위치 (그래프를 눌러도 된다)
 
걸음 수0
현재 손실—
상태—
위는 가중치에 따른 손실 지형, 아래는 걸음마다 손실이 어떻게 변했는지다. 해볼 것: 학습률을 아주 작게 하면 너무 느리고, 아주 크게 하면 골짜기를 건너뛰며 튀어 다니거나 아예 밖으로 날아가 버린다. 또 오른쪽에서 출발하면 왼쪽의 더 깊은 골짜기를 모른 채 얕은 골짜기에 머문다(지역 최솟값). 실제 모델은 이런 지형이 수십억 차원이라 그림으로 그릴 수 없을 뿐, 원리는 같다.
예측해 보기

학습률을 가장 크게 하면 공은 어떻게 될까?

걸음 크기 = 학습률 × 기울기다. 가파른 곳에서 큰 걸음을 내디디면 어디에 떨어질지 생각해 보자. 예측한 다음 위에서 확인해 보자.

걸음이 너무 크면 골짜기 바닥을 건너뛰어 반대쪽 비탈에 떨어진다. 그곳이 더 가파르면 다음 걸음은 더 커지고, 결국 손실이 폭발한다(발산). 실제 AI 학습에서도 학습률은 가장 먼저 조정하는 값이다.

그렇다면 수십억 개 가중치의 기울기는 어떻게 구할까? 출력에서 생긴 오차를 거꾸로 거슬러 올라가며 “이 가중치가 오차에 얼마나 책임이 있나”를 한꺼번에 계산하는 방법이 있다. 이것을 역전파(backpropagation)라 한다. 학습은 “예시 넣기 → 오차 재기 → 역전파로 기울기 구하기 → 모든 가중치를 한 걸음 고치기”를 수백만 번 반복하는 일이다.

뉴런을 쌓으면 신경망, 계산은 행렬 곱셈

뉴런 하나는 직선 하나로만 나눌 수 있다. 하지만 뉴런을 여러 개 나란히 놓아 층을 만들고, 층의 출력을 다음 층의 입력으로 넣으면 훨씬 복잡한 경계도 표현할 수 있다. 이것이 신경망(neural network)이고, 층이 많으면 딥러닝(deep learning)이라 부른다.

x1x2x3 귤레몬 입력 3숨은 층 4출력 2 선 12개 = 가중치 12개선 8개 한 층의 계산 = 행렬 × 벡터 =× h (4)가중치 W (4×3)x (3) 줄마다 곱하고 더하기 = 뉴런 4개를 동시에 대형 언어 모델: 이런 행렬이 수백 층, 가중치는 수십억 ~ 수천억 개
그림 17-2. 작은 신경망. 층과 층을 잇는 선 하나가 가중치 하나다. 한 층의 계산을 모아 쓰면 행렬과 벡터의 곱셈이 된다.

여기서 12장의 이야기가 연결된다. 행렬 곱셈은 “서로 독립적인 곱셈과 덧셈을 엄청나게 많이” 하는 일이다. 4번째 뉴런의 계산이 1번째 뉴런의 결과를 기다릴 필요가 없다. 수천 개의 단순한 코어로 같은 계산을 한꺼번에 하는 GPU가 AI에 쓰이는 이유가 바로 이것이다. 요즘 GPU에는 행렬 곱셈만 전문으로 하는 텐서 코어까지 들어 있다.

NPU: AI 전용 계산기

휴대폰과 노트북에는 NPU(Neural Processing Unit)라는 칩이 따로 들어가기도 한다. GPU처럼 그래픽까지 하지 않고 행렬 곱셈만 아주 적은 전력으로 하도록 만든 전용 회로다. 사진 속 얼굴 찾기, 음성 인식, 배경 흐림 같은 AI 기능을 배터리를 덜 쓰면서 처리한다. 4장에서 본 것처럼 범용 부품보다 한 가지 일에 특화한 부품이 빠르고 효율적이다.

챗봇의 정체: 다음 단어 맞히기

대화형 AI의 핵심인 대형 언어 모델(LLM, Large Language Model)이 하는 일은 놀랍도록 단순하다. 지금까지의 글을 보고 다음에 올 조각의 확률을 계산한다. 그중 하나를 고르고, 그것을 글 뒤에 붙인 다음 다시 다음 조각을 예측한다. 이 반복으로 문장이 만들어진다.

모델이 읽고 쓰는 단위는 글자도 단어도 아닌 토큰(token)이다. “컴퓨터가”는 “컴퓨터”와 “가”처럼 자주 쓰이는 조각으로 나뉜다. 각 토큰은 2장에서 본 것처럼 결국 번호(숫자)로 바뀌어 신경망에 들어간다.

SIMULATOR

장난감 언어 모델로 문장 이어 쓰기

첫 단어
 
이 장난감 모델은 짧은 예문 30여 개에서 “이 토큰 다음에 어떤 토큰이 몇 번 왔나”만 세어 확률을 만든다. 막대는 다음 토큰 후보와 확률이다. 온도를 낮추면 가장 확률 높은 후보만 고르고(늘 같은 문장), 높이면 드문 후보도 자주 뽑혀 엉뚱한 문장이 나온다. 진짜 LLM은 바로 앞 한 토큰이 아니라 앞의 수천~수십만 토큰 전체를 보고, 수천억 개의 가중치로 확률을 계산한다는 점만 다르다.
그럴듯함 ≠ 사실

언어 모델은 “가장 그럴듯하게 이어지는 글”을 만든다. 그 글이 사실인지는 따로 확인하지 않는다. 그래서 존재하지 않는 책 제목이나 틀린 숫자를 자신 있게 말하기도 한다. 이것을 환각(hallucination)이라 한다. 중요한 정보는 출처를 확인하는 습관이 필요하다.

모델 크기, 메모리, 그리고 속도

“80억(8B) 매개변수 모델”이라는 말은 가중치 숫자가 80억 개라는 뜻이다. 숫자 하나를 16비트(2바이트)로 저장하면 모델 크기는 80억 × 2 = 16 GB다. 추론하려면 이 숫자들이 전부 메모리에 올라와 있어야 한다. 6장에서 본 대로 RAM(조리대)에 없으면 SSD(창고)까지 다녀와야 하니 매우 느려진다.

더 중요한 사실이 있다. 언어 모델은 토큰 하나를 만들 때마다 가중치 전체를 한 번씩 읽는다. 그래서 생성 속도는 계산 능력보다 메모리 대역폭에 크게 좌우된다. 대략 초당 토큰 ≈ 메모리 대역폭 ÷ 모델 크기다. 숫자를 8비트나 4비트로 줄여 저장하는 양자화(quantization)가 널리 쓰이는 이유다. 정확도는 조금 잃지만 크기가 줄고 속도는 빨라진다.

CALCULATOR

이 모델이 내 기기에서 돌아갈까

매개변수 수
숫자 하나의 크기
기기
모델 크기—
기기 메모리—
예상 생성 속도—
아래쪽 글은 계산된 속도로 실제로 흘러나오는 모습이다(사람이 읽는 속도는 초당 5~10 토큰 정도). 기기 수치는 대표적인 값을 단순화했고, 실제로는 대화 내용을 기억하는 메모리(KV 캐시)와 운영체제 몫이 더 필요하다. 해볼 것: 70B 모델을 16비트로 게임용 GPU에 올려 보고, 4비트로 바꿔 보자. 그다음 같은 모델을 AI용 GPU 여러 대에 나눠 올려 보자.

그래서 AI 회사들은 메모리가 크고 대역폭이 넓은(HBM을 쌓은) GPU를 수천, 수만 대씩 연결해 쓴다. 학습할 때는 가중치뿐 아니라 기울기와 중간 결과까지 저장해야 해서 추론보다 몇 배의 메모리가 필요하다. 한편 휴대폰에서는 1~3B 정도의 작은 모델을 4비트로 줄여 NPU로 돌린다. 같은 원리 위에서 규모만 다른 것이다.

핵심 정리

  1. 머신러닝은 규칙을 직접 짜는 대신 예시와 정답으로 규칙(모델)을 찾는다. 모델은 수많은 숫자(가중치)의 묶음이다.
  2. 인공 뉴런은 입력에 가중치를 곱해 더하고 편향을 더해 판단한다. 틀린 만큼 가중치를 조금씩 고치는 것이 학습이다.
  3. 경사 하강법은 손실이 줄어드는 방향으로 한 걸음씩 가중치를 옮긴다. 학습률이 너무 작으면 느리고, 너무 크면 발산한다.
  4. 신경망 한 층의 계산은 행렬 곱셈이다. 독립적인 곱셈이 매우 많아 GPU·NPU가 잘 맞는다.
  5. 언어 모델은 다음 토큰의 확률을 반복해서 계산한다. 그럴듯함이 사실을 보장하지는 않는다.
  6. 모델 크기 = 매개변수 수 × 숫자 하나의 크기. 생성 속도는 대략 메모리 대역폭 ÷ 모델 크기다.

확인 퀴즈

머신러닝이 전통적인 프로그래밍과 가장 다른 점은?

머신러닝은 데이터와 정답으로부터 규칙에 해당하는 가중치를 찾아낸다. 계산 자체는 여전히 0과 1의 곱셈과 덧셈이다.

인공 뉴런 하나가 하는 계산으로 맞는 것은?

가중합 + 편향, 그리고 그 값으로 판단(활성화)하는 것이 뉴런의 전부다.

학습률을 지나치게 크게 잡으면?

걸음이 너무 크면 최솟값을 지나쳐 반대쪽 비탈로 튀고, 점점 더 멀어질 수 있다.

AI 학습과 추론에 GPU가 널리 쓰이는 가장 큰 이유는?

행렬 곱셈은 수많은 곱셈을 동시에 할 수 있는 대표적인 병렬 작업이다. 12장에서 본 GPU의 강점과 딱 맞는다.

70B(700억) 매개변수 모델을 16비트로 저장하면 필요한 메모리는 대략?

700억 × 2바이트 = 1400억 바이트 ≈ 140 GB. 24 GB GPU 한 장에는 들어가지 않는다. 4비트로 줄이면 약 35 GB가 된다.