‹ Lecture 3 10 / 21

Feed-Forward Network

Attention이 다른 positions에서 정보를 가져왔다면, FFN은 각 position에 모인 features를 변환한다. 같은 network를 모든 token에 적용하지만 각 token의 값은 독립적으로 계산한다. 핵심은 단순히 dimension을 늘리는 것이 아니라 넓힌 feature 공간에서 비선형 계산을 하고, 필요한 update를 Residual Stream의 폭으로 돌려주는 것이다. SwiGLU는 이 FFN을 gated branches로 구성하는 한 방식이다.

  1. token x(dd)
  2. up projection
  3. activation / gated branches
  4. down projection
  5. update(dd)

Position-Wise Computation

Vanilla FFN은 f(XW1+b1)W2+b2f(XW_1+b_1)W_2+b_2이며 W1:d×4d,W2:4d×dW_1:d\times4d,\quad W_2:4d\times d다. 모든 token에 같은 weights를 적용하지만 다른 위치를 직접 읽지는 않는다.

주요 matrix weights는 Attention 4d24d^{2}, FFN 8d28d^{2}로 FFN 비중이 23\frac23이다. GPT-2 Small d=768d=768에서 Attention≈2.36M, FFN≈4.72M/block, 12 blocks의 FFN≈57M이다. Embedding 등을 제외한 block matrix 조건이다.

Why Expand and Return?

선형 변환만 연달아 적용하면 그 합성은 다시 하나의 선형 변환으로 표현할 수 있다. 사이의 activation이 있어야 더 복잡한 패턴에 반응하는 feature를 학습할 수 있다. Up projection은 많은 feature 조합을 만들 공간을 주고, 비선형 activation은 그 조합에 따라 반응을 달라지게 한다. Down projection은 그 반응을 원래 dd차원의 update로 모은다.

다시 dd로 줄이는 것은 정보량을 무조건 원상복구하자는 뜻이 아니다. FFN output을 기존 dd차원 state에 더하는 Residual addition의 shape를 맞추어야 한다. Position끼리 직접 섞는 연산은 없지만 입력에는 앞 Attention의 문맥이 이미 들어 있으므로, context-blind word lookup과 같지 않다.

교수님이 설명한 key-value memory 관점에서는 up projection과 activation이 입력에 맞는 패턴을 찾는 Key 쪽 역할, down projection이 그에 대응하는 정보를 내보내는 Value 쪽 역할로 해석된다. 이것은 FFN을 이해하는 해석 관점이며 실제 Attention dictionary와 동일한 연산이라는 뜻은 아니다. 일부 model editing 연구가 down projection을 조정하는 이유도 전달할 Value를 바꾼다는 직관과 연결된다.

SwiGLU

ReLU⁡(x)=max⁡(0,x)  GELU⁡(x)=xΦ(x)  SiLU⁡(x)=xσ(x)\operatorname{ReLU}(x)=\max(0,x)\;\operatorname{GELU}(x)=x\Phi(x)\;\operatorname{SiLU}(x)=x\sigma(x)는 scalar activation이다. SwiGLU⁡=[SiLU⁡(xWg)⊙(xWu)]Wd\operatorname{SwiGLU}=[\operatorname{SiLU}(xW_g)\odot(xW_u)]W_d는 gate/value branch와 output projection을 포함하는 transformation이다.

세 matrices의 3dm을 vanilla 8d28d^{2}와 맞추면 m≈8d3m\approx\frac{8d}{3}이다. Llama 2 7B의 d=4096d=4096, m=11008은 implementation에 맞춘 폭이다. 반드시 이 비율을 써야 한다는 보편 규칙은 아니다.

Following the Two Branches

SwiGLU에서는 같은 xx가 gate branch와 value branch로 갈라진다.

g=SiLU⁡(xWg),u=xWug=\operatorname{SiLU}(xW_g),\qquad u=xW_u y=(g⊙u)Wdy=(g\odot u)W_d

⊙\odot는 같은 coordinate끼리 곱하는 elementwise product다. Gate가 작게 반응하는 coordinate의 value 기여는 약해지고, 다르게 반응하는 features는 다른 비중으로 down projection에 들어간다. 여기서 SiLU의 출력 자체를 반드시 0과 1 사이인 probability라고 해석하지 않는다. SiLU는 xσ(x)x\sigma(x)이며 sigmoid 하나와 다르다.

ReLU는 음수를 0으로 보내고, GELU는 Φ(x)\Phi(x), SiLU는 σ(x)\sigma(x)를 이용해 부드럽게 반응을 바꾼다. 이것들은 scalar activation인 반면, SwiGLU는 세 learned matrices와 두 branches의 곱을 포함한 FFN transformation 전체다. Adaptation이나 quantization에서 이를 activation 이름으로만 생각하면 gate projection WgW_g도 다루어야 한다는 점을 놓칠 수 있다.

세 matrices를 같은 폭 mm으로 만들면 주요 weights는 3dm3dm이다. 기존 FFN의 8d28d^2와 같게 비교하려고 m≈8d/3m\approx8d/3을 선택하는 것이 parameter-matched setting이다. 이 비율은 공정한 비교를 위한 선택이지 SwiGLU가 성립하는 필수 조건은 아니다. d=4096d=4096일 때 약 10,923을 실제 구현에 맞추어 11,008로 정한 Llama 2 7B 예시도 이 구분으로 읽는다.

Attention과 FFN의 특징과 차이를 서술할 수 있어야 한다.

FFN⁡(X)=f(XW1+b1)W2+b2\operatorname{FFN}(X)=f(XW_1+b_1)W_2+b_2 W1:d×4d,W2:4d×dW_1:d\times4d,\quad W_2:4d\times d SwiGLU⁡(x)=[SiLU⁡(xWg)⊙(xWu)]Wd\operatorname{SwiGLU}(x)=\big[\operatorname{SiLU}(xW_g)\odot(xW_u)\big]W_d 3dm≈8d2  ⟹  m≈8d33dm\approx8d^2\implies m\approx\frac{8d}{3}

FFN의 weights는 위치마다 새로 만드는 것이 아니다. 동일한 network를 각 token에 독립 적용한다.

FFN이 독립적으로 계산해도 입력 hidden state에는 이미 Attention의 문맥 정보가 들어 있다.

SwiGLU는 SiLU 하나가 아니라 gated FFN transformation이다.

Attention · FFN

교수님이 안내한 첫 서술형 준비 방향: 두 sublayer의 차이를 Residual Stream과 연결한다.

AspectAttentionFFN
정보 접근Allowed positions 간 혼합각 position 독립 계산
주요 연산QK⊤QK^\top → scale/mask → Softmax → AVUp → activation/gate → down
OutputValue의 weighted mixtureToken features의 비선형 변환
Vanilla matrix weightsQQ/KK/VV/O: 4d24d^{2}dd→4d→dd: 8d28d^{2}
Vanilla forward8nd28nd^{2} projections + 4n2d4n^{2}d16nd216nd^{2}
Residual 역할위치 간 통신 update를 더함위치별 계산 update를 더함
확장 개념MHA / GQA / MLASwiGLU / MoE

FFN 입력은 이미 Attention의 문맥을 포함할 수 있다. 위 상수는 dense vanilla / FFN4d / multiply-add2 FLOPs 가정이다.

Check

Attention과 FFN을 정보 접근 범위·계산·shape·parameter 비중으로 비교하라.

Answer

Attention은 allowed positions의 Value를 혼합한다. FFN은 각 위치에 같은 비선형 network를 독립적으로 적용한다. Vanilla FFN은 dd→4d→dd이며 block matrix weights에서 8d28d^{2}로 Attention의 4d24d^{2}보다 많다. 둘 다 dd폭 update를 Residual Stream에 더한다.

SiLU와 SwiGLU를 같은 activation function이라고 부르면 어떤 구조를 놓치는가?

Answer

SiLU는 scalar xσ(x)다. SwiGLU는 SiLU gate branch와 별도 up branch를 elementwise 곱한 뒤 down projection하는 gated FFN 구조다.

FFN을 key-value memory로 보는 교수님 예시에서 model editing은 어느 projection과 연결됐는가?

Answer

첫 projection/activation을 pattern-key, down projection을 전달할 value로 보는 해석에서 down projection 편집을 예시로 들었다. 모든 FFN의 고정된 역할이라고 단정하지 않는다.

FFN이 token별로 계산된다면 어떻게 context에 따라 다른 update를 만들 수 있는가?

Answer

FFN에 들어오는 state가 이미 Attention을 통해 context를 포함할 수 있기 때문이다. Position마다 같은 weights를 사용해도 입력 state가 다르면 비선형 변환 결과도 달라진다. 직접 다른 positions를 읽는 연산과, context를 담은 현재 state를 계산하는 연산은 다르다.

SwiGLU의 두 branch와 output projection을 순서대로 설명하라.

Answer

xW_g에 SiLU를 적용한 gate와 xW_u의 value branch → elementwise product → WdW_{d} down projection. Scalar SiLU와 전체 transformation을 구분한다.

SiLU · SwiGLU · MoE를 축별로 비교하고 그 차이가 필요한 이유를 설명하세요.

Answer

Scalar function, gated FFN, 여러 FFN의 routing을 서로 다른 층위로 읽는다.

구조: SiLU=Scalar xσ(x) / SwiGLU=두 input branches + down projection / MoE=Router + 선택된 expert FFNs

핵심 연산: SiLU=원소별 activation / SwiGLU=SiLU(xW_g) ⊙ (xW_u) / MoE=Top-kk expert weighted sum

연결: SiLU=Gate branch에 사용 가능 / SwiGLU=Dense expert의 FFN 형태 가능 / MoE=Token마다 다른 experts 선택

비용 관점: SiLU=단일 함수 / SwiGLU=3dm matrix weights / MoE=Total vs active parameters 구분

Contents