← 문제 목록/BERT-style Input Embedding (token+segment+pos+LN) [medium]
문제 해설

BERT-style Input Embedding (token+segment+pos+LN) [medium]

신경망 · medium

preview

BERT-style Input Embedding [medium]

v1 은 토큰 + 위치 두 개. BERT (Devlin 2019) 는 세 가지 임베딩 + LayerNorm:

X=LN(Etok[idx]+Eseg[seg]+Epos[:L])X = \text{LN}(E_{\text{tok}}[\text{idx}] + E_{\text{seg}}[\text{seg}] + E_{\text{pos}}[:L])

세 개를 더하는 이유

  1. Token embedding: 단어 의미.
  2. Segment embedding: 문장 A / 문장 B 구별 ("NSP" 태스크에서 사용).
  3. Position embedding: 학습된(learned) 벡터 (sinusoidal 아님).

왜 LayerNorm 을 뒤에

세 벡터 덧셈 후 크기가 불안정 → LayerNorm 으로 feature dim 기준 정규화:

LN(x)=γxμσ2+ϵ+β\text{LN}(x) = \gamma \cdot \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta

여기서 μ,σ2\mu, \sigma^2 는 마지막 차원 기준.

과제

함수 bert_embedding(tok_emb, seg_emb, pos_emb, idx_tok, idx_seg, gamma, beta, eps=1e-5) 를 완성하세요.

  • tok_emb (V, d), seg_emb (S, d), pos_emb (max_L, d).
  • idx_tok (B, L), idx_seg (B, L), 정수.
  • gamma, beta: shape (d,).
  • 반환: (B, L, d).

테스트 케이스

#이름검증
1shape (B, L, d)
2LN 후 mean ≈ 0 (per position)
3LN 후 std ≈ 1 (per position, γ=1)
4γ=0 → 출력 = β
5segment 변경 → 출력 변경
6position 변경 → 출력 변경
7batch broadcasting: pos/gamma/beta 공유
코드 작성
Loading...
실행 결과

코드를 작성하고 Run 을 눌러보세요.