← 문제 목록/SwiGLU (LLaMA FFN)
문제 해설

SwiGLU (LLaMA FFN)

신경망 · easy

preview

SwiGLU (LLaMA FFN 활성)

96번 GELU 는 "x × 확률" 형태의 활성. SwiGLU (Shazeer 2020) 는 한 걸음 더 — 두 개의 선형 프로젝션 중 하나를 gate 로 써서 다른 하나를 곱합니다:

SwiGLU(x)=SiLU(xWgate)(xWup)\text{SwiGLU}(x) = \text{SiLU}(x W_\text{gate}) \odot (x W_\text{up})

  • SiLU(z)=zσ(z)\text{SiLU}(z) = z \cdot \sigma(z) (= Swish).
  • 두 결과를 원소별 곱 (elementwise product) → 게이트 역할.

LLaMA, PaLM 의 FFN 이 정확히 이 구조 (이후 WdownW_\text{down} projection 으로 마무리 — 이 문제는 up+gate 까지).

ReLU/GELU vs SwiGLU

ReLUGELUSwiGLU
연산xx 또는 0xΦ(x)x \Phi(x)gate · up
파라미터Wup,WdownW_\text{up}, W_\text{down}동일추가 WgateW_\text{gate}
LLM 성능baseline+소폭최고 (현재 표준)

추가 파라미터가 들지만 같은 total FFN 크기에선 성능 향상이 안정적. LLaMA 는 FFN 중간 크기를 2/3 로 줄여 전체 파라미터 수 맞춤.

과제

함수 gelu-v2(x, W_gate, W_up) 를 완성하세요.

  • x shape (N, D_in), W_gate, W_up shape (D_in, D_out).
  • 반환: shape (N, D_out).
  • 힌트:
    g = x @ W_gate
    silu = g * (1 / (1 + np.exp(-g)))  # SiLU
    u = x @ W_up
    return silu * u
    

테스트 케이스

#이름검증
1shape (N, D_out)
2SiLU(0) = 0 → W_gate=0 → 출력 0
3W_up=0 → 출력 0
4같은 input 두 번 넣어도 동일determinism
5손계산toy
코드 작성
Loading...
실행 결과

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