|

LLM 동작 원리 완전 정복 — 트랜스포머 전체 흐름을 5단계로 잡는 법

ChatGPT에 질문 하나를 던지고 답이 나오기까지 걸리는 시간은 길어야 몇 초다. 그 몇 초 사이에 벌어지는 일은 결코 단순하지 않다. 입력 문장은 토큰으로 쪼개지고, 숫자로 바뀌고, 수십 개의 층을 통과하며 맥락을 다듬고, 마지막에 단 하나의 단어로 응축된다. 그리고 그 단어가 다시 다음 입력이 되어 같은 과정을 반복한다.

LLM 동작 원리가 바로 이 흐름이다. 지난 편에서 어텐션과 QKV가 AI의 심장이라고 했다. 이번 마지막 편에서는 그 어텐션이 트랜스포머 전체 안에서 어떻게 흐르는지, LLM 동작 원리의 전 과정을 다룬다. 결론을 먼저 말하면, LLM은 입력을 숫자로 바꿔 어텐션으로 맥락을 만들고, 정교화와 정규화를 거쳐 다음 단어를 하나씩 생성하는 파이프라인이다.

LLM 동작 원리란 무엇인가

LLM 동작 원리란 입력 문장이 토큰으로 쪼개진 뒤 어텐션과 여러 처리를 거쳐 다음 단어를 생성하기까지의 전체 과정을 말한다. 핵심 키워드는 트랜스포머의 출발점인 한 문장이다. 트랜스포머는 문장 전체를 한 번에 본다. 앞 편에서 다룬 RNN의 순차 처리와 달리, 모든 단어를 동시에 펼쳐 관계를 계산한다.

전체 흐름을 한눈에 정리하면 다음과 같다.

단계과정핵심
1토큰화 + 임베딩문장을 토큰으로 쪼개 숫자 벡터로
2포지셔널 인코딩순서 정보를 삽입
3트랜스포머 블록어텐션 → Add&Norm → FFN 반복
4아웃풋 프로젝션맥락을 단어 사전과 비교
5소프트맥스 + 디코딩확률로 다음 단어 선택, 반복

1단계와 2단계 — 토큰화부터 순서까지

먼저 입력 문장을 토큰으로 쪼갠다. 토큰은 단어와 다르다. “오버스티어링”은 “오버 + 스티어 + 링”처럼 더 작은 단위로 나뉜다. 이렇게 쪼개면 사전에 없는 새 단어도 조각의 조합으로 처리할 수 있다. 각 토큰에 ID를 붙이고, 앞 편에서 다룬 임베딩으로 숫자 벡터로 바꾼다.

그다음이 포지셔널 인코딩이다. 순서 정보를 벡터에 새겨 넣는 작업이다. 왜 필요할까. “앞차가 뒷차를 추월했다”와 “뒷차가 앞차를 추월했다”는 같은 단어로 이루어졌지만 의미가 정반대다. 순서를 넣지 않으면 AI가 이 둘을 구분하지 못한다. F1 머신이 같은 코너라도 진입 순서와 출구 순서를 구분해야 라인을 제대로 그리는 것과 같다.

이 시나리오는 개념 설명을 위한 가상의 상황입니다. 실제 F1 팀의 전략과 다를 수 있습니다.

3단계 — 트랜스포머 블록의 내부

트랜스포머 블록은 LLM 동작 원리의 심장부다. 이 블록 안에서 네 가지 처리가 순서대로, 그리고 여러 번 반복된다. 어텐션, Add & Norm, FFN, 다시 Add & Norm이다.

어텐션은 지난 편에서 다룬 QKV로 컨텍스트 벡터, 즉 맥락을 만드는 단계다. 그다음 FFN(피드포워드 네트워크)은 그 맥락을 더 정교화하고 강화한다. 차원을 4배로 확장해 더 많은 질문을 던져 정보를 풍부하게 만든 뒤, 활성화 함수로 비선형성을 더하고, 다시 원래 차원으로 축소한다.

여기서 활성화 함수가 중요하다. 곱셈과 덧셈 같은 선형 연산만으로는 복잡한 패턴을 표현하지 못한다. 앞 시리즈의 XOR 문제가 그 예다. 활성화 함수는 데이터에 비선형성을 더해 표현력을 풍부하게 만든다. ReLU(음수는 0으로), Sigmoid(0과 1 사이로 압축), GELU(LLM이 주로 사용) 같은 함수들이 있다.

처리역할
어텐션QKV로 맥락(컨텍스트 벡터) 생성
FFN차원 확장·활성화·축소로 맥락 정교화
Add(잔차연결)원본 정보를 더해 손실 방지
Norm(정규화)분포를 고르게 맞춰 학습 안정화

Add는 잔차연결(Residual Connection)이다. 변환을 거치며 앞 정보가 소실되는 것을 막기 위해 원본 입력을 계속 더해준다. 레이어가 50층 이상 깊어져도 핵심 의미가 보존된다. Norm은 레이어 정규화로, 값을 평균 0 분산 1로 맞춰 학습을 안정화한다. 한 값이 너무 커서 나머지를 다 죽이는 것을 막는 장치다. 이 두 가지는 데이터를 안정적으로 다루기 위한 보조 기법이다.

4단계와 5단계 — 단어를 고르고 반복하다

트랜스포머 블록을 여러 번 통과해 맥락이 완성되면, 아웃풋 프로젝션 단계로 넘어간다. 이 맥락을 5만 개에 이르는 단어 사전 전체와 비교해, 다음에 올 단어로 가장 적절한 후보들의 점수를 매긴다. 이 점수를 로짓(logit)이라 한다.

그다음 소프트맥스(Softmax)가 등장한다. 소프트맥스는 여러 점수를 합이 1인 확률 분포로 바꾸는 계산이다. 큰 값은 더 크게, 작은 값은 더 작게 강조한다. 여기서 스케일링도 중요하다. 차원이 크면 내적값이 폭발적으로 커져, 소프트맥스가 한 곳에 100퍼센트 몰리며 나머지 정보가 다 죽는다. 그래서 차원의 제곱근으로 나눠 분포를 완만하게 유지한다.

확률이 정해지면 디코딩 전략으로 다음 단어를 고른다. 항상 최고 확률만 고르면(그리디) 안정적이지만 단조롭다. 그래서 상위 후보 중 무작위로 고르는 방식(Top-K, Top-P)을 섞는다. 여기에 템퍼러처(Temperature)라는 손잡이가 창의성을 조절한다. 낮으면 정확하고 안정적, 높으면 창의적이지만 불안정하다. 이렇게 고른 단어를 다시 입력으로 넣어 다음 단어를 생성하고, 문장 끝(EOS)까지 반복한다. 이를 오토리그레시브 생성이라 한다. F1 머신이 한 랩의 데이터를 다음 랩에 이어 쓰는 것과 같다.

LLM 동작 원리에서 생성된 단어가 다시 입력되는 순환 구조 삽화

학습과 추론은 어떻게 다른가

마지막으로 학습(Training)과 추론(Inference)의 차이를 정리하면 LLM 동작 원리의 전체 그림이 완성된다.

항목학습추론
레이블사용미사용
오차(Loss) 계산안 함
역전파함(가중치 업데이트)안 함
처리 방식문장 통째로 병렬토큰 하나씩 순차

학습은 정답 레이블과 비교해 오차를 계산하고, 역전파(Backpropagation)로 가중치를 업데이트한다. 이때 연쇄법칙(Chain Rule)으로 각 레이어의 기울기를 따로따로 갱신한다. 오차가 작으면 보상, 크면 페널티를 주는 크로스 엔트로피 손실을 쓴다. 반면 추론은 이미 학습된 가중치를 불러와 계산만 한다. 레이블도, 오차 계산도, 역전파도 없다. 우리가 ChatGPT에 질문할 때 일어나는 일이 바로 이 추론이다.

결국 LLM 동작 원리의 본질은 이것이다. 거대한 텐서의 내적을 단순 무식하게, 그러나 엄청난 규모로 반복하는 것. 그런데 그 단순한 반복이 사람의 맥락을 처리해낸다는 점, 그것이 AI의 신기함이자 핵심이다.

핵심 요약

이번 편의 핵심은 세 가지다. 첫째, LLM 동작 원리는 토큰화·임베딩, 포지셔널 인코딩, 트랜스포머 블록, 아웃풋 프로젝션, 소프트맥스·디코딩의 5단계 파이프라인이다. 둘째, 트랜스포머 블록은 어텐션으로 맥락을 만들고 FFN으로 정교화하며, Add와 Norm으로 정보를 보존하고 안정화한다. 셋째, 학습은 역전파로 가중치를 업데이트하지만 추론은 학습된 가중치로 계산만 한다.

이것으로 AI 엔진룸을 여는 시리즈를 마친다. AI 밑바닥의 정체는 결국 벡터의 내적과 어텐션이었다. 화려한 활용 이면의 원리를 알면, 같은 도구로도 전혀 다른 결과를 만들 수 있다. F1 머신의 원리를 아는 드라이버가 더 빠른 것처럼.

함께 읽으면 좋은 글

AI가 가끔 엉뚱한 답을 하는 이유와 그 대응이 궁금하다면 이 글이 좋은 마무리 연결점이다.

AI 시대에 인간의 역할이 왜 더 중요해지는지 궁금하다면 함께 읽어볼 만하다.

트랜스포머 전체 구조를 더 알아보고 싶다면 위키백과 거대 언어 모델 문서에서 살펴볼 수 있다.

FAQ

다르다. 토큰은 단어보다 작은 단위일 수 있다. 예를 들어 “오버스티어링”은 “오버 + 스티어 + 링” 세 토큰으로 쪼개진다. 이렇게 쪼개면 사전에 없는 새 단어도 조각의 조합으로 처리할 수 있어, 어휘 부족 문제를 해결한다. 한 단어가 보통 서너 토큰이 되기도 한다.

여러 단어 후보의 점수를 합이 1인 확률 분포로 바꾸기 위해서다. 점수 그대로는 “이 단어가 60퍼센트, 저 단어가 30퍼센트” 같은 비교가 어렵다. 소프트맥스는 큰 값을 더 강조하면서도 전체 합을 1로 맞춰, 다음 단어를 확률적으로 고를 수 있게 만든다.

다르다. 학습할 때는 정답 레이블과 비교해 오차를 계산하고 역전파로 가중치를 업데이트한다. 반면 질문할 때(추론)는 이미 학습된 가중치를 불러와 계산만 한다. 오차 계산도 역전파도 없다. 그래서 질문 한 번으로는 모델이 더 똑똑해지지 않는다.

관련 글 보기