모두의 AI
머신러닝AI논문
로딩 중…

배우기

🏅내 업적

Ch.03

트랜스포머 계보: BERT는 이해, GPT는 생성

트랜스포머라는 위대한 발명품은 크게 두 갈래의 가문으로 발전했습니다. 문장 전체를 한 번에 꿰뚫어 보는 인코더 가문의 BERT(이해형 모델)와, 앞선 단어들을 바탕으로 다음 단어를 끊임없이 지어내는 디코더 가문의 GPT(생성형 모델)입니다. BERT가 '수능 국어 영역 빈칸 추론'의 달인이라면, GPT는 '끝말잇기와 소설 쓰기'의 천재입니다. 이 챕터에서는 두 모델이 어떤 방식으로 학습을 하고, 왜 실무에서 쓰임새가 완전히 다른지 초보자도 쉽게 이해할 수 있는 비유와 함께 정리합니다.
BERT는 문장 전체를 동시에 참고해 표현을 만들고, GPT는 지금까지의 토큰만 보고 다음 토큰을 이어 붙입니다.

개념 구조: 인코더형(이해) vs 디코더형(생성)

BERT 계열GPT 계열양방향 인코더 스택인과적 디코더 스택N층 반복분류 헤드Add & NormFeed ForwardAdd & Norm멀티헤드어텐션텍스트 + 위치 임베딩N층 반복다음 토큰예측태스크분류Add & NormFeed ForwardAdd & Norm마스크 멀티헤드어텐션텍스트 + 위치 임베딩잔차 연결
BERT 계열양방향 인코더 스택N층 반복분류 헤드Add & NormFeed ForwardAdd & Norm멀티헤드어텐션텍스트 + 위치 임베딩GPT 계열인과적 디코더 스택N층 반복다음 토큰예측태스크분류Add & NormFeed ForwardAdd & Norm마스크 멀티헤드어텐션텍스트 + 위치 임베딩잔차 연결

I love deep learning 토큰 관계

BERT

양방향: 각 토큰이 모든 토큰을 함께 참고

1234

왼쪽 미니 비주얼은 멀티헤드 어텐션의 핵심을 단순화해 보여줍니다. 여러 헤드가 서로 다른 관계를 병렬로 보고, 결과를 합쳐(Concat + Projection) 양방향 문맥 표현을 만듭니다.

GPT

인과적: 현재 토큰은 왼쪽(과거) 토큰만 참고

1234
미래 X

오른쪽은 마스크 멀티헤드 어텐션입니다. 구조는 멀티헤드와 같지만, 인과 마스크를 씌워 현재 위치가 미래 토큰을 보지 못하게 제한하고 자기회귀(next-token) 학습을 가능하게 합니다.

BERT 계열

학습 흐름: 토큰화 → 마스크/목표 설정 → 층 반복 → 헤드

① 인코더(BERT): 토큰들이 서로 양방향으로 참고

GPT 계열

미래 토큰 차단

② 디코더(GPT): 왼쪽 문맥만 보고 다음 칸 예측

모델 작동: 양방향 표현 vs 자기회귀 생성

③ 학습 목표: MLM(가려 맞추기) vs 다음 토큰 로그우도
④ 추론: 분류·임베딩 vs 프롬프트로 토큰 생성

BERT 계열

학습 흐름: 토큰화 → 마스크/목표 설정 → 층 반복 → 헤드

① 인코더(BERT): 토큰들이 서로 양방향으로 참고

GPT 계열

미래 토큰 차단

② 디코더(GPT): 왼쪽 문맥만 보고 다음 칸 예측

모델 작동: 양방향 표현 vs 자기회귀 생성

③ 학습 목표: MLM(가려 맞추기) vs 다음 토큰 로그우도
④ 추론: 분류·임베딩 vs 프롬프트로 토큰 생성

수식 쉽게 이해하기

ht(0)=xt+PE(t)h_t^{(0)} = x_t + PE(t)ht(0)​=xt​+PE(t)는 입력 토큰 표현의 시작입니다. xtx_txt​는 단어 의미, PE(t)PE(t)PE(t)는 위치 정보라서 모델은 처음부터 "무슨 단어인지"와 "어디에 있는지"를 함께 받습니다.
Attn(Q,K,V)=softmax(QKT/dk)V\mathrm{Attn}(Q,K,V)=\mathrm{softmax}(QK^T/\sqrt{d_k})VAttn(Q,K,V)=softmax(QKT/dk​​)V는 self-attention의 핵심 연산입니다. QKTQK^TQKT로 관련도를 계산하고 dk\sqrt{d_k}dk​​로 스케일을 안정화한 뒤, softmax 가중치로 VVV를 섞어 문맥 표현을 만듭니다.
LMLM=−∑t∈Mlog⁡p(wt∣X)\mathcal{L}_{\mathrm{MLM}}=-\sum_{t\in\mathcal{M}}\log p(w_t\mid X)LMLM​=−∑t∈M​logp(wt​∣X)는 BERT의 MLM 학습 목표입니다. 마스크 위치 집합 M\mathcal{M}M의 정답 토큰 wtw_twt​를 맞히도록 학습해, 주변 양방향 문맥을 활용하는 표현을 익힙니다.
LLM=−∑tlog⁡p(xt∣x<t)\mathcal{L}_{\mathrm{LM}}=-\sum_t \log p(x_t\mid x_{<t})LLM​=−∑t​logp(xt​∣x<t​)는 GPT의 다음 토큰 학습 목표입니다. 각 시점은 과거 토큰 x<tx_{<t}x<t​만 보고 예측하므로 자기회귀 생성이 가능해지고, 인과 마스크(j>ij>ij>i 차단)와 같은 규칙으로 미래 정보 누설을 막습니다.

트랜스포머 계보: BERT는 이해, GPT는 생성

1. BERT: 문장을 양방향으로 읽고 '이해'하는 인코더형
개념: BERT(Bidirectional Encoder Representations from Transformers)는 트랜스포머의 인코더(Encoder) 부분만 떼어내어 발전시킨 모델입니다. 핵심은 양방향(Bidirectional) 문맥 파악입니다. 왼쪽 단어와 오른쪽 단어를 동시에 참고하여 현재 단어가 문장에서 어떤 의미로 쓰였는지 가장 정확한 '표현 벡터'를 만들어냅니다.
직관적 이해: 환자를 진찰할 때 과거 병력(왼쪽)과 현재 검사 결과(오른쪽)를 동시에 펼쳐놓고 종합적으로 판단하는 명의와 같습니다. 전체적인 그림을 한 번에 보기 때문에 문맥을 파악하는 능력이 탁월합니다.
수학적 설명: BERT의 대표적인 학습 방법은 MLM(Masked Language Modeling)입니다. 문장 중간의 단어에 구멍(`[MASK]`)을 뚫어놓고, 주변 문맥을 이용해 정답 토큰(wtw_twt​)의 확률 분포 p(wt∣전체 문맥)p(w_t \mid \text{전체 문맥})p(wt​∣전체 문맥)를 맞추도록 훈련합니다.
실제 적용: "이 리뷰는 긍정인가요 부정인가요?", "이 문서에서 사람 이름과 날짜를 찾아주세요" 같은 텍스트 분류, 개체명 인식, 문서 검색 등에 압도적으로 많이 쓰입니다.
2. GPT: 다음 단어를 끊임없이 '생성'하는 디코더형
개념: GPT(Generative Pre-trained Transformer)는 트랜스포머의 디코더(Decoder) 부분을 발전시킨 모델입니다. 이 모델은 문장을 처음부터 끝까지 한 번에 보지 못하게 마스크(Mask)로 미래의 단어들을 가려놓고, 오직 과거의 단어들(1…t−11\ldots t-11…t−1)만 보고 다음 단어(ttt)를 예측하는 자기회귀(Autoregressive) 방식으로 작동합니다.
직관적 이해: 타자기로 소설을 쓰는 작가와 같습니다. 작가는 아직 쓰지 않은 다음 문장을 미리 볼 수 없습니다. 지금까지 써 내려간 글의 흐름을 바탕으로 가장 자연스러운 다음 단어를 상상해서 적어 나갑니다.
수학적 설명: 현재 위치보다 뒤에 있는 미래 토큰 정보가 섞이지 않도록, 어텐션 행렬에서 대각선 위쪽 영역을 −∞-\infty−∞로 덮어버리는 Causal Masking을 사용합니다. 학습은 이전 토큰들(x<tx_{<t}x<t​)이 주어졌을 때 다음 정답 토큰(xtx_txt​)이 나올 조건부 확률 −log⁡p(xt∣x<t)-\log p(x_t\mid x_{<t})−logp(xt​∣x<t​)을 극대화하는 방향으로 진행됩니다.
실제 적용: 챗봇의 답변 생성, 이메일 초안 작성, 코드 자동 완성 등 "무언가를 새로 만들어내는(생성)" 모든 작업에 특화되어 있습니다.
3. 학습 목표의 차이: 빈칸 채우기 vs 끝말잇기
개념: 모델의 뼈대가 다르니 훈련 방식도 다릅니다. BERT는 표현(Representation)을 깊게 이해하기 위해 빈칸을 뚫고 주변 힌트로 맞추는 훈련을 합니다. 반면 GPT는 오로지 생성(Generation) 능력을 키우기 위해 앞 단어만 보고 다음 단어를 이어 말하는 훈련에 집중합니다.
직관적 이해: BERT 훈련소는 "나는 어제 [MASK]에서 밥을 먹었다"라는 시험지를 주고 빈칸에 '식당'이 들어갈지 맞추게 합니다. GPT 훈련소는 "나는 어제 식당에서..."까지만 보여주고 그 뒤에 자연스럽게 이어질 단어들을 계속 지어내게 만듭니다.
핵심 수식 포인트:
- 입력 시작: ht(0)=xt+PE(t)h_t^{(0)} = x_t + PE(t)ht(0)​=xt​+PE(t)
- 문맥 혼합: Attn(Q,K,V)=softmax(QKT/dk)V\mathrm{Attn}(Q,K,V)=\mathrm{softmax}(QK^T/\sqrt{d_k})VAttn(Q,K,V)=softmax(QKT/dk​​)V
- BERT 목표: LMLM=−∑t∈Mlog⁡p(wt∣X)\mathcal{L}_{\mathrm{MLM}}=-\sum_{t\in\mathcal{M}}\log p(w_t\mid X)LMLM​=−∑t∈M​logp(wt​∣X)
- GPT 목표: LLM=−∑tlog⁡p(xt∣x<t)\mathcal{L}_{\mathrm{LM}}=-\sum_t \log p(x_t\mid x_{<t})LLM​=−∑t​logp(xt​∣x<t​)
4. 추론(Inference) 방식의 차이: 즉시 판독 vs 스트리밍 생성
개념: 서비스를 운영할 때 사용자 경험(UX)도 달라집니다. BERT는 문장이 통째로 들어오면 한 번의 연산으로 각 단어의 의미 벡터를 '짠' 하고 즉시 뽑아냅니다. 반면 GPT는 프롬프트(질문)를 받으면 한 단어를 만들고, 그 단어를 다시 입력으로 넣어 다음 단어를 만드는 과정을 반복하며 글자를 주르륵 뽑아냅니다.
직관적 이해: BERT는 스캐너처럼 문서 전체를 한 번에 훑고 결론(라벨)을 도출합니다. GPT는 실시간 번역가나 타자기가 한 글자씩 또박또박 말을 이어가는 것과 같습니다. 이 때문에 GPT 류는 출력 길이가 길어질수록 연산 시간이 늘어납니다.

왜 중요한지

적재적소: 모델의 '전공'을 알아야 실패하지 않는다
실무에서 흔히 하는 실수 중 하나가 "요즘 GPT가 유행이니까 무조건 이걸로 다 하자!"입니다. 하지만 고객 리뷰가 긍정인지 부정인지 분류만 하면 되는 간단한 업무에 거대하고 무거운 GPT를 쓰는 건 닭 잡는 데 소 잡는 칼을 쓰는 격입니다. 반대로 BERT에게 멋진 시를 지어달라고 하면 엉뚱한 결과를 냅니다. 모델의 계보를 이해해야 비용과 성능을 최적화하는 올바른 아키텍처를 설계할 수 있습니다.
마스킹 규칙이 모델의 안전성과 성격을 결정한다
미래를 보지 못하게 막는 GPT의 Causal Masking은 철저히 '생성의 규칙'을 지키기 위함입니다. 주식 가격을 예측하거나 금융 사기 로그를 분석할 때 "미래의 데이터를 미리 훔쳐보고 과거를 판단하는(Data Leakage)" 오류를 막으려면 이 시간 순서 제약이 매우 중요합니다. 반면, 이미 지나간 전체 기록을 토대로 원인을 분석할 때는 양방향을 모두 보는 BERT가 훨씬 유리합니다.
파이프라인의 입구가 다르다 (분류기 vs 프롬프트)
기존 모델을 우리 회사 데이터에 맞게 튜닝(Fine-tuning)하는 방식도 다릅니다. BERT는 모델 꼭대기에 작은 '분류기(Classifier)' 층을 하나 덧붙여서 학습을 마무리합니다. 하지만 GPT는 모델 구조를 건드리기보다, 모델이 말을 잘 알아듣도록 지시문을 예쁘게 포장하는 프롬프트 엔지니어링이나 대화 형식으로 튜닝하는 Instruction Tuning 방식을 주로 사용합니다.
환각(Hallucination) 억제를 위한 설계의 기준점
GPT 같은 생성형 모델은 모르는 것도 그럴싸하게 지어내는 '환각' 현상이라는 치명적인 단점이 있습니다. 그래서 최신 실무에서는 BERT 같은 이해형 모델로 사내 문서에서 정확한 근거를 검색(Retrieval)해 오고, 그 검색된 근거를 바탕으로 GPT가 안전하게 답변을 생성(Generation)하게 만드는 RAG(검색 증강 생성) 아키텍처를 결합하여 두 가문의 장점만을 취하고 있습니다.

어떻게 쓰이는지

실무 파이프라인 (BERT): 임베딩 뽑고 머리 붙이기
BERT는 텍스트를 숫자로 된 '임베딩 벡터'로 훌륭하게 압축해 줍니다. 예를 들어 스팸 메일 분류기를 만든다면, 메일 문장을 BERT에 넣고 튀어나온 전체 문장 대표 벡터(`[CLS]` 토큰)를 간단한 로지스틱 회귀나 선형 계층(Head)에 통과시켜 스팸 확률(0~1)을 계산합니다. 매우 빠르고 정확해서 백엔드 서버에서 대량의 데이터를 실시간으로 분류할 때 적합합니다.
실무 파이프라인 (GPT): 꼬리에 꼬리를 무는 생성 조절하기
GPT를 서비스에 올릴 때는 답변이 튀는 것을 막기 위한 '고삐'가 필요합니다. 실무 개발자들은 다음 단어를 선택할 때 얼마나 창의적으로 고를지 결정하는 온도(Temperature), 확률이 높은 상위 몇 개의 단어 안에서만 고르게 제한하는 Top-k / Top-p 같은 파라미터를 미세하게 조절합니다. 코딩 자동완성 AI라면 온도를 낮춰서 정확도를 높이고, 마케팅 문구 작성 AI라면 온도를 높여 창의성을 살립니다.
비용과 인프라(GPU) 계산의 차이
BERT 기반 모델은 보통 크기가 작아(수백MB~수GB) 저렴한 GPU 1대나 심지어 CPU에서도 잘 돌아갑니다. 하지만 GPT 기반의 거대 언어 모델(LLM)들은 수십~수백GB의 메모리를 요구하며, 특히 '출력하는 글자 수'에 비례해서 연산 비용과 응답 지연 시간(Latency)이 무자비하게 늘어납니다. 따라서 프로젝트 예산을 짤 때 이 차이를 반드시 고려해야 합니다.
디버깅 전략: 무엇이 문제인지 진단하기
AI 서비스가 이상한 결과를 낼 때 원인 분석도 갈립니다. 분류기(BERT)의 성능이 떨어진다면, 학습 데이터에 노이즈가 많거나 라벨링이 잘못되었는지, 혹은 모델의 표현력이 부족한지 의심해야 합니다. 반면 챗봇(GPT)이 엉뚱한 소리를 한다면, 프롬프트 지시가 불명확했는지, 모델이 환각을 일으켰는지, 아니면 참고할 배경 지식(Context)을 충분히 주지 않았는지를 먼저 파악해야 합니다.

요약

트랜스포머는 하나의 큰 흐름에서 인코더 가문의 BERT와 디코더 가문의 GPT로 나뉘어 왔고, 둘은 학습 목표와 추론 방식이 달라 실무에서 맡는 역할도 크게 갈립니다. BERT는 문장 전체를 양방향으로 읽으며 MLM 등으로 표현을 다지고, 분류·검색·개체명 인식처럼 이해와 판별이 중요한 자리에 자주 쓰입니다. GPT는 미래를 가린 채 앞 단어만 보고 다음 토큰을 이어 생성을 배우기 때문에 챗봇·초안·코드 완성처럼 새 텍스트를 만들어야 하는 작업과 잘 맞습니다. 마스킹 규칙은 생성의 공정성과 시간 순서를 지키는 데도 중요하고, 요즘은 검색으로 근거를 가져와 생성만 맡기는 RAG처럼 두 계열을 조합하는 설계도 흔합니다.

문제 풀이를 위한 설명

BERT·GPT 문제는 “인코더·양방향·MLM”과 “디코더·자기회귀·다음 토큰” 두 갈래로 묶어 대응시키면 빠릅니다. BERT는 문맥 임베딩·분류·검색에 가깝고, GPT는 p(xt∣x<t)p(x_t\mid x_{<t})p(xt​∣x<t​)로 텍스트를 이어 쓰는 생성에 가깝습니다. 추론 형태도 BERT는 고정 길이 벡터 활용, GPT는 토큰을 한 줄로 늘리는 스트리밍이 대표적입니다.
예시
"전형적인 BERT 계열 구조에 가장 가까운 것은?
① 인코더 블록만 쌓은 구조
② 디코더만
③ 합성곱만"
BERT는 인코더 기반 표현 학습이 핵심입니다. → 정답 1

"GPT의 핵심 학습 목표에 가장 가까운 것은?
① 이미지 분류
② 다음 토큰을 왼쪽 문맥만 보고 예측
③ 군집화"
자기회귀 언어모델링입니다. → 정답 2

"가산형 위치 인코딩은 보통 토큰 임베딩에 더해져서 모델 입력이 된다. 맞으면 1, 틀리면 0."
전형적인 add 방식입니다. → 정답 1

"토큰 수 10일 때 self-attention 점수 행렬 원소 수는?"
10×10=10010\times10=10010×10=100. → 정답 100
정의 예시 — "GPT 학습 시 미래 토큰을 보지 못하게 막는 장치는?
① 인과(미래) 마스크
② 배치 정규화만" → 인과 마스크. 정답 1

참/거짓 예시 — "BERT는 문장 전체를 양방향으로 읽는 데 유리하다." → 맞음. 정답 1

선택 예시 — "챗봇처럼 길게 답을 생성하는 데 더 가까운 계열은?
① GPT형 디코더
② BERT만" →
①. 정답 1

계산 예시 — "8×88\times88×8 어텐션 점수 행렬의 원소 수는?" → 646464. 정답 64