๋…ผ๋ฌธ ๋งํฌ

๊ฐ•์ ๊ณผ ๋…์ฐฝ์„ฑ, ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ๊ทธ๋ฆฌ๊ณ  ํ•œ๊ณ„

๋ฌผ์–ด๋ณธ ๊ฒƒ: ์ด ๋…ผ๋ฌธ์„ ์•„์ฃผ ์ž์„ธํ•˜๊ฒŒ ์ฝ๊ณ  ๋…ผ๋ฌธ์˜ ๊ฐ•์ ๊ณผ ๋…์ฐฝ์ ์ธ ์ง€์ ์„ ์„ค๋ช…ํ•ด์ฃผ๊ณ  ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์˜ˆ์‹œ ์ž…๋ ฅ์„ ๋“ค์–ด์„œ ์ „์ฒด์ ์ธ ๊ณผ์ •์„ ์„ค๋ช…ํ•ด์ค˜ ์ถ”๊ฐ€์ ์œผ๋กœ ๋…ผ๋ฌธ์˜ ํ•œ๊ณ„์ ์— ๋Œ€ํ•ด์„œ๋„ ์•Œ๋ ค์ค˜

๐Ÿ“Œ ๊ฒฐ๋ก  ์š”์•ฝ

๋…ผ๋ฌธ “MELODI: Exploring Memory Compression for Long Contexts"๋Š” Transformer์˜ ๊ธด ๋ฌธ๋งฅ ์ฒ˜๋ฆฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ณ„์ธต์  ๋ฉ”๋ชจ๋ฆฌ ์••์ถ•(hierarchical memory compression) ๊ตฌ์กฐ๋ฅผ ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ํ•ต์‹ฌ์€ ๋‹ค์ธต ๋ฐ˜๋ณต ์••์ถ• ๊ธฐ๋ฐ˜์˜ ๋‹จ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ(SM)์™€ ๋‹จ์ผ์ธต ์ถ”๊ฐ€ ์••์ถ• ๊ธฐ๋ฐ˜์˜ ์žฅ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ(LM)๋ฅผ ์กฐํ•ฉํ•œ โ€œ์ƒŒ๋“œ์œ„์น˜ ๊ตฌ์กฐโ€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ธด ๋ฌธ์„œ๋ฅผ ์งง์€ ์œˆ๋„์šฐ(์˜ˆ: 512 tokens)๋กœ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์€ ๊ธฐ์กด Dense Memory ๋ฐฉ์‹์ธ Memorizing Transformer๋ณด๋‹ค ์ตœ๋Œ€ 8๋ฐฐ ์ ˆ๊ฐํ•˜๋ฉด์„œ๋„ ์„ฑ๋Šฅ(PPL ๊ธฐ์ค€)์€ ์˜คํžˆ๋ ค ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ” MELODI์˜ ๊ตฌ์กฐ ์š”์•ฝ

๊ตฌ์„ฑ ์š”์†ŒํŠน์ง•
Short-Term Memory- ์œˆ๋„์šฐ ๋‹จ์œ„๋กœ Recurrentํ•˜๊ฒŒ ์ •๋ณด๋ฅผ ์••์ถ•
- Layer๋ฅผ ๋”ฐ๋ผ ์ •๋ณด๋ฅผ ์ „๋‹ฌ (vertical)
Long-Term Memory- Layer ์ค‘๊ฐ„ ์ง€์ ์—์„œ ์ถ”๊ฐ€ ์••์ถ•ํ•˜์—ฌ ์ €์žฅ
- ์‹œ๊ฐ„ ์ˆœ์„œ ๋”ฐ๋ผ ์ •๋ณด๋ฅผ ์ถ•์  (horizontal)
๊ตฌ์กฐ- [SM ร— M์ธต] + [LM ร— 1์ธต] + [SM ร— (Nโˆ’Mโˆ’1)์ธต] ์˜ ์ƒŒ๋“œ์œ„์น˜ ๊ตฌ์กฐ ์‚ฌ์šฉ

์˜ˆ์‹œ ์ž…๋ ฅ ํ๋ฆ„ (๋‹จ์ผ ์œˆ๋„์šฐ ๊ธฐ์ค€)

์ž…๋ ฅ: xโ‚– (k๋ฒˆ์งธ context window, ์˜ˆ: 512 tokens)

  1. SM Layer 1

    • zโ‚–โ‚‹โ‚ (์ด์ „ SM token)๊ณผ xโ‚–์— causal attention
    • Transformer block โ†’ xโ‚– โ†’ xโ‚–', summary token uโ‚–' ๊ณ„์‚ฐ
    • Linear Mixer: uโ‚– = Mโ†‘(xโ‚–', uโ‚–'), zโ‚– = Mโ†’(xโ‚–', uโ‚–')
  2. … SM Layer M ๋ฐ˜๋ณต โ†’ recurrent ์••์ถ• ์ง„ํ–‰

  3. LM Layer (์ค‘๊ฐ„ layer)

    • ์ง€๊ธˆ๊นŒ์ง€ ์ €์žฅ๋œ LM (mโ‚:โ‚–โ‚‹โ‚)์— cross-attention ์ˆ˜ํ–‰
    • self-attention๊ณผ cross-attention์€ gating ฮฑ๋กœ ํ•ฉ์„ฑ
    • LM token mโ‚– ์ƒ์„ฑ ํ›„ KV pair ํ˜•ํƒœ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— append
  4. ์ดํ›„ Layer N๊นŒ์ง€ ๋‹ค์‹œ SM ๋ฐ˜๋ณต ์ˆ˜ํ–‰ํ•˜์—ฌ ์ตœ์ข… ์ถœ๋ ฅ


๐Ÿง  ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜: ์˜ˆ์‹œ ๊ธฐ๋ฐ˜ ์„ค๋ช…

๊ฐ€์ •:

  • context window ๊ธธ์ด: 512 tokens
  • short-term memory: 128 tokens
  • long-term memory: 64 tokens, ์ตœ๋Œ€ 128 window ์ €์žฅ
TEXT
์ž…๋ ฅ ๋ฌธ์žฅ (k=3๋ฒˆ์งธ ์œˆ๋„์šฐ): "In the middle of the night, he found a strange box."

==> Layer 1์—์„œ:
  - ์ด์ „ zโ‚‚ (128 token)์™€ ํ˜„์žฌ context xโ‚ƒ์— attention
  - context xโ‚ƒ โ†’ xโ‚ƒโ€™ ๊ณ„์‚ฐ
  - summary token uโ‚ƒโ€™ ์ƒ์„ฑ
  - Linear Mixer Mโ†‘, Mโ†’๋ฅผ ๊ฑฐ์ณ:
      uโ‚ƒ = summary for ๋‹ค์Œ layer
      zโ‚ƒ = short-term memory token (โ†’ window 4 ์ž…๋ ฅ ์‹œ ์‚ฌ์šฉ)

==> ์ค‘๊ฐ„ LM Layer:
  - ํ˜„์žฌ xโ‚ƒโ€™, uโ‚ƒ์™€ mโ‚:โ‚‚ (์ด์ „๊นŒ์ง€์˜ LM KV pair)์— cross-attention
  - ์ƒˆ๋กœ์šด long-term token mโ‚ƒ ์ƒ์„ฑ ํ›„ long-term memory์— append

==> ์ดํ›„ layer์—์„œ๋„ zโ‚ƒ, uโ‚ƒ ์ •๋ณด ์ด์šฉํ•˜์—ฌ inference ์ด์–ด๊ฐ

๐Ÿ“ˆ ์„ฑ๋Šฅ ๋น„๊ต (Perplexity ๊ธฐ์ค€)

ModelPG19 (T5 vocab)arXiv (Meena)Memory Usage
Transformer-XL11.412.6013.6M
Block Recurrent Transf.10.982.2613.1M
Memorizing Transf.10.622.14147.8M
MELODI S128+L6410.442.1118.5M
MELODI S192+L9610.292.0927.8M

๐Ÿ‘‰ Dense attention ์—†์ด๋„ ์„ฑ๋Šฅ์€ ๋” ๋†’๊ณ , ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์€ ํš๊ธฐ์ ์œผ๋กœ ์ค„์ž„


๐Ÿงช Ablation์œผ๋กœ ๋ฐํ˜€์ง„ ์„ค๊ณ„์˜ ํšจ๊ณผ

  • SM๊ณผ LM์€ ์ƒํ˜ธ๋ณด์™„์ : ๋‘˜ ๋‹ค ํ‚ค์šฐ๋ฉด ์„ฑ๋Šฅ ์ƒ์Šน (Fig. 4)
  • Context window ์ž‘๊ฒŒ ์ค„์—ฌ๋„ ์„ฑ๋Šฅ ์œ ์ง€: LM์ด ์žฅ๊ธฐ ๋ฌธ๋งฅ์„ ๋ณด์กดํ•จ (Fig. 6)
  • Summary branching: cross-window + cross-layer ํ๋ฆ„ ๋„์ž… โ†’ ์„ฑ๋Šฅ ํ–ฅ์ƒ (+0.3 PPL)
  • LM ์œ„์น˜๋Š” 5~11์ธต ์–ด๋””๋“  ๋น„์Šทํ•˜๊ฒŒ ๋™์ž‘ โ†’ ์œ ์—ฐํ•œ ๊ตฌ์กฐ ์„ค๊ณ„ ๊ฐ€๋Šฅ

๐Ÿ” ๋…ผ๋ฌธ์˜ ๊ฐ•์ 

๊ฐ•์ ์„ค๋ช…
๋ฉ”๋ชจ๋ฆฌ ํšจ์œจDense KV ์ €์žฅ ๋Œ€์‹  ์••์ถ•๋œ token๋งŒ ์ €์žฅํ•ด ์ตœ๋Œ€ 8x ์ ˆ๊ฐ
๊ตฌ์กฐ ์ผ๋ฐ˜์„ฑ๊ธฐ์กด Transformer์— ๊ฑฐ์˜ ์†๋Œ€์ง€ ์•Š๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅ
์„ฑ๋Šฅ ์œ ์ง€๊ธฐ์กด state-of-the-art๋ณด๋‹ค ์ข‹์€ perplexity
๋‹จ๊ธฐ-์žฅ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ ๊ฒฐํ•ฉLSTM ์Šคํƒ€์ผ recurrent compression + ๋‹จ์ผ์ธต summary ์ €์žฅ
๋ชจ๋“ˆํ™”Token mixer, gating, memory branching ๋“ฑ์˜ ๊ตฌ์กฐ๊ฐ€ ๊น”๋”ํžˆ ๋ถ„๋ฆฌ๋˜์–ด ์žˆ์Œ

โŒ ํ•œ๊ณ„์ 

ํ•œ๊ณ„์„ค๋ช…
์‚ฌ์ „ํ•™์Šต ๋ชจ๋ธ ์ ์šฉ XMELODI๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•™์Šตํ•จ. ๊ธฐ์กด ์‚ฌ์ „ํ•™์Šต ๋ชจ๋ธ์— plug-in ํ•˜๋Š” ๋ฐฉ์‹์€ ์•„์ง ์—†์Œ
์ ์šฉ ๋ณต์žก๋„Short-term summary token flow, token mixer ๋“ฑ ๊ตฌํ˜„ ๋ณต์žก์„ฑ์ด ๋†’์Œ
Memory queue ๊ณ ์ •LM์€ FIFO ํ์— KV pair ์ €์žฅ โ†’ ํ•™์Šต ์™ธ ๊ธฐ์–ต ์œ ์ง€ ํ•„์š” ์‹œ ํ•œ๊ณ„ ์žˆ์Œ
์••์ถ• ์ •๋ณด ์†์‹ค ๊ฐ€๋Šฅ์„ฑ์ง€๋‚˜์น˜๊ฒŒ aggressiveํ•œ ์••์ถ•์€ ์ •๋ณด ์œ ์‹ค ์œ ๋ฐœ ๊ฐ€๋Šฅ (ablation์—์„œ ํ™•์ธ๋จ)

๐Ÿ“Œ ๊ฒฐ๋ก  ๋ฐ ํ™œ์šฉ ์ œ์•ˆ

MELODI๋Š” long-context language modeling์—์„œ ํšจ์œจ์„ฑ๊ณผ ์„ฑ๋Šฅ์˜ ๊ท ํ˜•์„ ๋งค์šฐ ์ž˜ ๋งž์ถ˜ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ:

  • ๋ฉ”๋ชจ๋ฆฌ ์ œํ•œ์ด ์žˆ๋Š” ๋””๋ฐ”์ด์Šค (e.g., ๋ชจ๋ฐ”์ผ inference, edge GPU)
  • ๊ธด ๋ฌธ์„œ๋ฅผ chunk ๋‹จ์œ„๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” task (e.g., RAG, summarization)
  • ์ปจํ…์ŠคํŠธ window ํ™•์žฅ์ด ์–ด๋ ค์šด ๋ชจ๋ธ ํŒŒ์ธํŠœ๋‹ ์‹œ, hierarchical memory ์ถ”๊ฐ€ ๊ตฌ์กฐ

๋“ฑ์— ๋งค์šฐ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

Q : gemma์™€ ๊ฐ™์€ ๋ชจ๋ธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” slice window attention๊ณผ ๋น„์Šทํ•œ ๊ฐœ๋…์ธ๊ฑฐ์•ผ? ์–ด๋–ค ์ฐจ์ด์ ์ด ์žˆ๋Š”์ง€ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ๋‹ˆ? ๊ทธ๋ฆฌ๊ณ  ์‹œ๊ฐ์ ์ธ ๋‹ค์ด์–ด๊ทธ๋žจ๋„ ๋ถ€ํƒํ•ด

MELODI๋Š” Gemma ๋“ฑ์—์„œ ์‚ฌ์šฉํ•˜๋Š” Slice Window Attention (SWA)๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์งง์€ context window๋งŒ์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ํ•ต์‹ฌ ์ฐจ์ด์ ์€ “์–ด๋–ป๊ฒŒ ๊ณผ๊ฑฐ ์ •๋ณด๋ฅผ ์••์ถ•ยท์ถ•์ ํ•˜๋А๋ƒ”์— ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ” MELODI vs Slice Window Attention: ๋น„๊ต

ํ•ญ๋ชฉMELODISlice Window Attention (์˜ˆ: Gemma)
ํ•ต์‹ฌ ๊ฐœ๋…๊ณ„์ธต์  ๋ฉ”๋ชจ๋ฆฌ ์••์ถ• (SM+LM)sliding ๋˜๋Š” sliced attention window
๋ฌธ๋งฅ ์—ฐ๊ฒฐ ๋ฐฉ์‹- ๋‹จ๊ธฐ: recurrent compression
- ์žฅ๊ธฐ: middle-layer์—์„œ ์••์ถ•๋œ KV ์ €์žฅ
- ์ตœ๊ทผ n๊ฐœ์˜ window๋งŒ sliding ์ฐธ์กฐ
์žฅ๊ธฐ ์ •๋ณด ์œ ์ง€โœ… long-term memory (128 window๊นŒ์ง€)โŒ ๊ธด ๊ฑฐ๋ฆฌ ์ •๋ณด๋Š” ์žŠํ˜€์ง
Attention ๋Œ€์ƒSM: ์ด์ „ memory (z)
LM: ์ €์žฅ๋œ KV pool (mโ‚:โ‚–โ‚‹โ‚)
ํ˜„์žฌ ๋ฐ ์ผ๋ถ€ ๊ณผ๊ฑฐ context tokens
๊ตฌ์กฐ ๋ณ€๊ฒฝ ์ •๋„transformer layer์— memory path ์‚ฝ์ž… (๋ฏธ์„ธ ๋ณ€๊ฒฝ)attention mask๋งŒ ์กฐ์ •ํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
์••์ถ• ์—ฌ๋ถ€โœ… context โ†’ summary token โ†’ KV pair๋กœ ์••์ถ•โŒ ์••์ถ• ์—†์Œ, token ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉ
๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰๋‚ฎ์Œ (์••์ถ•๋œ token๋งŒ ์ €์žฅ)์ค‘๊ฐ„ (token ์ง์ ‘ ์ €์žฅ)

ํ•ต์‹ฌ ์ฐจ์ด

  • SWA๋Š” “์ตœ๊ทผ ํ† ํฐ๋งŒ์„ ๊ธฐ์–ต"ํ•˜๋Š” ๋กœ์ปฌ context ์—ฐ๊ฒฐ ๋ฐฉ์‹
  • MELODI๋Š” “์ •๋ณด ์š”์•ฝ ๋ฐ ์ถ•์ "์„ ํ†ตํ•ด ์ „์—ญ context ์—ฐ๊ฒฐ ์œ ์ง€

์ฆ‰, SWA๋Š” locality ๊ธฐ๋ฐ˜, MELODI๋Š” hierarchical memory abstraction ๊ธฐ๋ฐ˜์ž…๋‹ˆ๋‹ค.


์•„๋ž˜๋Š” ์š”์ฒญํ•˜์‹  MELODI ๊ตฌ์กฐ์˜ ์‹œ๊ฐํ™”์ž…๋‹ˆ๋‹ค (์ƒŒ๋“œ์œ„์น˜ ๊ตฌ์กฐ, SM๊ณผ LM์˜ ํ๋ฆ„ ํฌํ•จ):

Figure 1: MELODI ๊ตฌ์กฐ ๊ฐœ์š”. ์ž…๋ ฅ ์œˆ๋„ x_k ๊ฐ€ ๋‹จ๊ธฐ ์ธต๊ณผ ์žฅ๊ธฐ ์ธต์„ ๋ฒˆ๊ฐˆ์•„ ๊ฑฐ์ณ z_k ๋กœ ๋‚˜์˜ค๊ณ , ์˜†์—์„œ ์žฅ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ m_1 ์„ ํ†ตํ•ด ํ•ฉ๋ฅ˜ํ•œ๋‹ค

๊ฑฐ์˜ ๋งž์Šต๋‹ˆ๋‹ค. ๊ฐœ๋…์„ ์ •๋ฆฌํ•˜์ž๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


โœ… ํ•ต์‹ฌ ์ฐจ์ด ์š”์•ฝ: SWA vs MELODI

ํ•ญ๋ชฉSlice Window Attention (SWA)MELODI
์ €์žฅ ๋‹จ์œ„๐Ÿ”น token-level (์›๋ž˜์˜ token sequence ์ผ๋ถ€)๐Ÿ”ธ compressed embedding-level (context window ์š”์•ฝ๋ณธ)
์ €์žฅ ๋Œ€์ƒ- ์ตœ๊ทผ window์˜ raw token์„ ์ง์ ‘ attention ๋Œ€์ƒ์— ํฌํ•จ (์˜ˆ: ์ตœ๊ทผ 2~4๊ฐœ window)- ๊ฐ window์—์„œ ์••์ถ•๋œ summary token ๋˜๋Š” KV embedding์„ ์ €์žฅ
์ •๋ณด ํ‘œํ˜„- ์ •๋ณด ์†์‹ค ์—†์ด ๊ทธ๋Œ€๋กœ ์ €์žฅ
- ํ•˜์ง€๋งŒ memory size โ†‘โ†‘
- ์ •๋ณด ์š”์•ฝ/์••์ถ• ํ›„ ์ €์žฅ
- memory size โ†“โ†“
Memory ๊ตฌ์กฐ- Sliding ๋ฐฉ์‹์˜ cache- FIFO queue ํ˜•ํƒœ์˜ long-term memory
Attention ๋ฐฉ์‹- ํ˜„์žฌ token์ด ์ง์ ‘ ์ด์ „ token๋“ค๊ณผ attention- ํ˜„์žฌ token์ด ์š”์•ฝ๋œ memory representation์— attention

์˜ˆ์‹œ๋กœ ์ดํ•ดํ•˜๊ธฐ

  • SWA:

    PLAINTEXT
    Windowโ‚– = [tโ‚–โ‚‹โ‚‚, tโ‚–โ‚‹โ‚, tโ‚–] ์ค‘ tโ‚–โ‚‹โ‚‚, tโ‚–โ‚‹โ‚๋„ ๊ทธ๋Œ€๋กœ ์ €์žฅ โ†’ attention ๋Œ€์ƒ
  • MELODI:

    PLAINTEXT
    Windowโ‚–โ‚‹โ‚ โ†’ summary token โ†’ linear mixer โ†’ compressed KV โ†’ ์ €์žฅ๋จ
    ํ˜„์žฌ window๋Š” ์ด summary KV์—๋งŒ cross-attention

๊ฒฐ๋ก 

“SWA๋Š” ๊ณผ๊ฑฐ raw token์„ ์ง์ ‘ ์ €์žฅํ•ด์„œ ๋ณด๋Š” ๋ฐฉ์‹์ด๊ณ , MELODI๋Š” ๊ณผ๊ฑฐ context๋ฅผ ์š”์•ฝํ•œ ์••์ถ• embedding์„ ์ €์žฅํ•ด์„œ ๋ณด๋Š” ๋ฐฉ์‹์ด๋‹ค.”

๋”ฐ๋ผ์„œ MELODI๋Š” memory usage ๋ฉด์—์„œ ํ›จ์”ฌ ํšจ์œจ์ ์ด๋ฉฐ, ์žฅ๊ธฐ dependency ์œ ์ง€์— ๋” ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์˜ˆ์‹œ๋กœ ๋”ฐ๋ผ๊ฐ€๊ธฐ

๋ฌผ์–ด๋ณธ ๊ฒƒ: ๋…ผ๋ฌธ์˜ ํ•ต์‹ฌ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด ์•„์ฃผ ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•ด์ฃผ๊ณ  ์ •๋ฆฌํ•ด ์ค˜

๋…ผ๋ฌธ MELODI์˜ ํ•ต์‹ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ธด ๋ฌธ์„œ๋ฅผ ์งง์€ context window๋กœ ๋‚˜๋ˆ ์„œ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ๋„ ์ด์ „ ๋ฌธ๋งฅ์˜ ์ •๋ณด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์š”์•ฝยท๋ณด์กดํ•˜๊ธฐ ์œ„ํ•œ ๊ณ„์ธต์  ๋ฉ”๋ชจ๋ฆฌ ์••์ถ•(Hierarchical Memory Compression) ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค. ์•„๋ž˜์— ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์˜ˆ์‹œ ์ค‘์‹ฌ์œผ๋กœ ๋‹จ๊ณ„๋ณ„๋กœ ์•„์ฃผ ์ž์„ธํžˆ ์„ค๋ช…๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.


โœ… ์ „์ฒด ๊ตฌ์กฐ ์š”์•ฝ

์ž…๋ ฅ ์‹œํ€€์Šค X = [xโ‚, ..., x_T]๋Š” 512 tokens ๋‹จ์œ„์˜ context window xโ‚–๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค. ๊ฐ window๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ memory ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

  1. Short-Term Memory (STM):

    • ๊ฐ window ๋‚ด์—์„œ layer๋ณ„๋กœ recurrent compression
    • ์˜ˆ: 512 tokens โ†’ 128 tokens
    • window ๊ฐ„ zโ‚– (์••์ถ•๋œ ๋ฉ”๋ชจ๋ฆฌ) ์ „๋‹ฌ
  2. Long-Term Memory (LTM):

    • ํŠน์ • ์ค‘๊ฐ„ layer์—์„œ 64๊ฐœ ์ž„๋ฒ ๋”ฉ์œผ๋กœ window ์ „์ฒด๋ฅผ ์š”์•ฝ
    • ์ด์ „ window์˜ ์š”์•ฝ๊ฐ’๋“ค์„ FIFO queue๋กœ ์ €์žฅ
    • ์ด ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•ด cross-attention ์ˆ˜ํ–‰

๐Ÿงช ์˜ˆ์‹œ: ์ „์ฒด ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋™์ž‘ ํ๋ฆ„

๊ฐ€์ •

  • context window ๊ธธ์ด: 512 tokens
  • short-term memory token ์ˆ˜ S = 128
  • long-term memory token ์ˆ˜ L = 64
  • window index: k = 3 (์„ธ ๋ฒˆ์งธ context window ์ฒ˜๋ฆฌ ์ค‘)

โ–ถ๏ธ Step 1: Input ์ค€๋น„

์ž…๋ ฅ

TEXT
xโ‚ƒ = [tokenโ‚, tokenโ‚‚, ..., tokenโ‚…โ‚โ‚‚]

์ด์ „ memory

  • zโ‚‚: ์ด์ „ window์˜ short-term memory (128 vectors)
  • mโ‚:โ‚‚: ์ด์ „ ๋‘ window์˜ long-term memory (64ร—2 = 128 KV pair)

โ–ถ๏ธ Step 2: Short-Term Memory ์ฒ˜๋ฆฌ (M๊ฐœ์˜ layer ๋ฐ˜๋ณต)

๊ฐ short-term layer์—์„œ:

  1. zโ‚‚์™€ ํ˜„์žฌ token xโ‚ƒ์— ๋Œ€ํ•ด causal attention
  2. context token โ†’ transformer โ†’ xโ‚ƒโ€ฒ๋กœ ์—…๋ฐ์ดํŠธ
  3. summary token uโ‚ƒ ์ƒ์„ฑ (128 tokens)
  4. summary token๊ณผ context token์„ ํ†ตํ•ด ๋‹ค์Œ window์šฉ memory token zโ‚ƒ ์ƒ์„ฑ

๐Ÿ’ก ์ˆ˜์‹ ์ •๋ฆฌ:

MATH
xโ‚ƒโ€ฒ = T(xโ‚ƒ | zโ‚‚)  
uฬ‚โ‚ƒ = T(uโ‚‚ | xโ‚ƒ, zโ‚‚)  
zโ‚ƒ = Mโ†’(xโ‚ƒโ€ฒ, uฬ‚โ‚ƒ)  
uโ‚ƒ = Mโ†‘(xโ‚ƒโ€ฒ, uฬ‚โ‚ƒ)

โ–ถ๏ธ Step 3: Long-Term Memory ์ฒ˜๋ฆฌ (๋‹จ์ผ middle layer์—์„œ๋งŒ)

  • xโ‚ƒโ€ฒ, uโ‚ƒ๊ฐ€ ์ด์ „ LTM (mโ‚:โ‚‚)์— ๋Œ€ํ•ด cross-attention ์ˆ˜ํ–‰
  • ๊ฒฐ๊ณผ๋ฅผ self-attention ๊ฒฐ๊ณผ์™€ gatingํ•˜์—ฌ ์กฐํ•ฉ:
MATH
A = ฮฑ โ‹… A_cross + (1 โˆ’ ฮฑ) โ‹… A_self
  • ์ด ๊ฒฐ๊ณผ๋ฅผ L = 64๊ฐœ์˜ vector๋กœ ์ถ”๊ฐ€ ์••์ถ•
  • ์••์ถ•๋œ vector๋ฅผ KV๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ mโ‚ƒ๋กœ long-term memory์— ์ถ”๊ฐ€

โ–ถ๏ธ Step 4: Output ์ „๋‹ฌ

  • ์œ„ ๊ณผ์ •์„ ํ†ตํ•ด ๋‹ค์Œ window์—์„œ๋Š” zโ‚ƒ, mโ‚:โ‚ƒ๋ฅผ ์‚ฌ์šฉ
  • ํ•ด๋‹น window ๋‚ด layer๋Š” uโ‚ƒ์™€ xโ‚ƒโ€ฒ๋ฅผ ๋‹ค์Œ layer๋กœ ๋„˜๊น€

๐Ÿ” ์ „์ฒด ๋ฐ˜๋ณต

์ด ๊ณผ์ •์„ ๊ฐ window๋งˆ๋‹ค ๋ฐ˜๋ณตํ•˜๋ฉฐ ๊ธด ๋ฌธ๋งฅ์„ ์ด์–ด๊ฐ€๊ณ , ํ•„์š”ํ•œ ๋ฌธ๋งฅ์€:

  • ์ง์ „ short memory zโ‚–โ‚‹โ‚
  • ์žฅ๊ธฐ ์š”์•ฝ ๋ฉ”๋ชจ๋ฆฌ mโ‚:โ‚–โ‚‹โ‚

๋ฅผ ํ†ตํ•ด ์ „๋ฐฉํ–ฅ์œผ๋กœ context๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“Š ์ •๋ฆฌ: ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ๋ฆ„๋„

๋‹จ๊ณ„๋™์ž‘์ž…๋ ฅ์ถœ๋ ฅ
โ‘ Short-term attentionxโ‚–, zโ‚–โ‚‹โ‚xโ‚–โ€ฒ, uโ‚–
โ‘กSummary compressionxโ‚–โ€ฒ, uโ‚–zโ‚– (๋‹ค์Œ window์šฉ)
โ‘ขLong-term memory attentionxโ‚–โ€ฒ, uโ‚–, mโ‚:โ‚–โ‚‹โ‚Aโ‚– (gated attention result)
โ‘ฃLong-term token ์ƒ์„ฑAโ‚– โ†’ linear mixermโ‚– (KV ํ˜•ํƒœ ์ €์žฅ)
โ‘คForwardingxโ‚–โ€ฒ, uโ‚–, zโ‚–, mโ‚:โ‚–๋‹ค์Œ window ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ

๐Ÿง  ์ฃผ์š” ํŠน์„ฑ

  • ๐Ÿ’พ Memory-efficient: long memory๋Š” KV๋งŒ ์ €์žฅ
  • ๐Ÿ”„ Recurrent compression: LSTM ์Šคํƒ€์ผ ์ •๋ณด๋ฅผ ์š”์•ฝ
  • โ›“๏ธ Global context retention: ์ „์ฒด window history ๋ณด์กด ๊ฐ€๋Šฅ

์‹คํ—˜ ๊ฒฐ๊ณผ์™€ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋ก ๊ณผ์˜ ์ฐจ์ด

๋ฌผ์–ด๋ณธ ๊ฒƒ: ์ด ๋…ผ๋ฌธ์—์„œ ์ œ์‹œํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ž์„ธํ•˜๊ฒŒ ๋ณด๊ณ  ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•๋ก ์— ๋น„ํ•˜์—ฌ ํŠน์ถœ๋‚œ ์ ๊ณผ ๋…ผ๋ฌธ์—์„œ ์ œ๊ธฐํ•˜๋Š” ์–ด๋– ํ•œ ๋ฐฉ๋ฒ•์ด ์ด๋Ÿฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๊ฒŒ ๋˜์—ˆ๋Š”์ง€ ๋…ผ๋ฌธ์—์„œ ์ œ์‹œํ•˜๋Š” ์ด์œ ์™€ ๋„ˆ์˜ ์ƒ๊ฐ์„ ์•Œ๋ ค์ค˜

์ข‹์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์— ๋…ผ๋ฌธ MELODI๊ฐ€ ์ œ์‹œํ•œ ์‹คํ—˜ ๊ฒฐ๊ณผ ๋ถ„์„, ๊ธฐ์กด ๋ฐฉ๋ฒ•๋ก ๊ณผ์˜ ๋น„๊ต, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•œ ์„ค๊ณ„ ์š”์ธ๊ณผ ํ•„์ž์˜ ๊ฒฌํ•ด๋ฅผ ์ˆ˜์น˜ ๊ธฐ๋ฐ˜์œผ๋กœ ์ •๋ฆฌํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.


โœ… 1. ์‹คํ—˜ ๊ฒฐ๊ณผ ์ •๋ฆฌ (Perplexity ๊ธฐ์ค€ ์„ฑ๋Šฅ ๋น„๊ต)

๋ชจ๋ธPG19 (T5 vocab)arXiv (Meena)C4(4K+)์ด ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์žฅ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ๋‹จ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ
Transformer XL11.412.6018.2213.6MโŒ ์—†์Œ13.6M
Block Recurrent Transf.10.982.2617.8213.1MโŒ ์—†์Œ13.1M
Memorizing Transformer10.622.1417.37147.8M134.2M13.6M
MELODI (S192+L96)10.292.0917.2527.8M25.2M2.6M

๐Ÿ“Œ ํ•ต์‹ฌ ์„ฑ๊ณผ ์š”์•ฝ:

  • Memorizing Transformer๋ณด๋‹ค ์„ฑ๋Šฅ ํ–ฅ์ƒ (PG19: โ†“0.33 PPL)
  • Memory ์‚ฌ์šฉ๋Ÿ‰ 5.3๋ฐฐ ๊ฐ์†Œ
  • Transformer-XL ๋Œ€๋น„ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ โ†“ 19%, ์„ฑ๋Šฅ์€ โ†‘

โœ… 2. ๊ธฐ์กด ๋ฐฉ๋ฒ•๋ก  ๋Œ€๋น„ MELODI์˜ ํŠน์ถœ๋‚œ ์ 

ํ•ญ๋ชฉMemorizing Transformer (MT)MELODI
KV ์ €์žฅ ๋ฐฉ์‹context token ์ „์ฒด KV ์ €์žฅ (dense)context window๋ฅผ ์••์ถ•ํ•œ low-dim KV ์ €์žฅ
๋‹จ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ์—†์Œ or top-layer LSTM์ ์šฉ์ „์ธต์— ๊ฑธ์นœ multi-layer recurrent compression
๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰64K token KV ์ €์žฅ64 compressed KV / window ร— 128 windows
์„ฑ๋Šฅ ํšจ์œจ tradeofflong-term memory ํฌ๋ฉด ์„ฑ๋Šฅ ์ฆ๊ฐ€ โ†’ but ๋ฉ”๋ชจ๋ฆฌ ๊ธ‰์ฆ์ž‘์€ memory footprint๋กœ๋„ ์„ฑ๋Šฅ ์œ ์ง€
๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ํ†ตํ•ฉ๋‹จ์ผ layer๋งŒ ์‚ฌ์šฉSM + LM์˜ ๊ณ„์ธต ๊ตฌ์กฐ ์„ค๊ณ„
์š”์•ฝ ํ† ํฐ ์‚ฌ์šฉXsummary token์œผ๋กœ SM-๊ฐ„ ์—ฐ๊ฒฐ ๊ฐ•ํ™”

โœ… 3. ๋…ผ๋ฌธ์ด ์„ค๋ช…ํ•˜๋Š” ์„ฑ๋Šฅ ํ–ฅ์ƒ์˜ ์ด์œ 

๋…ผ๋ฌธ์€ ์•„๋ž˜ ์„ธ ๊ฐ€์ง€๋ฅผ ์„ฑ๋Šฅ ํ–ฅ์ƒ์˜ ํ•ต์‹ฌ ์ด์œ ๋กœ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.

โ‘  ๊ณ„์ธต์  ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ (hierarchical compression)

  • SM: window ๋‚ด๋ถ€ ์ •๋ณด๋ฅผ ์—ฌ๋Ÿฌ ์ธต์„ ํ†ตํ•ด ์••์ถ• โ†’ 512 โ†’ 128 tokens
  • LM: window ์ „์ฒด๋ฅผ ์š”์•ฝํ•˜์—ฌ ๋‹จ์ผ layer์—์„œ โ†’ 64 tokens
  • โ‡’ ์š”์•ฝ ์†์‹ค์„ ๊ณ„์ธต์ ์œผ๋กœ ๋ณด์™„, ๋‹จ์ผ ๋ฐฉ์‹๋ณด๋‹ค ์ •๋ณด ๋ณด์กด ์šฐ์ˆ˜

๐Ÿ“Œ Ablation์—์„œ ํ™•์ธ๋จ: SM ๋˜๋Š” LM๋งŒ ์‚ฌ์šฉ ์‹œ PPL โ†‘, ๋‘˜ ํ•จ๊ป˜ ์“ธ ๋•Œ ๊ฐ€์žฅ ๋‚ฎ์Œ


โ‘ก Summary branching (๋‹จ๊ธฐ ๊ธฐ์–ต์˜ layer ๊ฐ„ ์ „ํŒŒ ๊ฐ•ํ™”)

  • summary token์„ ๋‹ค์Œ layer๋ฟ ์•„๋‹ˆ๋ผ ๋‹ค์Œ window์—๋„ ์ „๋‹ฌ
  • โ‡’ memory ๊ฐ„ cross-layer / cross-window ์ •๋ณด ํ๋ฆ„ ํ˜•์„ฑ
  • โ‡’ PPL ์•ฝ 0.3 ๊ฐ์†Œ ํšจ๊ณผ

๋…ผ๋ฌธ Table 4:

PLAINTEXT
w/o branching: 11.24
w/ branching:  10.95

โ‘ข Gated cross-attention in LM

  • LM layer์—์„œ self-attn๊ณผ cross-attn (long-term memory)์„ ๊ฐ€์ค‘ ์กฐํ•ฉ
  • A = ฮฑโ‹…A_cross + (1โˆ’ฮฑ)โ‹…A_self
  • โ‡’ ์žฅ๊ธฐ ๊ธฐ์–ต์— ๊ณผ๋„ํ•˜๊ฒŒ ์˜์กดํ•˜์ง€ ์•Š๋„๋ก ์กฐ์ • ๊ฐ€๋Šฅ
  • ํ•™์Šต ์ค‘ ๊ฐ head๋งˆ๋‹ค ฮฑ ํ•™์Šต ๊ฐ€๋Šฅ

๐Ÿค– ๋‚ด ๊ฒฌํ•ด ๋ฐ ํ‰๊ฐ€

  1. ์ด๋ก ์  ์™„์„ฑ๋„ MELODI๋Š” ๊ธฐ์กด ๋ฐฉ์‹๋“ค๋ณด๋‹ค Transformer ์•„ํ‚คํ…์ฒ˜์™€ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ํ†ตํ•ฉ๋˜๋ฉฐ, ๊ตฌ์กฐ์  ๋ณ€๊ฒฝ์ด ์ตœ์†Œํ™”๋˜๋ฉด์„œ๋„ ์žฅ๋‹จ๊ธฐ ์ •๋ณด๋ฅผ ๋ชจ๋‘ ํฌ๊ด„ํ•œ๋‹ค๋Š” ์ ์—์„œ ์ด๋ก ์  ์™„์„ฑ๋„๊ฐ€ ๋†’๋‹ค๊ณ  ํ‰๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  2. ์••์ถ• ๋ฐฉ์‹์˜ ์‹คํšจ์„ฑ Summary token ๊ธฐ๋ฐ˜์˜ ์••์ถ• ๋ฐฉ์‹์€ ์ •๋ณด๋ฅผ ์™„์ „ํžˆ ์œ ์ง€ํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Œ์—๋„, ๊ณ„์ธต์  ๋ฐ˜๋ณต ๊ตฌ์กฐ์™€ summary branching์„ ํ†ตํ•ด ์ด๋ฅผ ๊ทน๋ณตํ•œ ๊ฒƒ์ด ํšจ์œจ์„ฑ๊ณผ ์„ฑ๋Šฅ ๊ฐ„ ๊ท ํ˜•์„ ์ž˜ ๋งž์ถ˜ ์„ค๊ณ„๋ผ๊ณ  ๋ด…๋‹ˆ๋‹ค.

  3. ํ˜„์‹ค์  ์œ ์šฉ์„ฑ Memory size๋ฅผ 8๋ฐฐ ์ค„์ด๋ฉด์„œ๋„ MT๋ณด๋‹ค ๋” ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ณด์ธ๋‹ค๋Š” ์ ์€ ๋ชจ๋ฐ”์ผยท์—์ง€ ๋””๋ฐ”์ด์Šค๋‚˜ ์ €์ž์› ํ™˜๊ฒฝ์—์„œ ๋งค์šฐ ํฐ ์žฅ์ ์ž…๋‹ˆ๋‹ค. ํŠนํžˆ context window๋ฅผ ์ค„์ด๋ฉด์„œ๋„ ์„ฑ๋Šฅ ์œ ์ง€ ๊ฐ€๋Šฅ์„ฑ๋„ ๋†’์Šต๋‹ˆ๋‹ค.


๐Ÿ“Œ ๊ฒฐ๋ก 

MELODI์˜ ๊ฐ•์ ์€ ๋‹จ์ˆœํžˆ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์žฅ๋‹จ๊ธฐ ๋ฌธ๋งฅ ์ •๋ณด๋ฅผ ์••์ถ•ํ•˜๊ณ  ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹ ์ž์ฒด๋ฅผ ์ตœ์ ํ™”ํ–ˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ด์ „ ๋ฐฉ๋ฒ•๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋Š˜๋ฆฌ๋ฉด ์„ฑ๋Šฅ์ด ์ข‹์•„์ง„๋‹ค๋Š” ๋ฐฉํ–ฅ์„ฑ์„ ๊ฐ€์กŒ๋˜ ๊ฒƒ๊ณผ๋Š” ๋‹ค๋ฅธ, ์••์ถ•ยท์š”์•ฝ ๊ธฐ๋ฐ˜์˜ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ์„ค๊ณ„ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์ œ์‹œํ•œ ๊ฒƒ์ด๋ผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•„์š”ํ•˜์‹œ๋‹ค๋ฉด ์ด ์‹คํ—˜ ๊ฒฐ๊ณผ๋ฅผ ์‹œ๊ฐํ™”ํ•œ ํ‘œ๋‚˜ ๊ทธ๋ž˜ํ”„๋„ ์ œ์ž‘ํ•ด ๋“œ๋ฆด ์ˆ˜ ์žˆ์–ด์š”. ์›ํ•˜์‹œ๋‚˜์š”?

์‹ค์ œ๋กœ ์ ์šฉํ•˜๋ ค๋ฉด: ์ถ”๊ฐ€ ๊ตฌํ˜„๊ณผ ์ž์› ์‚ฐ์ •

๋ฌผ์–ด๋ณธ ๊ฒƒ: ์ด ๋…ผ๋ฌธ์—์„œ ์ œ์‹œ๋œ ๋ฐฉ๋ฒ•์„ ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ธฐ์กด ๋ฐฉ๋ฒ•์—์„œ ์–ด๋– ํ•œ ๊ตฌํ˜„์ด ์ถ”๊ฐ€์ ์œผ๋กœ ํ•„์š”ํ•˜๊ณ  ์ด๋Ÿฌํ•œ ๊ตฌํ˜„์— ์†Œ๋ชจ๋˜๋Š” ๊ณต์ˆ˜ ๋ฐ ์—ฐ์‚ฐ์— ํ•„์š”ํ•œ ์ปดํ“จํŒ… ์ž์›์˜ ํฌ๊ธฐ์— ๋Œ€ํ•ด์„œ ๊ณ„์‚ฐํ•ด์ค„ ์ˆ˜ ์žˆ๊ฒ ๋‹ˆ?

์ข‹์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์— ๋…ผ๋ฌธ MELODI์˜ ๊ตฌ์กฐ๋ฅผ ๊ธฐ์กด Transformer (์˜ˆ: GPT, LLAMA ๋“ฑ) ์œ„์— ์˜ฌ๋ฆฐ๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๋•Œ, ์‹ค์ œ ๊ตฌํ˜„์— ํ•„์š”ํ•œ ๊ตฌ์กฐ์  ๋ณ€๊ฒฝ, ์—ฐ์‚ฐ๋Ÿ‰ ์ฆ๊ฐ€, ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆ˜ ์ฆ๊ฐ€, ๊ทธ๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌ/์—ฐ์‚ฐ ๊ณต์ˆ˜๋ฅผ ์ •๋Ÿ‰์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜์—ฌ ๋ถ„์„ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


โœ… 1. ๊ธฐ์กด Transformer ๋Œ€๋น„ MELODI์˜ ๊ตฌํ˜„ ๋ณ€๊ฒฝ์‚ฌํ•ญ

๋ณ€๊ฒฝ ํ•ญ๋ชฉ์„ค๋ช…๊ตฌํ˜„ ๋‚œ์ด๋„
Short-Term Memory (STM)- ๊ฐ layer๋งˆ๋‹ค summary token, token mixer ์ถ”๊ฐ€
- zโ‚–โ‚‹โ‚๋ฅผ ๋ฐ›์•„์„œ attention์— ํฌํ•จ
์ค‘
Summary Branching- ๊ฐ layer์—์„œ summary โ†’ ๋‹ค์Œ window๋กœ ์ „๋‹ฌ ๊ฒฝ๋กœ ์ถ”๊ฐ€์ค‘
Long-Term Memory (LTM)- ํŠน์ • ์ค‘๊ฐ„ layer์—์„œ context window ์••์ถ• ํ›„ KV ์ €์žฅ
- ๋‹ค์Œ window์—์„œ cross-attention ์ˆ˜ํ–‰
์ค‘~์ƒ
Cross-Attn Gating- self-attn, cross-attn ๊ฒฐ๊ณผ๋ฅผ ฮฑ๋กœ ์กฐํ•ฉ (ฮฑ: ํ•™์Šต ๊ฐ€๋Šฅ scalar per head)๋‚ฎ์Œ
KV ๋ฉ”๋ชจ๋ฆฌ ์ €์žฅ ๊ตฌ์กฐ- FIFO queue ํ˜•ํƒœ๋กœ ์••์ถ•๋œ KV ์ €์žฅ ๋ฐ ์ฐธ์กฐ์ค‘
Position Embedding ๋ณ€๊ฒฝ- zโ‚–, uโ‚–์—๋„ ์œ„์น˜ ์ž„๋ฒ ๋”ฉ ์ ์šฉ ํ•„์š”๋‚ฎ์Œ

๐Ÿ“Œ ์š”์•ฝ: ๊ธฐ์กด Transformer์˜ ๊ตฌ์กฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์•ฝ๊ฐ„์˜ ๋ชจ๋“ˆ ์‚ฝ์ž… ๋ฐ routing ๊ตฌํ˜„์ด ํ•„์š”ํ•œ ์ˆ˜์ค€. GPT๋‚˜ LLAMA ๊ณ„์—ด์—์„œ๋„ ์ถฉ๋ถ„ํžˆ ํ™•์žฅ ๊ฐ€๋Šฅํ•จ.


โœ… 2. ์—ฐ์‚ฐ๋Ÿ‰ ๋ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ์ฆ๊ฐ€๋Ÿ‰ (์ˆ˜์น˜ ๊ธฐ๋ฐ˜)

๊ธฐ์ค€:

  • Transformer depth = 13
  • Embedding dim = 1024
  • Context window = 512 tokens
  • Short-term token ์ˆ˜ S = 128
  • Summary token ์ˆ˜ U = 128
  • Long-term token ์ˆ˜ L = 64
  • Long-term memory depth Q = 128 windows

๐Ÿง  [A] ์ถ”๊ฐ€๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆ˜ (์ด๋Ÿ‰์€ transformer ํ•˜๋‚˜๋‹น โ‰ˆ 100M ์ˆ˜์ค€)

1. Linear token mixer (2๊ฐœ per STM layer)

๊ฐ layer๋งˆ๋‹ค:

PLAINTEXT
Input: (W + U) x d = (512 + 128) x 1024  
Output: S = 128 tokens โ†’ Weight: (640 ร— 128) x 2 mixers
์ด = 164,864 params/layer

โ†’ 6 STM layer ์žˆ๋‹ค๊ณ  ํ•˜๋ฉด:

PLAINTEXT
์ด = 165K ร— 6 = **~1M params**
2. Gating scalar (ฮฑ per head)

์˜ˆ: 8 heads โ†’ ฮฑ 8๊ฐœ (ํ•™์Šต ๊ฐ€๋Šฅ scalar) โ†’ ๋ฌด์‹œ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€ (8 ร— N layer โ‰ˆ ์ˆ˜๋ฐฑ)

๐Ÿ“Œ ๊ฒฐ๋ก : ์ „์ฒด์ ์œผ๋กœ ์•ฝ 1% ๋ฏธ๋งŒ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ฆ๊ฐ€๋กœ ์ œํ•œ๋จ


โš™๏ธ [B] ์—ฐ์‚ฐ๋Ÿ‰ (FLOPs) ์ฆ๊ฐ€

1. ์ถ”๊ฐ€ attention ์ž…๋ ฅ ์ˆ˜ ์ฆ๊ฐ€ (STM)

๊ธฐ์กด:

PLAINTEXT
Attention over 512 tokens (self-attn)
โ†’ QK: (512ร—1024) ร— (512ร—1024) = O(512ยฒร—d)

MELODI (STM):

PLAINTEXT
Attention over [512 + 128] tokens = 640
โ†’ O(640ยฒ ร— d) = ์•ฝ 56% ์ฆ๊ฐ€
2. LTM cross-attention
  • ํ•œ layer์—์„œ 512 tokens๊ฐ€ 128ร—64๊ฐœ์˜ memory KV์™€ cross-attn ์ˆ˜ํ–‰

  • long memory ์ด ํฌ๊ธฐ:

    PLAINTEXT
    64 tokens ร— 128 windows = 8192 tokens
    โ†’ attention: 512 ร— 8192 ร— d = O(4M ร— d)

์ด๋Š” self-attn์˜ 512ยฒ = 0.25M ๋ณด๋‹ค ~16๋ฐฐ ํฌ์ง€๋งŒ, ๋‹จ 1๊ฐœ layer์—์„œ๋งŒ ์ˆ˜ํ–‰ โ†’ ์ „์ฒด ์—ฐ์‚ฐ์—์„œ ๋ณด๋ฉด ์•ฝ 10~15% ์ฆ๊ฐ€

๐Ÿ“Œ ์ด FLOPs ์ฆ๊ฐ€๋Ÿ‰ ์ถ”์ •:

  • ์ „์ฒด ๋ชจ๋ธ ๊ธฐ์ค€ ์•ฝ 30% ๋‚ด์™ธ ์—ฐ์‚ฐ๋Ÿ‰ ์ฆ๊ฐ€

๐Ÿ’พ 3. ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰

ํ•ญ๋ชฉ๊ธฐ์กด TransformerMELODI
๋‹จ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ (zโ‚–)์—†์Œ128 tokens/layer ร— 13 = 1.6M float
์žฅ๊ธฐ ๋ฉ”๋ชจ๋ฆฌ (mโ‚:โ‚–)์—†์Œ64 tokens ร— 2 (KV) ร— 128 windows = 16.8M float
ํ•ฉ๊ณ„-์•ฝ 18.4M float = ~73.6MB (FP32)

FP16 ์‚ฌ์šฉ ์‹œ ~36.8MB ์ˆ˜์ค€


๐Ÿ‘ทโ€โ™€๏ธ 4. ๊ตฌํ˜„ ๊ณต์ˆ˜ (์—”์ง€๋‹ˆ์–ด๋ง ๊ด€์ )

๊ตฌ์„ฑ์˜ˆ์ƒ ์ž‘์—…๋‚œ์ด๋„
STM token mixerLinear layer ์ถ”๊ฐ€ ๋ฐ branching logic ๊ตฌํ˜„์ค‘
Summary token flowlayer ๊ฐ„ routing + next window๋กœ ๋ณต์‚ฌ์ค‘
LM queueFIFO ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ตฌ์กฐ, KV indexing ๊ด€๋ฆฌ์ค‘~์ƒ
Cross-attn with gatingmultihead attention ๋ชจ๋“ˆ ์ˆ˜์ •๋‚ฎ์Œ
ํฌ์ง€์…˜ ์ž„๋ฒ ๋”ฉ ํ™•์žฅrelative pos embed ์ถ”๊ฐ€๋‚ฎ์Œ

์ด ๊ณต์ˆ˜:

  • ๊ธฐ์กด GPT-style ์ฝ”๋“œ ๊ธฐ๋ฐ˜์ด๋ผ๋ฉด ์•ฝ 1~2์ฃผ ๊ฐœ๋ฐœ ์ธ๋ ฅ 1~2๋ช… ์ •๋„
  • Flax/PyTorch ๋ชจ๋‘ ๊ตฌํ˜„ ๊ฐ€๋Šฅ, JAX ์ฝ”๋“œ๋กœ๋„ ์ด๋ฏธ ์กด์žฌํ•จ (๋…ผ๋ฌธ์€ Flax ์‚ฌ์šฉ)

โœ… ๊ฒฐ๋ก  ์š”์•ฝ

ํ•ญ๋ชฉ์ˆ˜์น˜ ๋˜๋Š” ํ‰๊ฐ€
ํŒŒ๋ผ๋ฏธํ„ฐ ์ฆ๊ฐ€์•ฝ 1% (token mixer ๋“ฑ)
FLOPs ์ฆ๊ฐ€์•ฝ 30% ์ด๋‚ด
๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์•ฝ 70MB (FP32 ๊ธฐ์ค€)
๊ตฌํ˜„ ๊ณต์ˆ˜์—”์ง€๋‹ˆ์–ด 1~2์ธ ๊ธฐ์ค€ 1~2์ฃผ ์ˆ˜์ค€
์ ์šฉ ๊ฐ€๋Šฅ์„ฑ๊ธฐ์กด GPT, LLAMA ๋“ฑ transformer ๊ณ„์—ด์— ์‰ฝ๊ฒŒ ํ™•์žฅ ๊ฐ€๋Šฅ

MELODI๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ์ˆ˜ ์ฆ๊ฐ€๋ฅผ ๊ฑฐ์˜ ์ผ์œผํ‚ค์ง€ ์•Š์œผ๋ฉด์„œ, ๋ฉ”๋ชจ๋ฆฌ์™€ ์—ฐ์‚ฐ์˜ ์‚ฌ์šฉ ํšจ์œจ์„ ๊ฐœ์„ ํ•˜๊ณ , long-context capability๋ฅผ ๋งค์šฐ ํšจ๊ณผ์ ์œผ๋กœ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์‹ค์šฉ์ ์ด๊ณ  ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

Q : ๊ฐ ์ปดํผ๋„ŒํŠธ๋ณ„๋กœ PyTorch-style ๋ชจ๋“ˆ ๊ตฌํ˜„์„ ๋งŒ๋“ค์–ด์ค„ ์ˆ˜ ์žˆ๊ฒ ๋‹ˆ?

PLAINTEXT
# MELODI ํ•ต์‹ฌ ์ปดํฌ๋„ŒํŠธ PyTorch-style ๋ชจ๋“ˆ ๊ตฌํ˜„
import torch
import torch.nn as nn
import torch.nn.functional as F
from typing import Optional

# -----------------------------
# 1. Summary Token Mixer (Mโ†‘ and Mโ†’)
# -----------------------------
class LinearTokenMixer(nn.Module):
    def __init__(self, input_tokens: int, output_tokens: int, dim: int):
        super().__init__()
        self.mixer = nn.Linear(input_tokens, output_tokens, bias=False)
        self.proj = nn.Linear(dim, dim)  # to map channel-wise

    def forward(self, x):  # x: [B, T, D]
        x = x.transpose(1, 2)  # [B, D, T]
        x = self.mixer(x)      # [B, D, T']
        x = x.transpose(1, 2)  # [B, T', D]
        return self.proj(x)

# -----------------------------
# 2. Gated Cross-Attention Layer
# -----------------------------
class GatedCrossAttention(nn.Module):
    def __init__(self, dim, num_heads):
        super().__init__()
        self.self_attn = nn.MultiheadAttention(dim, num_heads, batch_first=True)
        self.cross_attn = nn.MultiheadAttention(dim, num_heads, batch_first=True)
        self.alpha = nn.Parameter(torch.ones(num_heads))

    def forward(self, x, long_mem_kv):
        self_out, _ = self.self_attn(x, x, x)
        cross_out, _ = self.cross_attn(x, long_mem_kv, long_mem_kv)
        alpha = self.alpha.view(1, 1, -1)
        out = alpha * cross_out + (1 - alpha) * self_out
        return out

# -----------------------------
# 3. Short-Term Memory Layer
# -----------------------------
class ShortTermLayer(nn.Module):
    def __init__(self, dim, num_heads, token_count=512, summary_count=128):
        super().__init__()
        self.attn = nn.MultiheadAttention(dim, num_heads, batch_first=True)
        self.ffn = nn.Sequential(
            nn.Linear(dim, dim * 4),
            nn.GELU(),
            nn.Linear(dim * 4, dim)
        )
        self.token_mixer_up = LinearTokenMixer(token_count + summary_count, summary_count, dim)
        self.token_mixer_right = LinearTokenMixer(token_count + summary_count, summary_count, dim)

    def forward(self, x, summary, prev_memory):
        input_seq = torch.cat([prev_memory, x], dim=1)
        x_out, _ = self.attn(x, input_seq, input_seq)
        x_out = x_out + self.ffn(x_out)
        combined = torch.cat([x_out, summary], dim=1)
        new_summary = self.token_mixer_up(combined)
        new_memory = self.token_mixer_right(combined)
        return x_out, new_summary, new_memory

# -----------------------------
# 4. Long-Term Memory Update Layer
# -----------------------------
class LongTermMemoryLayer(nn.Module):
    def __init__(self, dim, num_heads, token_count=512, summary_count=128, long_tokens=64):
        super().__init__()
        self.cross_attn = GatedCrossAttention(dim, num_heads)
        self.token_mixer_long = LinearTokenMixer(token_count + summary_count, long_tokens, dim)

    def forward(self, x, summary, long_mem):
        x = self.cross_attn(x, long_mem)
        combined = torch.cat([x, summary], dim=1)
        long_tokens = self.token_mixer_long(combined)
        return x, long_tokens

# -----------------------------
# 5. FIFO-based Long-Term Memory Bank
# -----------------------------
class LongTermMemoryBank:
    def __init__(self, max_windows: int):
        self.max_windows = max_windows
        self.bank = []

    def append(self, kv):
        self.bank.append(kv)
        if len(self.bank) > self.max_windows:
            self.bank.pop(0)

    def get_memory(self):
        if len(self.bank) == 0:
            return None
        return torch.cat(self.bank, dim=1)

# -----------------------------
# 6. ์ „์ฒด MELODI ๋ธ”๋ก ๋ฐ Inference ๋ฃจํ”„
# -----------------------------
class MELODIBlock(nn.Module):
    def __init__(self, dim=1024, num_heads=8, num_layers=13, sm_layers=[0,1,2,3,5,6,8,10], lm_layer=7):
        super().__init__()
        self.dim = dim
        self.num_layers = num_layers
        self.sm_layers = sm_layers
        self.lm_layer = lm_layer

        self.layers = nn.ModuleList()
        for l in range(num_layers):
            if l == lm_layer:
                self.layers.append(LongTermMemoryLayer(dim, num_heads))
            elif l in sm_layers:
                self.layers.append(ShortTermLayer(dim, num_heads))
            else:
                self.layers.append(nn.TransformerEncoderLayer(d_model=dim, nhead=num_heads, batch_first=True))

        self.memory_bank = LongTermMemoryBank(max_windows=128)

    def forward(self, x_seq_list):
        """
        x_seq_list: List of [B, T, D] segments, one per context window
        """
        z_prev = torch.zeros(x_seq_list[0].shape[0], 128, self.dim, device=x_seq_list[0].device)  # STM ์ดˆ๊ธฐ๊ฐ’
        u_prev = torch.zeros_like(z_prev)  # Summary token ์ดˆ๊ธฐ๊ฐ’
        out_all = []

        for x in x_seq_list:
            for l, layer in enumerate(self.layers):
                if isinstance(layer, ShortTermLayer):
                    x, u_prev, z_prev = layer(x, u_prev, z_prev)
                elif isinstance(layer, LongTermMemoryLayer):
                    long_mem = self.memory_bank.get_memory()
                    x, long_token = layer(x, u_prev, long_mem if long_mem is not None else x)
                    self.memory_bank.append(long_token)
                else:
                    x = layer(x)
            out_all.append(x)

        return torch.cat(out_all, dim=1)  # ์ „์ฒด output concat

์ž…๋ ฅ ๋ฐ์ดํ„ฐ์™€ ์ถ”๋ก  ๊ณผ์ •, ๋ชจ๋ธ ๊ตฌ์กฐ์™€ ์ž์› ์š”๊ตฌ๋Ÿ‰

๋ฌผ์–ด๋ณธ ๊ฒƒ: ์ด ๋…ผ๋ฌธ์˜ ์ž…๋ ฅ๋ฐ์ดํ„ฐ์™€ ์ถ”๋ก  ๊ณผ์ •์— ๋Œ€ํ•ด์„œ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด ์•„์ฃผ ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•ด ์ฃผ๊ฒ ๋‹ˆ? ์ถ”๊ฐ€์ ์œผ๋กœ ๋ชจ๋ธ์•„ํ‚คํ…์ฒ˜์˜ ๊ตฌ์„ฑ ๋ฐ ๋ชจ๋ธ์„ ๊ตฌ์„ฑํ•˜๋Š” ์—ฐ์‚ฐ๊ณผ ๋ฉ”๋ชจ๋ฆฌ ์š”๊ตฌ๋Ÿ‰ ์ปดํ“จํŒ… ์š”๊ตฌ๋Ÿ‰ ๋Œ€ํ•ด์„œ๋„ ์„ค๋ช…ํ•ด์ค˜

์•„์ฃผ ์ข‹์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ์ •์˜๋œ MELODI ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ, ์ด ๊ตฌ์กฐ๊ฐ€ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ถ”๋ก ์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋ฉฐ, ์—ฐ์‚ฐ๋Ÿ‰/๋ฉ”๋ชจ๋ฆฌ ์š”๊ตฌ๊ฐ€ ์–ด๋–ค์ง€๋ฅผ ๊ตฌ์ฒด์ ์ธ ์˜ˆ์‹œ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


โœ… ์ž…๋ ฅ ๋ฐ์ดํ„ฐ ์˜ˆ์‹œ ๋ฐ ์ „์ฒ˜๋ฆฌ

์ž…๋ ฅ ์˜ˆ์‹œ (๊ธด ๋ฌธ์„œ)

TEXT
"In the middle of the night, he found a strange box hidden beneath the floorboards. ..."
โ†’ ๊ธธ์ด: 8,192 tokens (์˜ˆ: ๊ธด ์†Œ์„ค)

์ „์ฒ˜๋ฆฌ

PYTHON
# Assume tokenized to shape [B, 8192]
# Split into 512-token windows โ†’ 16๊ฐœ window
x_windows = torch.split(input_tensor, 512, dim=1)  # ๊ฐ window: [B, 512, D]

์ด x_windows๋Š” MELODIBlock์— ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.


๐Ÿง  ์ถ”๋ก  ํ๋ฆ„ (forward logic ์˜ˆ์‹œ)

PYTHON
melodi = MELODIBlock(dim=1024, num_heads=8)
output = melodi(x_seq_list=x_windows)

๋‚ด๋ถ€ ์ฒ˜๋ฆฌ ์ˆœ์„œ

  1. ShortTermLayer๋Š” ๊ฐ window๋งˆ๋‹ค 512-token์„ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ

    • ์ด์ „ window์—์„œ ์ „๋‹ฌ๋ฐ›์€ z_{k-1} memory ์‚ฌ์šฉ
    • summary token์„ ๋งŒ๋“ค์–ด ๋‹ค์Œ layer/๋‹ค์Œ window๋กœ ์ „๋‹ฌ
  2. LongTermMemoryLayer (์˜ˆ: 7๋ฒˆ์งธ layer)์—์„œ๋Š”

    • ์ง€๊ธˆ๊นŒ์ง€ ์ €์žฅ๋œ long-term memory (mโ‚:โ‚–โ‚‹โ‚)์— ๋Œ€ํ•ด cross-attention ์ˆ˜ํ–‰
    • window ์ „์ฒด๋ฅผ ์••์ถ•ํ•ด์„œ 64๊ฐœ long-token ์ƒ์„ฑ โ†’ ๋ฉ”๋ชจ๋ฆฌ bank์— ์ถ”๊ฐ€
  3. ๋งˆ์ง€๋ง‰๊นŒ์ง€ ์ฒ˜๋ฆฌ๋œ x_k๋Š” ์ถœ๋ ฅ์œผ๋กœ ์‚ฌ์šฉ๋จ


๐Ÿ—๏ธ ๋ชจ๋ธ ์•„ํ‚คํ…์ฒ˜ ๊ตฌ์„ฑ

๊ตฌ์„ฑ ์š”์†Œ์ˆ˜์น˜ (๊ธฐ์ค€ config)
์ด layers13
ShortTermLayer8 (e.g., layer 0~3, 5~6, 8, 10)
LongTermLayer1 (์˜ˆ: layer 7)
dim (hidden size)1024
attention heads8
context window size512 tokens
summary token ์ˆ˜128
long token ์ˆ˜64
long mem depth128 windows

๐Ÿ’พ ๋ฉ”๋ชจ๋ฆฌ ์š”๊ตฌ๋Ÿ‰ ๊ณ„์‚ฐ

1. Short-Term Memory

  • zโ‚–: 128 tokens/layer ร— 8 layers ร— 1024 dim = 1,048,576 float
  • = 4.0MB (FP32) or 2.0MB (FP16)

2. Long-Term Memory

  • 64 tokens ร— 2 (KV) ร— 1024 dim ร— 128 windows = 16,777,216 float
  • = 64.0MB (FP32) or 32.0MB (FP16)

3. Input/Activation buffer (xโ‚–: 16 windows)

  • 512 ร— 16 ร— 1024 = 8,388,608 float = 32MB (FP32)

๐Ÿ“Œ ์ด ๋ฉ”๋ชจ๋ฆฌ (FP16 ๊ธฐ์ค€, ์ถ”๋ก  ์‹œ):

PLAINTEXT
โ‰ˆ 2MB (STM) + 32MB (LTM) + 16MB (x buffer) = **50MB ์ˆ˜์ค€**

โš™๏ธ ์—ฐ์‚ฐ๋Ÿ‰ (FLOPs ๊ธฐ์ค€, ๋‹จ์ผ window ์ฒ˜๋ฆฌ ๊ธฐ์ค€)

1. ShortTermLayer ร— 8 layers

  • Self-attn: O((512+128)ยฒ ร— 1024) โ‰ˆ 0.4G FLOPs/layer
  • FFN: 512 ร— 1024 ร— 4 ร— 1024 ร— 2 โ‰ˆ 4.2G FLOPs/layer
  • TokenMixer: 2 ร— 640 ร— 128 ร— 1024 โ‰ˆ 0.17G FLOPs/layer

โ†’ ์ด โ‰ˆ ~4.7G ร— 8 = 37.6 GFLOPs

2. LongTermLayer (1 layer)

  • cross-attn: 512 ร— 8192 ร— 1024 โ‰ˆ 4.3G FLOPs
  • token mixer (LTM): โ‰ˆ 0.08G FLOPs

โ†’ ์ด โ‰ˆ ~4.4 GFLOPs

๐Ÿ“Œ ์ด ์ถ”๋ก  ์—ฐ์‚ฐ๋Ÿ‰ โ‰ˆ 42 GFLOPs / window โ†’ 16๊ฐœ window โ†’ โ‰ˆ 670 GFLOPs (long-context ์ถ”๋ก  ๊ธฐ์ค€)


โœ… ์š”์•ฝ ์ •๋ฆฌ

ํ•ญ๋ชฉ์ˆ˜์น˜ / ์„ค๋ช…
์ž…๋ ฅ ๊ตฌ์กฐ[B, 8192, 1024] โ†’ 16 window ๋ถ„ํ• 
์—ฐ์‚ฐ ๊ตฌ์„ฑ13-layer Transformer (SM + LM ํ˜ผํ•ฉ)
๋ฉ”๋ชจ๋ฆฌ ์š”๊ตฌ๋Ÿ‰ (FP16)์•ฝ 50MB
์—ฐ์‚ฐ๋Ÿ‰ (์ถ”๋ก  ์ „์ฒด)์•ฝ 670 GFLOPs
ํŠน์ง•- SM์œผ๋กœ layer ๊ฐ„ ์ •๋ณด ํ๋ฆ„
- LM์œผ๋กœ window ๊ฐ„ ์ •๋ณด ์••์ถ• ์ „๋‹ฌ
- ๋†’์€ ์„ฑ๋Šฅ ๋Œ€๋น„ ์ ์€ ๋ฉ”๋ชจ๋ฆฌ

ํ•œ๊ณ„๋ฅผ ๋„˜์œผ๋ ค๋Š” ์—ฐ๊ตฌ ํ๋ฆ„

๋ฌผ์–ด๋ณธ ๊ฒƒ: ์ด ๋…ผ๋ฌธ์˜ ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์–ด๋–ค ์—ฐ๊ตฌํ๋ฆ„์ด ์žˆ๋Š”์ง€ ์ •๋ฆฌํ•ด์„œ ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•ด ์ค˜

MELODI๋Š” ๋›ฐ์–ด๋‚œ ํšจ์œจ๊ณผ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ตฌ์กฐ์ด์ง€๋งŒ, ๋…ผ๋ฌธ์—์„œ๋„ ์ผ๋ถ€ ํ•œ๊ณ„์ ์„ ๋ช…์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ, ํ•ด๋‹น ํ•œ๊ณ„๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ๊ตฌ ํ๋ฆ„ ๋ฐ ์•„์ด๋””์–ด๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •๋ฆฌํ•ด ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค:


โœ… MELODI์˜ ํ•ต์‹ฌ ํ•œ๊ณ„

๊ตฌ๋ถ„์„ค๋ช…
1. Pretrained ๋ชจ๋ธ ์ ์šฉ ๋ถˆ๊ฐ€MELODI๋Š” ํ•™์Šต์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ง„ํ–‰ํ•ด์•ผ ํ•˜๋ฉฐ, ๊ธฐ์กด ์‚ฌ์ „ํ•™์Šต ๋ชจ๋ธ(GPT ๋“ฑ)์— ์ง์ ‘ ์ ์šฉ์ด ์–ด๋ ต๋‹ค.
2. Fixed compression ratioSM/LM์—์„œ ์‚ฌ์šฉํ•˜๋Š” token ์ˆ˜๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์–ด, ๋‹ค์–‘ํ•œ ๋ฌธ์„œ ๊ธธ์ด๋‚˜ ๋„๋ฉ”์ธ์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์‘ํ•˜์ง€ ๋ชปํ•จ.
3. ์ •๋ณด ์†์‹ค ๊ฐ€๋Šฅ์„ฑ์š”์•ฝ ๊ธฐ๋ฐ˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์••์ถ• ๊ณผ์ •์—์„œ ์ค‘์š” ์ •๋ณด๋ฅผ ๋ˆ„๋ฝํ•  ์œ„ํ—˜์ด ์žˆ๋‹ค.
4. ์ˆœ์ฐจ ์ถ”๋ก  ๊ตฌ์กฐwindow ๊ฐ„ ์ˆœ์ฐจ์  ์ถ”๋ก ์ด ํ•„์š”ํ•ด, parallelism์ด ์ œํ•œ๋œ๋‹ค.

๐Ÿ” ํ•œ๊ณ„ ๊ทน๋ณต์„ ์œ„ํ•œ ์—ฐ๊ตฌ ํ๋ฆ„

1. ๐Ÿ”„ Pretrained ๋ชจ๋ธ์— MELODI memory ์‚ฝ์ž…

  • ์—ฐ๊ตฌ ํ๋ฆ„: ๊ธฐ์กด ์‚ฌ์ „ํ•™์Šต๋œ ๋ชจ๋ธ(GPT, LLaMA)์— MELODI-style memory module์„ ์‚ฝ์ž…ํ•˜๋Š” ๋ฐฉ์‹ (plug-and-play)

  • ๋ฐฉ๋ฒ•: LoRA, Adapter, QLoRA ๋“ฑ๊ณผ ๊ฒฐํ•ฉํ•ด fine-tuning

  • ์˜ˆ์‹œ:

    • ๐Ÿ”ธMemory-Augmented Fine-tuning
    • ๐Ÿ”ธAdapter with Memory Bank
    • ๐Ÿ”ธFlash-Memory Injection (streamable memory)

โžก๏ธ ์ ์šฉ์„ฑ ๊ฐ•ํ™” + ํŒŒ๋ผ๋ฏธํ„ฐ ํšจ์œจ์„ฑ ํ™•๋ณด


2. ๐Ÿง  Adaptive Compression Memory (์••์ถ• ์ ์‘ํ™”)

  • ์—ฐ๊ตฌ ํ๋ฆ„: token importance score๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์š”์•ฝ ๋น„์œจ์„ ๋™์ ์œผ๋กœ ์กฐ์ ˆ

  • ๊ด€๋ จ ์—ฐ๊ตฌ:

    • ๐Ÿ”ธAutoCompressor (Chevalier et al. 2023): attention-based token compression
    • ๐Ÿ”ธICAE (2024): adaptive context encoder with LoRA
  • ๊ฐ€๋Šฅํ•œ ํ™•์žฅ:

    • ์ •๋ณด๋Ÿ‰ ๋งŽ์€ window๋Š” ๋” ๋งŽ์€ long-token ํ• ๋‹น
    • summary token ์ˆ˜๋ฅผ layer depth๋‚˜ attention entropy์— ๋”ฐ๋ผ ๋ณ€๊ฒฝ

โžก๏ธ ์ •๋ณด ์†์‹ค ์ตœ์†Œํ™” + ๊ณ ํšจ์œจ ์š”์•ฝ


3. ๐Ÿ” Recursive Memory Compression

  • ๊ฐœ๋…: LM์„ ๋‹จ์ผ์ธต์ด ์•„๋‹Œ ๋‹ค์ธต์œผ๋กœ ๊ตฌ์„ฑํ•˜๊ณ , ์˜ค๋ž˜๋œ memory๋Š” ์žฌ์••์ถ• (recompress) โ†’ compact KV ์œ ์ง€

  • ์˜๊ฐ: Compressive Transformer (Rae et al. 2019)

  • ์ ์šฉ ๋ฐฉ๋ฒ•:

    • ์ผ์ • window ์ด์ƒ ์˜ค๋ž˜๋œ memory โ†’ ๋‹ค์‹œ ํ•œ ๋ฒˆ token mixer์— ์ž…๋ ฅํ•˜์—ฌ ์žฌ์š”์•ฝ
    • ๊ธฐ์กด FIFO โ†’ multi-tier cache ๊ตฌ์กฐ

โžก๏ธ long-context ์œ ์ง€ ๋Šฅ๋ ฅ ํ–ฅ์ƒ + memory ํญ์ฆ ์–ต์ œ


4. โšก ๋น„์ˆœ์ฐจ์  memory ์ ‘๊ทผ ์ง€์›

  • ๋ฌธ์ œ: MELODI๋Š” window ์ˆœ์ฐจ ์ฒ˜๋ฆฌ โ†’ parallelization ์–ด๋ ค์›€

  • ํ•ด๊ฒฐ ๋ฐฉํ–ฅ:

    • long-term memory๋Š” read-only + cross-attn๋งŒ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋งŒ๋“ค๋ฉด ์—ฌ๋Ÿฌ window์—์„œ ๋ณ‘๋ ฌ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • memory indexing์„ positional RoPE ๊ธฐ๋ฐ˜์œผ๋กœ ์ •๊ทœํ™”ํ•˜์—ฌ ๋น„์ˆœ์ฐจ window์—๋„ ๋Œ€์‘ ๊ฐ€๋Šฅ

โžก๏ธ ๋ฉ€ํ‹ฐ-GPU ๋˜๋Š” ๋ถ„์‚ฐ ์ถ”๋ก  ํšจ์œจ ๊ทน๋Œ€ํ™”


5. ๐ŸŒ Multi-modal ํ™•์žฅ

  • ๋™๊ธฐ: MELODI ๊ตฌ์กฐ๋Š” modality-independent (์••์ถ•/๋ฉ”๋ชจ๋ฆฌ ๋ฐฉ์‹์€ text ์™ธ์—๋„ ์ ์šฉ ๊ฐ€๋Šฅ)

  • ์ ์šฉ ๊ฐ€๋Šฅ ์˜์—ญ:

    • ์˜์ƒ/์Œ์„ฑ์˜ temporal compression
    • multi-modal summary token (์˜ˆ: vision-text)

โžก๏ธ GEMINI-style ๋ชจ๋ธ์—์„œ ํšจ์œจ์  long-memory ๊ตฌ์„ฑ ๊ฐ€๋Šฅ


๐Ÿงฉ ์ข…ํ•ฉ ์ •๋ฆฌ: ์—ฐ๊ตฌ ๋ฐฉํ–ฅ ๋งคํ•‘

ํ•œ๊ณ„๊ทน๋ณต ์—ฐ๊ตฌ ํ๋ฆ„๋Œ€ํ‘œ ์•„์ด๋””์–ด
Pretrained ๋ถˆ๊ฐ€Memory-finetune, LoRAmemory-injection
๊ณ ์ • ์••์ถ•๋น„Adaptive compressiontoken importance โ†’ compression ratio
์ •๋ณด ์†์‹คMulti-pass summarization์žฌ์š”์•ฝ / ์ •๋ณด ์„ ํƒ
์ˆœ์ฐจ์  ๊ตฌ์กฐMemory-as-Cache ๋ฐฉ์‹long-memory ๋ณ‘๋ ฌ ์ ‘๊ทผ
๋„๋ฉ”์ธ ๊ณ ์ •Multi-modal ํ™•์žฅ์š”์•ฝ ๋ฐฉ์‹ ์ผ๋ฐ˜ํ™”

Q : MELODI์˜ short-term memory์™€ long-term memory๋Š” ๊ฐ๊ฐ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ •๋ณด๋ฅผ ์••์ถ•ํ•˜๊ณ  ์ „๋‹ฌํ•˜๋ฉฐ, ์ด ๊ตฌ์กฐ๊ฐ€ ๊ธฐ์กด memory-augmented transformer๋“ค๊ณผ ๋น„๊ตํ•ด ์–ด๋–ค ์ด์ ์„ ์ œ๊ณตํ•˜๋Š”๊ฐ€?

์•„์ฃผ ์ข‹์€ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜์— MELODI์˜ short-term memory (STM), long-term memory (LTM)๊ฐ€ ์–ด๋–ป๊ฒŒ ์ •๋ณด๋ฅผ ์••์ถ•ํ•˜๊ณ  ์ „๋‹ฌํ•˜๋Š”์ง€ ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด memory-augmented transformer์™€์˜ ๋น„๊ต๋ฅผ ์ •๋ฆฌํ•ด๋“œ๋ฆฝ๋‹ˆ๋‹ค.


โœ… MELODI์˜ Memory ๊ตฌ์กฐ์™€ ๋™์ž‘ ๋ฐฉ์‹

1. Short-Term Memory (STM): Layer-wise recurrent compression

  • ๋ชฉ์ : ํ˜„์žฌ window ๋‚ด ์ •๋ณด + ์ด์ „ window ์š”์•ฝ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌ

  • ๊ตฌํ˜„ ๋ฐฉ์‹:

    • ๊ฐ context window xโ‚–๋ฅผ ์—ฌ๋Ÿฌ ShortTermLayer์— ํ†ต๊ณผ์‹œํ‚ค๋ฉฐ ๋ฐ˜๋ณต ์••์ถ•

    • ๊ฐ layer์—์„œ๋Š”:

      • context token xโ‚–, summary token uโ‚–, ์ด์ „ memory token zโ‚–โ‚‹โ‚์„ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉ
      • attention + FFN ํ›„, xโ‚–โ€ฒ ์ƒ์„ฑ
      • summary token๊ณผ ํ•จ๊ป˜ linear token mixer๋ฅผ ํ†ตํ•ด ๋‹ค์Œ layer์šฉ uโ‚–, ๋‹ค์Œ window์šฉ zโ‚– ์ƒ์„ฑ
  • ์ •๋ณด ํ๋ฆ„:

    • layer ๊ฐ„: uโ‚– (summary token)
    • window ๊ฐ„: zโ‚– (compressed STM token)

๐Ÿ‘‰ ์ด ๊ตฌ์กฐ๋Š” Transformer ๋‚ด๋ถ€์— LSTM์ฒ˜๋Ÿผ layer-recurrent ํ๋ฆ„์„ ๋งŒ๋“ ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ


2. Long-Term Memory (LTM): Mid-layer compression + FIFO stacking

  • ๋ชฉ์ : ๊ณผ๊ฑฐ ์—ฌ๋Ÿฌ window์˜ ์ „์ฒด ์š”์•ฝ ์ •๋ณด๋ฅผ ์žฅ๊ธฐ์ ์œผ๋กœ ์œ ์ง€

  • ๊ตฌํ˜„ ๋ฐฉ์‹:

    • ์ค‘๊ฐ„ layer (์˜ˆ: 7์ธต)์—์„œ, ํ˜„์žฌ xโ‚–, uโ‚–๋ฅผ long-term memory์™€ cross-attention
    • self-attn๊ณผ cross-attn์„ ฮฑ gating์œผ๋กœ ํ•ฉ์„ฑ
    • ์ด์–ด์„œ token mixer๋ฅผ ํ†ตํ•ด 512-token window๋ฅผ 64๊ฐœ long-token์œผ๋กœ ์••์ถ•
    • ์ด KV์Œ์„ mโ‚–๋กœ ์ €์žฅ, memory queue (mโ‚:โ‚–)์— append

๐Ÿ‘‰ ์ •๋ณด๋Š” KV ํ˜•ํƒœ๋กœ ์ €์žฅ๋˜๋ฉฐ, ๋‹ค์Œ window ์ฒ˜๋ฆฌ ์‹œ cross-attention ๋Œ€์ƒ์ด ๋จ


๐Ÿ“Š ๊ธฐ์กด memory-augmented ๋ชจ๋ธ๊ณผ์˜ ๋น„๊ต

ํ•ญ๋ชฉMemorizing TransformerMELODI
memory ์ €์žฅ ๋ฐฉ์‹๋‹จ์ผ layer์—์„œ ๋ชจ๋“  token์˜ KV ์ €์žฅ์ค‘๊ฐ„ layer์—์„œ ์••์ถ•๋œ KV ์ €์žฅ
๋‹จ๊ธฐ ๋ฌธ๋งฅ ์œ ์ง€์—†์Œ (์ง์ ‘ token attention)STM ์‚ฌ์šฉ์œผ๋กœ ์—ฐ์†์„ฑ ๋ณด์กด
memory ์šฉ๋Ÿ‰๋งค์šฐ ํผ (dense KV ์ €์žฅ)8~10๋ฐฐ ์ ์Œ (64-token ์ˆ˜์ค€)
์ •๋ณด ํ๋ฆ„๋‹จ์ผ ๋ฐฉํ–ฅ (context โ†’ memory)๊ณ„์ธต์  ํ๋ฆ„ (SM + LM)
attention ๋ฐฉ์‹cross-attn (top-k ๋˜๋Š” dense)gated self + cross-attn
์š”์•ฝ ๋ฐฉ์‹์—†์Œ (raw token ์ €์žฅ)token mixer ๊ธฐ๋ฐ˜ ์š”์•ฝ/์••์ถ•

๐ŸŽฏ MELODI์˜ ๊ตฌ์กฐ์  ์ด์  ์š”์•ฝ

  1. ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ ์••์ถ•๋œ memory token (e.g., 64๊ฐœ)๋งŒ ์ €์žฅ โ†’ MT ๋Œ€๋น„ ์ตœ๋Œ€ 8๋ฐฐ ๊ฐ์†Œ

  2. ์žฅ๋‹จ๊ธฐ ๋ฌธ๋งฅ ๊ฒฐํ•ฉ STM: ์ง์ „ window์™€ smoothํ•œ ์—ฐ๊ฒฐ LTM: ์ „์ฒด history ์š”์•ฝ ์ €์žฅ โ†’ local + global ๋ฌธ๋งฅ ๋ชจ๋‘ ๋ณด์กด

  3. ์—ฐ์‚ฐ ์ตœ์ ํ™” cross-attn์€ ๋‹จ 1 layer์—์„œ๋งŒ ์ˆ˜ํ–‰, top-k pruning ์—†์ด๋„ ๋‚ฎ์€ cost

  4. ํ•™์Šต๋œ memory ์ œ์–ด (gating) self vs. cross attention์„ ฮฑ๋กœ ์กฐ์ ˆ โ†’ ๋ฉ”๋ชจ๋ฆฌ ์˜์กด๋„ ํ•™์Šต ๊ฐ€๋Šฅ


๊ฒฐ๋ก ์ ์œผ๋กœ, MELODI๋Š” ๊ธฐ์กด memory transformer๋“ค์˜ memory ํญ์ฆ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด์„œ๋„, ์ •๋ณด ๋ณด์กด๊ณผ ์ถ”๋ก  ์„ฑ๋Šฅ์„ ์–‘๋ฆฝํ•œ ๊ณ„์ธต์  ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•œ ๊ฒƒ์ด ๊ฐ€์žฅ ํฐ ๊ฐ•์ ์ž…๋‹ˆ๋‹ค.

๋” ๊ถ๊ธˆํ•˜์‹  ์  ์žˆ์œผ์‹ค๊นŒ์š”? ๋˜๋Š” ์ด ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•œ downstream task ์ ์šฉ ๋ฐฉ์‹์ด ๊ถ๊ธˆํ•˜์‹ ๊ฐ€์š”?

Q : ๋…ผ๋ฌธ์—์„œ ์ œ์•ˆํ•˜๋Š” hierarchical memory compression ๋ฐฉ์‹์ด long-context language modeling์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ์–ด๋–ค ๊ธฐ์—ฌ๋ฅผ ํ–ˆ๋Š”์ง€, ablation ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ๊ฒ€์ฆ๋˜์—ˆ๋Š”๊ฐ€?

๋…ผ๋ฌธ์—์„œ ์ œ์•ˆํ•˜๋Š” Hierarchical Memory Compression์€ MELODI์˜ ํ•ต์‹ฌ ๊ธฐ์—ฌ๋กœ, short-term memory (STM)๊ณผ long-term memory (LTM)๋ฅผ ๊ณ„์ธต์ ์œผ๋กœ ๊ฒฐํ•ฉํ•จ์œผ๋กœ์จ long-context language modeling์˜ ์„ฑ๋Šฅ์„ ๋†’์˜€์Šต๋‹ˆ๋‹ค. ์ด ๊ตฌ์กฐ๊ฐ€ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๊ธฐ์—ฌํ–ˆ๋Š”์ง€๋Š” Ablation Study๋ฅผ ํ†ตํ•ด ๋ช…ํ™•ํžˆ ๊ฒ€์ฆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜์— ๊ตฌ์กฐ์  ์ดํ•ด์™€ ablation ๊ฒฐ๊ณผ ๊ธฐ๋ฐ˜์˜ ๋ถ„์„์„ ์ •๋ฆฌํ•ด๋“œ๋ฆฝ๋‹ˆ๋‹ค.


โœ… Hierarchical Memory Compression์ด๋ž€?

  1. Short-Term Memory (STM):

    • context window ๋‚ด ์ •๋ณด๋ฅผ ์—ฌ๋Ÿฌ layer๋ฅผ ํ†ตํ•ด ๋ฐ˜๋ณต์ ์œผ๋กœ ์••์ถ•
    • ์ด์ „ window์˜ memory token z_{k-1}์™€ summary token u_{k-1} ํ™œ์šฉ
    • ๋กœ์ปฌ ๋ฌธ๋งฅ ์œ ์ง€์— ํšจ๊ณผ์ 
  2. Long-Term Memory (LTM):

    • ํ•œ ์ค‘๊ฐ„ layer์—์„œ context window ์ „์ฒด๋ฅผ ์š”์•ฝ โ†’ 64๊ฐœ token์œผ๋กœ ์••์ถ•
    • ๊ณผ๊ฑฐ window๋“ค์˜ ์••์ถ•๋œ KV๋ฅผ FIFO queue์— ์ €์žฅ
    • ์ „์—ญ ๋ฌธ๋งฅ ์œ ์ง€์— ํšจ๊ณผ์ 
  3. ์š”์•ฝ: โ†’ STM์€ ์ตœ๊ทผ ๋ฌธ๋งฅ์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ๋ณด์กด, LTM์€ ๋จผ ๊ณผ๊ฑฐ๋ฅผ ์š”์•ฝํ•ด ๊ธฐ์–ต โ†’ ์ด ๋‘˜์„ ๊ณ„์ธต์ ์œผ๋กœ ๊ฒฐํ•ฉํ•˜์—ฌ short+long dependency ๋™์‹œ ์ฒ˜๋ฆฌ


๐Ÿงช Ablation ์‹คํ—˜์œผ๋กœ ํ™•์ธ๋œ ๊ธฐ์—ฌ

1. STM + LTM ์กฐํ•ฉ์˜ ์„ฑ๋Šฅ ํ–ฅ์ƒ (Fig. 4)

  • ์‹คํ—˜ ์„ค์ •: PG-19 (T5 vocab) ๊ธฐ์ค€

  • ์กฐ๊ฑด:

    • ๋‹ค์–‘ํ•œ short memory (S)
    • ๋‹ค์–‘ํ•œ long memory (L) ํฌ๊ธฐ
    • ์ด perplexity ๋น„๊ต

๊ฒฐ๊ณผ ์š”์•ฝ:

๊ตฌ์กฐPerplexity (PG-19)
STM only (S192+L0)11.0+ (๋†’์Œ)
LTM only (S0+L64)11.2+ (๋†’์Œ)
STM + LTM (S128+L64)10.44 (์ตœ์ €)

โžก๏ธ STM๊ณผ LTM์€ ์ƒํ˜ธ๋ณด์™„์ ์ด๋ฉฐ, ๋‘˜์„ ํ•จ๊ป˜ ์จ์•ผ ์„ฑ๋Šฅ ์ตœ์ ํ™”


2. LTM coverage๊ฐ€ ์„ฑ๋Šฅ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ (Fig. 5)

  • ๊ณ ์ •๋œ L = 64 long-token, S = 128 short-token
  • LTM์ด ์ปค๋ฒ„ํ•˜๋Š” window ์ˆ˜: 2 โ†’ 128๊นŒ์ง€ ์‹คํ—˜

๊ฒฐ๊ณผ ์š”์•ฝ:

  • 2~4 window๋งŒ ํฌํ•จํ•œ LTM์€ ์„ฑ๋Šฅ ๊ฑฐ์˜ ๋ณ€ํ™” ์—†์Œ
  • 32 window ์ด์ƒ ํฌํ•จํ•œ ๊ฒฝ์šฐ๋ถ€ํ„ฐ PPL ๊ธ‰๊ฒฉํžˆ ๊ฐœ์„ 
  • 128 window ์ด์ƒ์—์„œ๋Š” ์„ฑ๋Šฅ ๊ฐœ์„  ์ •์ฒด

โžก๏ธ STM์€ ์ตœ๊ทผ ๋ช‡ window๊นŒ์ง€๋งŒ ํšจ๊ณผ์ , ๋ฉ€์–ด์ง„ ๋ฌธ๋งฅ์€ LTM์ด ํ•„์š”


3. Summary Branching ๊ธฐ๋ฒ•์˜ ์˜ํ–ฅ (Table 4)

๊ตฌ์กฐPPL (ST only)PPL (ST+LT)
without branching11.6811.24
with branching11.3910.95

โžก๏ธ layer ๊ฐ„ summary token ํ๋ฆ„์„ ๊ฐ•ํ™”ํ•œ ๊ฒƒ์ด ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ์ง์ ‘ ๊ธฐ์—ฌํ•จ์„ ๋ณด์—ฌ์คŒ


๐Ÿ“Œ ์ •๋ฆฌ: ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๊ธฐ์—ฌํ•œ ํ•ต์‹ฌ ํฌ์ธํŠธ

๊ธฐ๋ฒ•๊ธฐ์—ฌ
STM (multi-layer compression)์ตœ๊ทผ ๋ฌธ๋งฅ ์ •๋ณด ์„ธ๋ฐ€ํ•˜๊ฒŒ ์œ ์ง€ โ†’ short-range dependency ๊ฐ•ํ™”
LTM (window-level compression)์˜ค๋ž˜๋œ ๋ฌธ๋งฅ์„ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋ณด์กด โ†’ long-range dependency ์œ ์ง€
Summary token + branching์ •๋ณด ํ๋ฆ„ ๊ฐœ์„  โ†’ ์••์ถ• ํšจ์œจ ๋ฐ ๊ณ„์ธต๊ฐ„ ์ •๋ณด ์ „๋‹ฌ๋ ฅ ์ฆ๊ฐ€
Gated cross-attnLTM ์˜์กด๋„ ์กฐ์ ˆ ๊ฐ€๋Šฅ โ†’ ์ ์ ˆํ•œ memory usage ํ•™์Šต ๊ฐ€๋Šฅ

๐ŸŽฏ ๊ฒฐ๋ก 

Ablation ๊ฒฐ๊ณผ๋Š” MELODI์˜ hierarchical memory ๊ตฌ์กฐ๊ฐ€ ๋‹จ์ˆœ memory stacking ๋ฐฉ์‹๋ณด๋‹ค ํ›จ์”ฌ ํšจ์œจ์ ์ด๋ฉฐ, STM๊ณผ LTM์˜ ๊ณ„์ธต์  ๊ฒฐํ•ฉ์ด long-context ์ดํ•ด ๋Šฅ๋ ฅ ํ–ฅ์ƒ์— ํ•ต์‹ฌ์ ์ธ ๊ธฐ์—ฌ๋ฅผ ํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์‹ค์ฆ์ ์œผ๋กœ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

Q : MELODI ๊ตฌ์กฐ๊ฐ€ ๊ฐ–๋Š” ํ•œ๊ณ„(์˜ˆ: pretrained ๋ชจ๋ธ ์ ์šฉ ์–ด๋ ค์›€, ์ˆœ์ฐจ์  ์ฒ˜๋ฆฌ ๋“ฑ)๋Š” ์‹ค์ œ ์‘์šฉ์—์„œ ์–ด๋–ค ์ œ์•ฝ์„ ๋งŒ๋“ค๋ฉฐ, ์ด๋ฅผ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ ์  ํ™•์žฅ ๊ฐ€๋Šฅ์„ฑ์€ ์–ด๋–ค ๊ฒƒ์ด ์žˆ์„๊นŒ?

MELODI๋Š” ํšจ์œจ์ ์ด๊ณ  ๊ฐ•๋ ฅํ•œ long-context ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ์„ ๋ณด์—ฌ์ฃผ์ง€๋งŒ, ๋ช‡ ๊ฐ€์ง€ ๊ตฌ์กฐ์  ํ•œ๊ณ„๊ฐ€ ์‹ค์ œ ์‘์šฉ์— ์ œ์•ฝ์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์— MELODI์˜ ๊ตฌ์กฐ์  ํ•œ๊ณ„, ์‘์šฉ์ƒ์˜ ์ œ์•ฝ, ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ ๋ณด์™„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์ˆ ์  ํ™•์žฅ ๊ฐ€๋Šฅ์„ฑ์„ ์ •๋ฆฌํ•ด๋“œ๋ฆฝ๋‹ˆ๋‹ค.


โœ… MELODI ๊ตฌ์กฐ์˜ ์ฃผ์š” ํ•œ๊ณ„์™€ ์‹ค์ œ ์ œ์•ฝ

1. ์‚ฌ์ „ํ•™์Šต(pretrained) ๋ชจ๋ธ ์ ์šฉ ์–ด๋ ค์›€

  • ๋ฌธ์ œ: MELODI๋Š” Transformer ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พผ ๊ตฌ์กฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด GPT, LLaMA ๋“ฑ์˜ pretrained weight๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ

  • ์‹ค์ œ ์ œ์•ฝ:

    • ๊ธฐ์กด ๋Œ€๊ทœ๋ชจ ์‚ฌ์ „ํ•™์Šต ์ž์›์„ ํ™œ์šฉํ•  ์ˆ˜ ์—†์–ด from scratch training ํ•„์š”
    • ๋น„์šฉ, ๋ฐ์ดํ„ฐ ํ™•๋ณด, ์„ฑ๋Šฅ ์žฌํ˜„ ์ธก๋ฉด์—์„œ ํ˜„์‹ค์ ์ธ ์žฅ๋ฒฝ ์กด์žฌ

2. ์ˆœ์ฐจ์  ์ฒ˜๋ฆฌ (window-by-window)

  • ๋ฌธ์ œ: context window๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด์„œ memory๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๊ตฌ์กฐ โ†’ ๋ณ‘๋ ฌ์„ฑ ์ œํ•œ

  • ์‹ค์ œ ์ œ์•ฝ:

    • batch-level parallelism ๋ถˆ๊ฐ€ โ†’ ์ถ”๋ก  latency ์ฆ๊ฐ€
    • GPU ๋‹ค์ค‘์ฒ˜๋ฆฌ๋‚˜ ๋ถ„์‚ฐ์ถ”๋ก ์— ๋ถˆ๋ฆฌ โ†’ inference throughput ๋‚ฎ์Œ

3. ๋ฉ”๋ชจ๋ฆฌ ์••์ถ•์˜ ์ •๋ณด ์†์‹ค ๊ฐ€๋Šฅ์„ฑ

  • ๋ฌธ์ œ: long-term memory๋Š” summary token์„ ํ†ตํ•ด ์••์ถ• ์ €์žฅ

    • โ†’ ๋ชจ๋“  ์ค‘์š”ํ•œ ์ •๋ณด๊ฐ€ ๋ณด์กด๋œ๋‹ค๋Š” ๋ณด์žฅ์€ ์—†์Œ
  • ์‹ค์ œ ์ œ์•ฝ:

    • ์ผ๋ถ€ downstream task (์˜ˆ: QA, reasoning)์—์„œ๋Š” ์น˜๋ช…์  ์ •๋ณด ์œ ์‹ค ๊ฐ€๋Šฅ
    • ํŠน์ • window์˜ ํ•ต์‹ฌ ๋‚ด์šฉ์ด ์ถ”๋ก  ์‹œ ๋ˆ„๋ฝ๋  ์œ„ํ—˜

๐Ÿ”ง ๊ธฐ์ˆ ์  ํ™•์žฅ ๊ฐ€๋Šฅ์„ฑ ๋ฐ ๋ณด์™„ ๋ฐฉ์•ˆ

1. Pretrained ๋ชจ๋ธ๊ณผ์˜ ํ˜ธํ™˜์„ ์œ„ํ•œ Adapter-based ์‚ฝ์ž…

  • ์ ‘๊ทผ๋ฒ•: ๊ธฐ์กด GPT ๋“ฑ์˜ ์‚ฌ์ „ํ•™์Šต ๋ชจ๋ธ์— MELODI memory block์„ LoRA, Adapter ํ˜•ํƒœ๋กœ ์‚ฝ์ž…

  • ์˜ˆ์‹œ ์•„์ด๋””์–ด:

    • MELODI-Attention โ†’ ๊ธฐ์กด self-attn ํ›„ cross-attn to memory ์ถ”๊ฐ€
    • ๊ธฐ์กด weight freezing + memory block๋งŒ ํ•™์Šต
  • ์žฅ์ :

    • ์‚ฌ์ „ํ•™์Šต weight ํ™œ์šฉ ๊ฐ€๋Šฅ
    • few-shot tuning ๊ฐ€๋Šฅ

2. ๋น„์ˆœ์ฐจ์  memory ์ ‘๊ทผ ๊ตฌ์กฐ๋กœ parallelism ํ™•๋ณด

  • ์ ‘๊ทผ๋ฒ•:

    • Long-term memory๋ฅผ KV cache์ฒ˜๋Ÿผ read-only ๊ตฌ์กฐ๋กœ ๊ตฌ์„ฑ
    • ์—ฌ๋Ÿฌ window๋ฅผ ๋ณ‘๋ ฌ์ ์œผ๋กœ long memory์— cross-attn ์ˆ˜ํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ณ€๊ฒฝ
  • ์˜ˆ์‹œ:

    • โ€œFlashMemory-styleโ€ ์ ‘๊ทผ
    • Routing index์™€ positional RoPE ๋ณด์ • ํ™œ์šฉ
  • ์žฅ์ :

    • window ๊ฐ„ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ โ†’ GPU ํšจ์œจ ๊ฐœ์„ 

3. ์ •๋ณด ์†์‹ค ์ตœ์†Œํ™”๋ฅผ ์œ„ํ•œ Adaptive Memory Compression

  • ์ ‘๊ทผ๋ฒ•:

    • token importance ๊ธฐ๋ฐ˜์œผ๋กœ summary token ๋น„์œจ์„ ๋™์ ์œผ๋กœ ์กฐ์ •
    • ๋˜๋Š” retrieval ๊ธฐ๋ฐ˜ memory reinforcement (RAG hybrid)
  • ๊ธฐ์ˆ  ํ๋ฆ„ ์˜ˆ์‹œ:

    • AutoCompressor (Chevalier et al. 2023)
    • Gisting (Mu et al. 2024)
  • ์žฅ์ :

    • ์••์ถ• ์†์‹ค์„ ์ตœ์†Œํ™” โ†’ ๊ณ ์ • summary token ๊ตฌ์กฐ๋ณด๋‹ค ์ •๋ฐ€

4. Memory ์žฌํ™œ์šฉ ๊ตฌ์กฐ ์ถ”๊ฐ€ (Compressive Memory)

  • ์ ‘๊ทผ๋ฒ•:

    • ์˜ค๋ž˜๋œ long-term memory๋ฅผ ์žฌ์š”์•ฝํ•˜์—ฌ compactํ•˜๊ฒŒ ๋ณด๊ด€
    • Compressive Transformer์™€ ์œ ์‚ฌํ•œ multi-tier memory stack ๊ตฌ์„ฑ
  • ์žฅ์ :

    • memory ์šฉ๋Ÿ‰ ์ œํ•œ ๊ทน๋ณต + ์ •๋ณด ์œ ์ง€

5. Multi-modal ํ™•์žฅ์„ฑ ํ™•๋ณด

  • ์ ‘๊ทผ๋ฒ•:

    • MELODI์˜ memory block์„ vision/audio encoder ๋’ค์— ์—ฐ๊ฒฐ
    • multi-modal token๋„ memory token์ฒ˜๋Ÿผ ์ฒ˜๋ฆฌ
  • ์žฅ์ :

    • Gemini, Flamingo ๋“ฑ multi-modal long context ๋ชจ๋ธ๋กœ ํ™•์žฅ ๊ฐ€๋Šฅ

๐Ÿ“Œ ๊ฒฐ๋ก  ์š”์•ฝ

ํ•œ๊ณ„์‘์šฉ ์ œ์•ฝ๋ณด์™„ ๋ฐฉ์•ˆ
pretrained ์ ์šฉ ์–ด๋ ค์›€๊ธฐ์กด weight ์žฌ์‚ฌ์šฉ ๋ถˆ๊ฐ€memory block โ†’ adapter/LoRAํ™”
์ˆœ์ฐจ ์ฒ˜๋ฆฌ ๊ตฌ์กฐGPU ๋ณ‘๋ ฌ์„ฑ ์ €ํ•˜LTM์„ read-only cross-attn์œผ๋กœ ๊ตฌ์กฐํ™”
memory ์ •๋ณด ์†์‹ค์ถ”๋ก  ์ •๋ณด ์œ ์‹ค ๊ฐ€๋Šฅ์„ฑtoken ์ค‘์š”๋„ ๊ธฐ๋ฐ˜ adaptive compression
memory ํญ์ฆ๊ธด ๋ฌธ์„œ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ํ•œ๊ณ„compressive memory or hybrid routing
modality ํ•œ์ •text ์ „์šฉ ๊ตฌ์กฐmulti-modal memory ํ™•์žฅ ๊ฐ€๋Šฅ

๋ผ์ด์„ ์Šค

์ž‘์„ฑ์ž: Jaehun Ryu

๋งํฌ: https://jaehun.me/posts/melodi-exploring-memory-compression-for-long-contexts/

๋ผ์ด์„ ์Šค: CC BY 4.0

์ด ์ €์ž‘๋ฌผ์€ ํฌ๋ฆฌ์—์ดํ‹ฐ๋ธŒ ์ปค๋จผ์ฆˆ ์ €์ž‘์žํ‘œ์‹œ 4.0 ๊ตญ์ œ ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ถœ์ฒ˜๋ฅผ ๋ฐํžˆ๋ฉด ์ƒ์—…์  ๋ชฉ์ ์„ ํฌํ•จํ•ด ์ž์œ ๋กญ๊ฒŒ ์ด์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€