-
BERT: 진짜 양방향(Bi-directional) 언어 모델의 탄생AI 2026. 3. 10. 17:33
2018년 구글이 발표하며 자연어 처리(NLP)의 새 시대를 열었던 BERT(Bidirectional Encoder Representations from Transformers)에 대해 심층 분석해 보겠습니다
BERT vs GPT vs ELMo: 무엇이 다른가?
BERT를 이해하는 가장 빠른 방법은 이전 모델들과 비교해보는 것입니다.
비교 항목 GPT ELMo BERT 방향성 단방향 (Uni-directional) 양방향 (Bi-LSTM 결합) 완전 양방향 (Bi-directional) 구조 Transformer Decoder Bi-LSTM Transformer Encoder 특징 이전 단어로 다음 단어 예측 얕은 수준의 양방향성 문맥의 전체 정보를 동시에 참조 - GPT와의 차이: GPT는 다음 단어를 맞춰야 하므로 앞의 정보만 보는 '디코더'를 쓰지만, BERT는 문맥 전체를 파악하기 위해 '인코더'만 사용합니다.
- ELMo와의 차이: ELMo는 정방향/역방향 LSTM을 각각 학습해 나중에 합치지만, BERT는 모든 레이어에서 양방향 정보를 동시에 처리합니다.
GPT는 단방향 Attention을 사용하지만 BERT는 양방향 Attetion을 사용한다.
GPT는 트랜스포머에서 디코더(decoder)만 사용하고 BERT는 인코더(encoder)만 사용한다.
GPT는 문장을 생성할 수 있지만 BERT는 문장의 의미를 추출하는 데 강점을 가지고 있다

BERT의 핵심 임베딩 시스템 (3-Way Embedding)
BERT는 텍스트를 숫자로 바꿀 때 단순히 단어만 보지 않습니다. 문맥을 완벽히 이해하기 위해 세 가지 서로 다른 임베딩을 위치별로 합산(Summation)하는 독특한 방식을 사용합니다.
$$Embedding_{BERT} = Token + Segment + Position$$
Token Embedding(WordPiece)
- 특징: 자주 등장하는 단어는 그대로 두지만, 드문 단어는 '##' 접두사를 붙여 더 작은 단위로 쪼갭니다.
- 장점: Emissions라는 단어를 모를 때 Emit과 ##ssions로 분리하여 학습함으로써, 처음 보는 단어(OOV, Out-of-Vocabulary) 문제에 매우 강력합니다.
- Vocabulary: 보통 약 30,000개의 토큰으로 구성됩니다.
Segment Embedding (Sentence Level)
BERT는 NSP(다음 문장 예측) 학습을 위해 두 개의 문장 덩어리(Sentence Pair)를 동시에 입력받습니다.
- 역할: 모델에게 "여기서부터 여기까지가 첫 번째 문장(A)이고, 저기서부터는 두 번째 문장(B)이야"라고 알려주는 지도 역할을 합니다.
- 학습: 문장 A에 해당하는 토큰들에는 0(Sentence A) 임베딩을, 문장 B에는 1(Sentence B) 임베딩을 더해줍니다.
Position Embedding (Learned Position)
트랜스포머는 사인/코사인 함수를 이용한 고정된 식(Positional Encoding)을 썼지만, BERT는 위치 정보마저 학습시킵니다.
- 차이점: 위치 정보를 담은 벡터를 랜덤 초기화한 뒤, 학습 과정에서 문장의 순서 정보를 가장 잘 표현하는 최적의 값으로 스스로 업데이트합니다.
- 한계: 학습된 위치까지만 이해할 수 있기 때문에, BERT-Base 기준 보통 512 토큰이라는 최대 길이 제한(Max Sequence Length)이 생기는 원인이기도 합니다.
💡 핵심 특수 토큰(Special Tokens) 디테일
단순히 "이런 토큰이 있다"를 넘어, 각 토큰이 어텐션 메커니즘에서 어떻게 작동하는지가 중요합니다.
토큰 공식 명칭 역할 및 기술적 특징 [CLS] Classification 모든 입력의 첫 번째에 위치합니다. Transformer의 Self-Attention을 거치면 이 토큰의 벡터는 문장 전체의 문맥 정보를 응축하게 됩니다. 이 녀석의 출력값만 뽑아서 분류(Classification) 레이어에 태웁니다. [SEP] Separator 문장의 끝을 알립니다. 단순히 구분자 역할을 넘어, Self-Attention 연산 시 모델이 "여기까지가 한 문장이구나"라는 경계를 파악하는 기준점이 됩니다. [MASK] Masking Pre-training(MLM)에서만 사용됩니다. 모델이 주변 단어들을 보고 이 자리에 올 단어를 추론하게 만듭니다. (Fine-tuning 때는 사용하지 않는 것이 핵심!) [PAD] Padding 컴퓨터는 배치(Batch) 처리를 위해 모든 문장 길이를 똑같이 맞춰야 합니다. 남는 공간을 0으로 채우며, 연산 시 Attention Mask에 의해 완전히 무시됩니다. 🛠 기술적 포인트: 왜 "더하기(+)"인가요?
임베딩들을 옆으로 이어 붙이는(Concatenate) 것이 아니라 요소별 합(Element-wise Sum)을 하는 이유는 모델의 차원을 유지하면서도, 각 토큰의 의미(Token) + 소속(Segment) + 위치(Position) 정보를 하나의 벡터에 버무리기 위해서입니다.
실제 코드상에서도 embeddings = inputs_embeds + position_embeddings + token_type_embeddings와 같이 단순 합산 후 LayerNorm을 거쳐 데이터의 분포를 안정화합니다.
BERT를 강력하게 만드는 두 가지 학습 전략
BERT는 특정 문제(분류, 요약 등)를 풀기 전, 방대한 데이터를 통해 언어의 구조를 먼저 배웁니다. 이때 두 가지 숙제를 수행하며 스스로 학습합니다.
Masked LM (MLM): "빈칸 채우기"
일반적인 언어 모델(GPT 등)은 왼쪽에서 오른쪽으로 단어를 이어가며 다음 단어를 예측합니다. 하지만 BERT는 문장 중간에 구멍을 뚫고 앞뒤 문맥을 모두 살펴 그 구멍을 채우는 방식을 택했습니다. 즉, input sequence의 순서에 상관없이 전체 문장을 모두 볼 수 있게 되는 거죠.
- 학습 방식: 전체 단어 중 15%를 무작위로 선택해 문제를 냅니다.
- 80%는 [MASK]: 진짜 빈칸으로 만듭니다. (예: 나는 [MASK]에 갔다)
- 10%는 랜덤 단어: 엉뚱한 단어로 바꿉니다. (예: 나는 냉장고에 갔다) → 모델이 "어? 이건 문맥상 이상한데?"라고 의심하게 만듭니다.
- 10%는 원래 단어: 그대로 둡니다. (예: 나는 학교에 갔다) → "이건 맞는 단어네"라고 확신하게 만듭니다.
💡 왜 이렇게 복잡하게 섞나요? (Pre-train과 Fine-tuning의 연결고리)
실제 우리가 BERT를 실무에 투입하는 Fine-tuning 단계에서는 [MASK]라는 토큰이 전혀 등장하지 않습니다.
만약 사전 학습 때 100% [MASK]만 보고 학습한다면, 모델은 [MASK]가 없는 실전 문장을 만났을 때 당황할 수 있습니다.그래서 일부러 랜덤 단어나 원래 단어를 섞어줌으로써, 모델이 "모든 단어가 항상 정답은 아닐 수 있다"는 긴장감을 유지하며 문맥 전체를 꼼꼼히 살피도록 훈련시키는 것입니다.
Next Sentence Prediction (NSP): "이어지는 문장인지 맞추기"
단어 수준의 이해(MLM)를 넘어, 문장과 문장 사이의 관계를 이해하기 위한 숙제입니다.
한, task가 너무 쉬워지는 것을 방지하기 위해 max_num_tokens라는 것을 정의합니다.
1. 학습의 본질: "이어지는 문장인지 맞추기"
단어 수준의 이해(MLM)를 넘어, 문장과 문장 사이의 논리적 연결 고리를 학습하기 위한 과정입니다.
- IsNext (50%): 실제 뉴스나 위키피디아에서 가져온 연속된 두 문장.
- NotNext (50%): 전체 코퍼스에서 무작위로 가져온 전혀 상관없는 두 문장.
- 결과: 모델은 이 두 문장을 보고 이진 분류(Binary Classification)를 수행하며 문맥을 파악합니다.
2. 고난도 Task 설계: max_num_tokens의 마법
단순히 문장을 붙이면 모델이 숙제를 너무 쉽게 풀 수 있기 때문에, 변별력을 높이기 위한 제약 조건을 둡니다.
- 길이의 다양성 확보: 데이터의 90%는 max_num_tokens를 모델 최대 길이(max_sequence_length)와 같게 설정합니다.
- 나머지 10%는 일부러 짧게 랜덤으로 정하여, 짧은 문장에서도 성능이 떨어지지 않도록 훈련시킵니다.
3. 데이터 손질: 다이나믹 제거 (Dynamic Truncation) 알고리즘
두 문장의 토큰 총수가 정해진 max_num_tokens보다 클 경우, 아래의 우선순위와 확률에 따라 단어를 제거합니다.
- 대상 선정: 두 문장 중 단어 수가 더 많은 쪽을 선택합니다. (문장 간 밸런스 유지)
- 위치 선정: 선택된 문장의 맨 앞 또는 맨 뒤 중 하나를 50%의 확률로 결정하여 단어를 하나씩 제거합니다.
- 반복: 총 토큰 수가 기준치 이하가 될 때까지 이 과정을 반복합니다.
4. 학습의 최종 효과 (Engineering Impact)
- 논리적 흐름 파악: 문장 간의 관계를 깊이 있게 이해하여 질의응답(QA)이나 문장 요약 같은 고난도 태스크의 밑거름이 됩니다.
- 유연성(Flexibility): 문장의 길이를 임의로 조정하며 학습했기에, 실전에서 짧은 문장이 들어와도 성능이 유지됩니다.
- 견고함(Robustness): 단어를 랜덤하게 삭제하며 학습하는 과정을 통해, 문장에서 일부 단어가 누락되거나 없어져도 전체 문맥을 파악하는 데 큰 영향을 받지 않는 강인한 모델이 완성됩니다.
효과: 이 과정을 통해 모델은 문장 간의 논리적 흐름을 파악하게 됩니다. 이는 나중에 질의응답(QA)이나 문장 요약 같은 고난도 태스크를 수행할 때 엄청난 밑거름이 됩니다.
Fine-tuning (미세 조정)
BERT의 가장 큰 장점은 "모델 구조를 거의 바꾸지 않고도" 레이어 하나만 살짝 얹어서 온갖 문제를 다 풀 수 있다는 점입니다. 이를 위해 BERT는 Input Transformation(입력 변형) 기법을 사용합니다.
① 단일 문장 분류 (Single Sentence Classification)
- 태스크: 스팸 메일 분류, 뉴스 카테고리 분류, 감성 분석(긍정/부정)
- 작동 원리: 문장 맨 앞에 붙는 [CLS] 토큰의 출력 벡터(Hidden State)만 사용합니다. 이 벡터는 문장 전체의 의미를 응축하고 있으므로, 이 위에 간단한 Dense Layer(Linear Layer) 하나만 쌓아서 "스팸이다/아니다"를 판별합니다.
② 두 문장 관계 분류 (Sentence Pair Classification)
- 태스크: 두 문장의 의미가 유사한지(비교), 전제-모순 관계인지(NLI)
- 작동 원리: [CLS] 문장 A [SEP] 문장 B [SEP] 형태로 입력합니다. 마찬가지로 [CLS] 토큰을 활용해 두 문장 사이의 관계를 분류합니다. (사전 학습 때 배운 NSP 능력이 여기서 빛을 발합니다!)
③ 질의응답 (Question Answering, QA)
- 태스크: 지문이 주어지고 질문에 대한 답을 지문 내에서 찾기 (SQuAD 데이터셋 등)
- 작동 원리: [CLS] 질문 [SEP] 지문 [SEP] 형태로 입력합니다. 이번에는 [CLS]가 아니라 지문에 해당하는 토큰들의 출력 벡터를 사용합니다. 각 토큰이 정답의 **시작점(Start)**일 확률과 **끝점(End)**일 확률을 계산해 정답 구간을 찾아냅니다.
④ 문장 내 단어 태깅 (Single Sentence Tagging)
- 태스크: 개체명 인식(NER - 인물, 장소, 조직 찾기), 품사 태깅
- 작동 원리: 모든 토큰 각각의 출력 벡터를 사용합니다. 각 단어가 '사람'인지 '조직'인지 등을 개별적으로 분류합니다.

Activation Function(활성화 함수) : GELU
Feedforward Networks에서 BERT는 ReLU대신 GELU를 사용합니다. 음수 값은 0이 되어버리는 ReLU와는 달리 GELU는 음수에서도 완만한 곡선을 그리며 미분을 가능하게 합니다. GELU를 사용하면 성능이 더욱 좋아지기 때문에 BERT의 저자들은 GELU를 사용했다고 합니다.

퍼뮤테이션(Permutation) 언어 모델
임베딩 모델의 최근 흐름은 AR 모델과 AE 모델로 나눠집니다. 각각의 모델은 아래와 같이 정리할 수 있습니다.
- AR(AutoRegressive) 모델: 이전 문맥을 바탕으로 다음 단어를 예측한다.
- AE(AutoEncoding) 모델: 앞뒤 문맥을 모두 살펴 [MASK] 단어를 예측한다.

'AI' 카테고리의 다른 글
Switch Transformer (0) 2026.03.11 T5(Text-to-Text Transfer Transformer) (2) 2026.03.11 GPT(Generative Pre-Training Transformer) (0) 2026.03.10 NLP 데이터 증강 (1) 2026.03.06 [NLP 아키텍처 연대기] 통계에서 트랜스포머까지: 언어 이해의 여정 (1) 2026.03.02