[논문 리뷰] Bahdanau Attention: 정렬과 번역을 동시에 학습하는 신경망 기계 번역

2026. 2. 9. 20:36·1. AI 논문 + 모델 분석/AI 논문 분석

신경망 기계 번역(NMT)은 단일 신경망을 통해 번역 성능을 극대화하는 혁신적인 접근 방식입니다. 오늘 정리할 논문은 기존 NMT 모델이 가졌던 치명적인 약점인 '고정 길이 벡터의 병목 현상'을 해결하며 어텐션(Attention) 메커니즘의 시대를 연 연구입니다.


1. 기존 NMT의 문제점: 고정 길이 벡터의 병목 현상

기존의 Encoder-Decoder 모델(예: Cho et al., 2014)은 다음과 같은 구조적 한계를 가지고 있었습니다.

  • 정보 압축의 부담: 인코더는 입력 문장의 모든 정보를 단 하나의 고정 길이 컨텍스트 벡터(Fixed-length Context Vector)에 압축해야 합니다.
  • 긴 문장에서의 성능 저하: 문장이 길어질수록 모든 정보를 작은 벡터 안에 담기 어려워지며, 이로 인해 번역 품질이 급격히 떨어지는 현상이 발생했습니다.
  • 병목 현상(Bottleneck): 아무리 복잡한 문장이라도 동일한 크기의 공간에 밀어 넣어야 한다는 점이 전체 시스템 성능 향상의 걸림돌이 되었습니다.

2. Align and Translate (정렬과 번역의 결합)

본 논문은 이러한 한계를 극복하기 위해 "디코더가 단어를 생성할 때마다 입력 문장의 관련 부분을 스스로 탐색하게 하자"는 가설을 세웠습니다.

  • Soft-Alignment: 특정 시점의 단어를 번역할 때, 소스 문장의 어떤 단어들이 중요한지 가중치를 할당하여 찾아냅니다.
  • 어노테이션(Annotations): 전체 문장을 하나의 벡터로 압축하지 않고, 입력 문장의 각 단어 주변 정보를 포함하는 벡터 시퀀스로 인코딩합니다.
  • 적응적 선택: 번역 과정에서 이 벡터 시퀀스 중 필요한 부분만 적응적으로 선택하여 컨텍스트 벡터를 생성합니다.

3. 방법론 (Core Methodology)

이 모델(RNNsearch)은 인코더(BiRNN)와 디코더(Attention 기반 RNN)로 구성됩니다.

3-1 디코더: 어텐션 메커니즘 (Attention Mechanism)

디코더는 각 단계 $i$에서 다음 목표 단어 $y_i$를 예측할 때, 고정된 벡터가 아닌 매번 변화하는 컨텍스트 벡터 $c_i$를 사용합니다.

$$p(y_i|y_1, \dots, y_{i-1}, x) = g(y_{i-1}, s_i, c_i)$$

여기서 핵심인 $c_i$는 다음과 같이 계산됩니다.

  • 컨텍스트 벡터 계산: 인코더의 은닉 상태(어노테이션) $h_j$들의 가중합입니다.
  • $$c_i = \sum_{j=1}^{T_x} \alpha_{ij} h_j$$
  • 어텐션 가중치 ($\alpha_{ij}$): 정렬 모델(Alignment Model) $e_{ij}$를 소프트맥스 함수로 정규화한 값입니다.
  • $$\alpha_{ij} = \frac{\exp(e_{ij})}{\sum_{k=1}^{T_x} \exp(e_{ik})}$$
  • 정렬 모델 ($e_{ij}$): 이전 디코더 상태 $s_{i-1}$와 현재 인코더 어노테이션 $h_j$가 얼마나 관련 있는지 점수화하는 작은 피드포워드 신경망입니다.
  • $$e_{ij} = a(s_{i-1}, h_j) = v_a^T \tanh (W_a s_{i-1} + U_a h_j)$$

이 방식은 정렬(Alignment)을 직접 계산 가능한 변수로 만들어, 전체 모델이 역전파(Backpropagation)를 통해 동시에 학습될 수 있게 합니다.

3-2 인코더: 양방향 RNN (Bidirectional RNN)

단순한 순방향 RNN은 나중에 들어온 정보에 편향될 수 있습니다. 이를 해결하기 위해 **양방향 RNN(BiRNN)**을 사용합니다.

  • 순방향 RNN ($\vec{f}$): $x_1$부터 $x_{T_x}$까지 읽어 $\vec{h}_j$ 생성
  • 역방향 RNN ($\overleftarrow{f}$): $x_{T_x}$부터 $x_1$까지 거꾸로 읽어 $\overleftarrow{h}_j$ 생성
  • 최종 어노테이션 ($h_j$): 두 상태를 연결(Concatenate)하여 $h_j = [\vec{h}_j^T; \overleftarrow{h}_j^T]^T$를 만듭니다. 이를 통해 $h_j$는 해당 단어 앞뒤의 모든 문맥 정보를 요약하게 됩니다.

3-3 Gated Hidden Unit (GRU-like unit)

모델은 장기 의존성(Long-term dependency) 학습에 유리한 게이트 유닛(Gated Hidden Unit)을 사용합니다.

  • 업데이트 게이트 ($z_i$): 이전 상태를 얼마나 유지할지 결정
  • 리셋 게이트 ($r_i$): 이전 상태를 얼마나 무시할지 결정
  • 출력: Maxout 유닛을 포함한 다층 신경망을 통해 최종 확률을 계산합니다.

4. 실험 설정 및 결과

실험 데이터 및 환경

  • 태스크: 영어-프랑스어 번역 (WMT '14 코퍼스)
  • 데이터 규모: 3.48억 개의 단어
  • 비교 모델:
    1. RNNencdec: 기존 고정 길이 벡터 방식 (Baseline)
    2. RNNsearch: 제안된 어텐션 기반 방식 (Proposed)
  • 기타: Adadelta 최적화, 그래디언트 클리핑, 빔 서치 적용

주요 결과

  1. 정량적 성과: RNNsearch 모델은 모든 문장 길이에서 기존 RNNencdec 모델을 압도했습니다. 특히, 추가적인 단일 언어 코퍼스를 사용하지 않고도 기존 통계 기반 시스템(Moses)에 필적하는 성능을 보여주었습니다.
  2. 문장 길이에 대한 강건함: RNNencdec는 문장이 길어질수록 성능이 급락했지만, RNNsearch-50은 50단어 이상의 긴 문장에서도 성능 저하 없이 안정적인 번역 품질을 유지했습니다.

5. 정성적 분석: 모델이 보고 있는 곳은 어디인가?

이 논문의 가장 흥미로운 점 중 하나는 모델이 어떤 단어에 집중하는지 시각화했다는 것입니다.

  • 언어적 타당성: 영어의 "European Economic Area"가 프랑스어의 "zone économique européenne"으로 번역될 때, 모델이 어순 차이를 극복하고 비단조적(non-monotonic)으로 정확히 정렬하는 것을 확인했습니다.
  • 유연한 번역: "the"를 프랑스어 "l’"로 번역할 때, 바로 뒤의 단어가 모음으로 시작하는지 확인하기 위해 다음 단어까지 살펴보는 "Soft-alignment"의 유연함이 돋보였습니다.

6. Bahdanau Attention 구현

6-1 Bahdanau Attention 핵심 수식 복습

코드 구현 전, 우리가 코드로 옮길 핵심 수식 3가지를 다시 확인합니다.

  1. Alignment Score ($e_{ij}$): $e_{ij} = v_a^\top \tanh(W_a s_{i-1} + U_a h_j)$
  2. Attention Weights ($\alpha_{ij}$): $\alpha_{ij} = \text{softmax}(e_{ij})$
  3. Context Vector ($c_i$): $c_i = \sum \alpha_{ij} h_j$

6-2 PyTorch 구현 코드 (Class)

이 모듈은 디코더의 현재 상태($s_{i-1}$)와 인코더의 전체 상태들($h$)을 입력받아 컨텍스트 벡터를 반환합니다.

import torch
import torch.nn as nn
import torch.nn.functional as F

class BahdanauAttention(nn.Module):
    def __init__(self, hidden_dim):
        super(BahdanauAttention, self).__init__()
        
        # W_a: 디코더 상태(s_i-1)를 변환하는 가중치
        self.W = nn.Linear(hidden_dim, hidden_dim)
        # U_a: 인코더 상태(h_j)를 변환하는 가중치
        self.U = nn.Linear(hidden_dim, hidden_dim)
        # v_a: 최종 점수를 계산하기 위한 벡터
        self.v = nn.Parameter(torch.rand(hidden_dim))

    def forward(self, hidden, encoder_outputs):
        """
        hidden: 디코더의 이전 은닉 상태 [batch_size, hidden_dim]
        encoder_outputs: 인코더의 모든 은닉 상태 [seq_len, batch_size, hidden_dim]
        """
        seq_len = encoder_outputs.size(0)
        batch_size = encoder_outputs.size(1)

        # 1. 디코더 hidden 상태의 차원 맞추기 (시퀀스 길이만큼 반복)
        # [batch_size, hidden_dim] -> [seq_len, batch_size, hidden_dim]
        hidden_expanded = hidden.repeat(seq_len, 1, 1)

        # 2. Alignment Score 계산 (Additive Attention)
        # e_ij = v_a^T * tanh(W*s_{i-1} + U*h_j)
        # score shape: [seq_len, batch_size, hidden_dim]
        energy = torch.tanh(self.W(hidden_expanded) + self.U(encoder_outputs))
        
        # v_a와 내적하여 스칼라 점수 획득
        # score shape: [seq_len, batch_size]
        v = self.v.repeat(batch_size, 1).unsqueeze(2) # [batch_size, hidden_dim, 1]
        energy = energy.permute(1, 0, 2) # [batch_size, seq_len, hidden_dim]
        score = torch.bmm(energy, v).squeeze(2) # [batch_size, seq_len]

        # 3. Attention Weights 계산 (Softmax)
        # weights shape: [batch_size, seq_len]
        attention_weights = F.softmax(score, dim=1)

        # 4. Context Vector 계산 (가중합)
        # weights: [batch_size, 1, seq_len]
        # encoder_outputs: [batch_size, seq_len, hidden_dim]
        encoder_outputs = encoder_outputs.permute(1, 0, 2)
        context_vector = torch.bmm(attention_weights.unsqueeze(1), encoder_outputs)
        # context_vector shape: [batch_size, 1, hidden_dim]

        return context_vector, attention_weights

 

6-3 코드 상세 설명 (Step-by-Step)

① 가중치 선형 결합 (Linear Transformation)

논문의 수식 $W_a s_{i-1} + U_a h_j$ 부분을 처리합니다. 디코더의 은닉 상태와 인코더의 어노테이션을 각각 선형 변환한 뒤 더해줍니다. 이 방식이 '더하기(Additive)' 방식이라 불리는 이유입니다.

② Tanh 활성화 함수와 $v_a$ 내적

더해진 값에 비선형성($\tanh$)을 부여한 후, 학습 가능한 파라미터인 $v_a$와 곱하여 최종적인 에너지(Energy) 혹은 점수를 얻습니다. 이 점수는 "디코더의 현재 단계에서 인코더의 특정 단어가 얼마나 중요한가"를 나타냅니다.

③ 소프트맥스(Softmax)를 통한 확률화

계산된 점수들을 0~1 사이의 확률 값으로 변환합니다. 모든 입력 단어에 대한 가중치 합은 1이 됩니다.

④ 컨텍스트 벡터(Context Vector) 생성

인코더의 각 단어 벡터($h_j$)에 계산된 가중치($\alpha_{ij}$)를 곱해 모두 더합니다. 결과적으로 현재 시점에서 번역에 가장 필요한 정보만 '농축된' 하나의 벡터가 만들어집니다.


6-4 이 메커니즘이 중요한 이유

  1. 동적 정보 추출: 고정된 벡터를 쓰는 대신, 매 스텝마다 필요한 정보를 새롭게 정의합니다.
  2. 가중치 시각화: attention_weights를 출력해 보면 모델이 실제로 어떤 단어를 보고 번역했는지 히트맵(Heatmap)으로 그려볼 수 있습니다. 이는 딥러닝의 '블랙박스' 문제를 일부 해결해 줍니다.

7. 결론 및 향후 과제

본 논문은 NMT의 고질적인 문제였던 정보 압축의 한계를 '어텐션 메커니즘'으로 해결했습니다.

  • 의의: 전체 문장을 고정 길이 벡터에 쑤셔 넣을 필요가 없어져, 긴 문장 번역 능력이 비약적으로 향상되었습니다.
  • 영향: 이 연구는 이후 Luong Attention, 그리고 오늘날 AI 열풍의 핵심인 Transformer 구조의 근간이 되었습니다.
  • 향후 과제: 미지어(Unknown word)나 희귀어(Rare word) 처리에 대한 연구가 추가적으로 필요함을 시사했습니다.

이 논문은 단순히 번역 성능을 높인 것을 넘어, 인공지능이 정보를 처리할 때 "어디에 집중해야 하는가"라는 질문에 대한 답을 제시한 명작입니다. NMT를 공부하신다면 반드시 원문과 함께 이 메커니즘을 숙지하시길 권장합니다.

'1. AI 논문 + 모델 분석 > AI 논문 분석' 카테고리의 다른 글

[논문 리뷰] Multimodal Bottleneck Transformer (MBT)  (0) 2026.02.15
[논문 리뷰] CLIP: 텍스트로 이미지를 이해하는 비전 모델 (OpenAI)  (0) 2026.02.12
[논문 리뷰] DenseNet: Densely Connected Convolutional Networks  (0) 2026.01.28
[논문 분석]Using artificial intelligence to automate meat cut identification from the semimembranosus muscle on beef boning lines  (0) 2026.01.27
[논문 리뷰] Sequence to Sequence Learning with Neural Networks  (1) 2026.01.25
'1. AI 논문 + 모델 분석/AI 논문 분석' 카테고리의 다른 글
  • [논문 리뷰] Multimodal Bottleneck Transformer (MBT)
  • [논문 리뷰] CLIP: 텍스트로 이미지를 이해하는 비전 모델 (OpenAI)
  • [논문 리뷰] DenseNet: Densely Connected Convolutional Networks
  • [논문 분석]Using artificial intelligence to automate meat cut identification from the semimembranosus muscle on beef boning lines
고니3000원
고니3000원
공부 내용 정리, 자기발전 블로그 입니다. 기존 네이버 블로그에서 티스토리로 이전했습니다. https://blog.naver.com/pak1010pak
  • 고니3000원
    곤이의 공부 블로그
    고니3000원
  • 전체
    오늘
    어제
    • 분류 전체보기 (176)
      • 1. AI 논문 + 모델 분석 (19)
        • AI 논문 분석 (13)
        • AI 모델 분석 (6)
      • 2. 자료구조와 알고리즘 (16)
        • 2-1 자료구조와 알고리즘 (13)
        • 2-2 강화학습 알고리즘 (3)
      • 3. 자습 & 메모(실전, 실습, 프로젝트) (25)
        • 3-1 문제 해석 (4)
        • 3-2 메모(실전, 프로젝트) (14)
        • 3-3 배포 실전 공부 (7)
      • 4. [팀] 프로젝트 및 공모전 (14)
        • 4-1 팀 프로젝트(메모, 공부) (1)
        • 4-2 Meat-A-Eye (6)
        • 4-3 RL-Tycoon-Agent (3)
        • 4-4 구조물 안정성 물리 추론 AI 경진대회(D.. (4)
      • 5. [개인] 프로젝트 및 공모전 (0)
        • 4-1 귀멸의칼날디펜스(자바스크립트 활용) (5)
        • 4-2 바탕화면 AI 펫 프로그램 (4)
        • 4-3 개인 프로젝트(기타) (3)
      • 개념 정리 step1 (32)
        • Python 기초 (7)
        • DBMS (1)
        • HTML | CSS (3)
        • Git | GitHub (1)
        • JavaScript (5)
        • Node.js (5)
        • React (1)
        • 데이터 분석 (6)
        • Python Engineering (3)
      • 개념 정리 step2 (56)
        • Machine | Deep Learning (15)
        • 멀티모달(Multi-modal) (23)
        • 강화 학습 (10)
        • AI Agent (8)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 네이버 곤이의 블로그(Naver->Tistory)
    • Github
  • 공지사항

  • 인기 글

  • 태그

    github
    강화 학습
    EfficientNet
    Ai
    transformer
    파이썬
    구현
    자료구조
    Attention Is All You Need
    html
    Grad-CAM
    javascript
    공모전
    자바스크립트
    논문 리뷰
    프로젝트
    ViT
    파인튜닝
    OCR
    학습
    Vision
    귀칼
    pandas
    알고리즘
    Python
    데이터분석
    OCR학습
    강화학습
    paddleocr
    bottleneck
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고니3000원
[논문 리뷰] Bahdanau Attention: 정렬과 번역을 동시에 학습하는 신경망 기계 번역
상단으로

티스토리툴바