Post

Flash Attention

Flash Attention

๐Ÿ“„ ๊ด€๋ จ ๋…ผ๋ฌธ: [NeurIPS 2022] FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness

๐Ÿ“„ ๊ด€๋ จ ๋…ผ๋ฌธ: [ICLR 2024] FlashAttention-2: Faster Attention with Better Parallelism and Work Partitioning

ํ•˜๋“œ์›จ์–ด ๊ฐœ๋…

  • ํ•˜๋“œ๋””์Šคํฌ: ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ์ „์ด๋‚˜ ์ „์›์ด ๊บผ์กŒ์„ ๋•Œ ํŒŒ์ผ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์กด๋˜๋Š” ๋น„ํœ˜๋ฐœ์„ฑ ์ €์žฅ ์žฅ์น˜์ด๋‹ค.
  • CPU RAM: ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๊ฑฐ๋‚˜ ํŒŒ์ผ์„ ๋กœ๋“œํ•  ๋•Œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž„์‹œ๋กœ ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์ด๋‹ค. ์ „์›์ด ๊บผ์ง€๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ํœ˜๋ฐœ์„ฑ ๋ฉ”๋ชจ๋ฆฌ์ด๋ฉฐ, CPU๊ฐ€ ์ง์ ‘ ์ ‘๊ทผํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. ํ•˜๋“œ ๋””์Šคํฌ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ PyTorch์˜ torch.load()์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด CPU RAM์œผ๋กœ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • GPU RAM: CPU ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€๊ทœ๋ชจ ๋ณ‘๋ ฌ ์—ฐ์‚ฐ์„ ์œ„ํ•ด ๋ณต์‚ฌํ•ด ๋‘๋Š” ๊ณต๊ฐ„์ด๋‹ค. CPU RAM์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ PyTorch์˜ .to('cuda')์™€ ๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด GPU RAM์œผ๋กœ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

GPU ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต

Flash Attention์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด, GPU ๋ฉ”๋ชจ๋ฆฌ์˜ ์ข…๋ฅ˜๋ฅผ ํฌ๊ฒŒ HBM๊ณผ SRAM์œผ๋กœ ๋‚˜๋ˆ ์„œ ์‚ดํŽด๋ณด๊ฒ ๋‹ค.

fig1

HBM (High Bandwidth Memory)

HBM์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ DRAM (Dynamic RAM) ์นฉ์„ ์ˆ˜์ง์œผ๋กœ ์Œ“์•„ ์˜ฌ๋ฆฐ ํ˜•ํƒœ์ด๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ VRAM์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ณต๊ฐ„์œผ๋กœ, ๋”ฅ๋Ÿฌ๋‹ ๋ชจ๋ธ์˜ ๊ฐ€์ค‘์น˜์™€ ๋Œ€๊ทœ๋ชจ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์ฃผํ•˜๋Š” GPU์˜ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ ์—ญํ• ์„ ํ•œ๋‹ค.

์ €์žฅ ์šฉ๋Ÿ‰์ด ๋น„๊ต์  ํฌ๊ณ  ํ•œ ๋ฒˆ์— ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๋Œ€์—ญํญ์ด ๋„“์ง€๋งŒ, ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” GPU Core ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ฉ€๋ฆฌ ๋–จ์–ด์ ธ ์žˆ์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” Latency๊ฐ€ ๊ธธ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.
์ด๋กœ ์ธํ•ด GPU Core๊ฐ€ HBM์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ์‰ฌ๊ฒŒ ๋˜๋Š” Memory Bottleneck ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

SRAM (Static Random Access Memory)

SRAM์€ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” GPU Core ๋ฐ”๋กœ ์˜†์— ์œ„์น˜ํ•œ ๊ณ ์† Cache ๋ฉ”๋ชจ๋ฆฌ์ด๋‹ค.

HBM์— ๋น„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” ์†๋„๊ฐ€ ์••๋„์ ์œผ๋กœ ๋น ๋ฅด์ง€๋งŒ, ์นฉ ๋‚ด๋ถ€์— ๋ฌผ๋ฆฌ์ ์œผ๋กœ ํ• ๋‹น๋˜์–ด ์žˆ์–ด ์šฉ๋Ÿ‰์ด ๋งค์šฐ ์ œํ•œ์ ์ด๋‹ค. (๋ณดํ†ต ์ˆ˜๋ฐฑ KB ์ˆ˜์ค€)
๋”ฐ๋ผ์„œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ SRAM์— ์˜ฌ๋ ค๋‘˜ ์ˆ˜๋Š” ์—†์œผ๋ฉฐ, ๋‹น์žฅ ์—ฐ์‚ฐ์— ํ•„์š”ํ•œ ํ•ต์‹ฌ ๋ฐ์ดํ„ฐ๋งŒ ์•„์ฃผ ์งง์€ ์‹œ๊ฐ„ ๋™์•ˆ ๋จธ๋ฌผ๊ฒŒ ๋œ๋‹ค.

Standard Attention

Standard Attention์˜ GPU ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต ๊ฐ„ ๋ฐ์ดํ„ฐ ์ด๋™ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. HBM์—์„œ $Q$์™€ $K$ ํ–‰๋ ฌ์˜ ์ผ๋ถ€๋ฅผ SRAM์œผ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค. (Read)
  2. ๊ฐ€์ ธ์˜จ $Q$์™€ $K$ ์กฐ๊ฐ์œผ๋กœ, $S=QK^\top$ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  3. ์—ฐ์‚ฐ์ด ์™„๋ฃŒ๋œ $S$ ์กฐ๊ฐ์„ HBM์œผ๋กœ ๋‚ด๋ณด๋‚ธ๋‹ค. (Write)
  4. $N\times N$ ํฌ๊ธฐ์˜ $S$ ํ–‰๋ ฌ์ด ๋ชจ๋‘ ์™„์„ฑ๋  ๋•Œ๊นŒ์ง€ 1~3 ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

    fig2

  5. HBM์—์„œ $S$์˜ ์ผ๋ถ€ ํ–‰์„ SRAM์œผ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค. (Read)
  6. ๊ฐ€์ ธ์˜จ $S$ ์กฐ๊ฐ์œผ๋กœ, $P=\text{softmax}(S)$ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  7. Softmax๊ฐ€ ์ ์šฉ๋œ $P$ ์กฐ๊ฐ์„ HBM์œผ๋กœ ๋‚ด๋ณด๋‚ธ๋‹ค. (Write)
  8. $P$ ํ–‰๋ ฌ์ด ๋ชจ๋‘ ์™„์„ฑ๋  ๋•Œ๊นŒ์ง€ 5~7 ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

    fig3

  9. ๋งˆ์ง€๋ง‰์œผ๋กœ HBM์—์„œ $V$์™€ $P$ ํ–‰๋ ฌ์˜ ์ผ๋ถ€๋ฅผ SRAM์œผ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค. (Read)
  10. ๊ฐ€์ ธ์˜จ $V$์™€ $P$ ์กฐ๊ฐ์œผ๋กœ, $O=PV$ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  11. ์—ฐ์‚ฐ์ด ์™„๋ฃŒ๋œ $O$ ์กฐ๊ฐ์„ HBM์œผ๋กœ ๋‚ด๋ณด๋‚ธ๋‹ค. (Write)
  12. $N\times D$ ํฌ๊ธฐ์˜ $O$ ํ–‰๋ ฌ์ด ๋ชจ๋‘ ์™„์„ฑ๋  ๋•Œ๊นŒ์ง€ 7~8 ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

    fig4

SRAM์˜ ๋ฌผ๋ฆฌ์ ์ธ ์šฉ๋Ÿ‰์ด ์ž‘๊ธฐ ๋•Œ๋ฌธ์—, ํ•˜๋“œ์›จ์–ด ์—ฐ์‚ฐ๊ธฐ ์ˆ˜์ค€์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ž‘์€ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์ฒ˜๋ฆฌํ•˜๋Š” Tiling ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ Standard Attention ์˜ ์น˜๋ช…์ ์ธ ๋ฌธ์ œ๋Š” ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฌผ์ธ $S$์™€ $P$์˜ ํฌ๊ธฐ์— ์žˆ๋‹ค.
์ผ๋ฐ˜์ ์œผ๋กœ ์‹œํ€€์Šค ๊ธธ์ด $N$์ด Head ์ฐจ์› $d_h$๋ณด๋‹ค ์••๋„์ ์œผ๋กœ ํฌ๊ธฐ ๋•Œ๋ฌธ์—, ์ค‘๊ฐ„์— ์ƒ์„ฑ๋˜๋Š” $S$์™€ $P$ ํ–‰๋ ฌ์€ $N \times N$์ด๋ผ๋Š” ๋ง‰๋Œ€ํ•œ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ฒŒ ๋œ๋‹ค.

๋ฌธ์ œ๋Š” ์ด๋ ‡๊ฒŒ ๊ฑฐ๋Œ€ํ•œ ํ–‰๋ ฌ์ด ๋А๋ฆฐ HBM๊ณผ SRAM ์‚ฌ์ด๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์˜ค๊ฐ„๋‹ค๋Š” ์ ์ด๋‹ค. (5~7๋ฒˆ ๊ณผ์ •)

๋น„๋ก Tiling์„ ํ†ตํ•ด ํ•œ ๋ฒˆ์— ์˜ฌ๋ฆฌ๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์˜€๋”๋ผ๋„ ๊ณผ์ •์ด ๋ฐ˜๋ณต๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฒฐ๊ตญ ์ „์ฒด HBM ์ ‘๊ทผ๋Ÿ‰ ์ž์ฒด๋Š” $O(N^2)$์— ๋‹ฌํ•˜๊ฒŒ ๋œ๋‹ค.

fig5 [์ถœ์ฒ˜]

Flash Attention

Flash Attention์—์„œ๋Š” Tiling Softmax (Online Softmax)๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ, ๊ธฐ์กด Softmax ํ•จ์ˆ˜์˜ I/O ๋ณ‘๋ชฉ์„ ์ค„์˜€๋‹ค.

Flash Attention์˜ GPU ๋ฉ”๋ชจ๋ฆฌ ๊ณ„์ธต ๊ฐ„ ๋ฐ์ดํ„ฐ ์ด๋™ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. HBM์—์„œ $Q,K,V,O$ ํ–‰๋ ฌ์˜ ์ผ๋ถ€์™€ Softmax ํ†ต๊ณ„๋Ÿ‰์„ SRAM์œผ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค. (Read)

    (์ฒซ ๋ฒˆ์งธ ๋ฃจํ”„์—ฌ์„œ $O$์™€ Softmax ํ†ต๊ณ„๋Ÿ‰์ด ์—†๋‹ค๋ฉด, ์ดˆ๊ธฐํ™”๋œ ๊ธฐ๋ณธ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.)

  2. ๊ฐ€์ ธ์˜จ $Q$์™€ $K$ ์กฐ๊ฐ์œผ๋กœ, $S=QK^\top$ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  3. ๊ฐ€์ ธ์˜จ Softmax ํ†ต๊ณ„๋Ÿ‰์„ ์ด์šฉํ•ด, SRAM์—์„œ ๋ฐ”๋กœ $P$ ์กฐ๊ฐ์„ ๊ณ„์‚ฐํ•œ๋‹ค.
  4. ๊ณ„์‚ฐ๋œ $P$ ์กฐ๊ฐ๊ณผ ๊ฐ€์ ธ์˜จ $V$ ์กฐ๊ฐ์œผ๋กœ, SRAM์—์„œ ๋ฐ”๋กœ $O=PV$ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
  5. 2~3 ๊ณผ์ •์—์„œ ์ƒ์„ฑ๋œ $S$์™€ $P$ ์กฐ๊ฐ์€ HBM์— ๋‚ด๋ณด๋‚ด์ง€ ์•Š๊ณ , ์—ฐ์‚ฐ์ด ๋๋‚˜๋Š” ์ฆ‰์‹œ ๋ฐ”๋กœ ํ๊ธฐํ•œ๋‹ค.
  6. ์ตœ์ข…์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋œ $O$ ์กฐ๊ฐ๊ณผ ํ†ต๊ณ„๋Ÿ‰๋งŒ HBM์œผ๋กœ ๋‚ด๋ณด๋‚ธ๋‹ค. (Write)
  7. $N\times D$ ํฌ๊ธฐ์˜ $O$ ํ–‰๋ ฌ์ด ๋ชจ๋‘ ์™„์„ฑ๋  ๋•Œ๊นŒ์ง€ 1~6 ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

fig6 [์ถœ์ฒ˜]

๊ธฐ์กด Softmax์˜ ํ•œ๊ณ„์ 

์ž…๋ ฅ ๋ฐ์ดํ„ฐ $x_i$์— ๋Œ€ํ•ด, Softmax ์—ฐ์‚ฐ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

\[\text{Softmax}(x_i) = \frac{e^{x_i - m}}{l} ,\quad\text{where }x_i\in\vx \tag{1}\]

์—ฌ๊ธฐ์„œ $m$์€ ์ „์ฒด ์›์†Œ์˜ ์ตœ๋Œ“๊ฐ’ $\max(\vx)$์ด๊ณ , $l$์€ ์ง€์ˆ˜ ํ•จ์ˆ˜์˜ ์ „์ฒด ํ•ฉ $\sum_j e^{x_j - m}$์„ ์˜๋ฏธํ•œ๋‹ค.

Stadard Attention์—์„œ ๋ฌด๊ฑฐ์šด $S$ ํ–‰๋ ฌ์„ HBM์—์„œ ๊ณ„์† ์ฝ๊ณ  ์“ฐ๋Š” ์ด์œ ๋Š”, Softmax ์—ฐ์‚ฐ์˜ ํŠน์„ฑ์ƒ $m$๊ณผ $l$์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ํ–‰ ๋‹จ์œ„์˜ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ํ•œ ๋ฒˆ์— ์•Œ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Online Softmax

Online Softmax๋Š” ๊ฐ ํ–‰๋งˆ๋‹ค Softmax ํ†ต๊ณ„๋Ÿ‰ $m$๊ณผ $l$์„ ๋ณ„๋„๋กœ ์ €์žฅํ•˜๋ฉฐ, ์ƒˆ๋กœ์šด ๋ธ”๋ก์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์ด ํ†ต๊ณ„๋Ÿ‰์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

์ตœ๋Œ€๊ฐ’ ์—…๋ฐ์ดํŠธ

์ด์ „ ๋ธ”๋ก๊นŒ์ง€ ๊ตฌํ•œ ์ž„์‹œ ์ตœ๋Œ“๊ฐ’์„ $m_{\text{old}}$๋กœ, ํ˜„์žฌ ์ƒˆ๋กœ ๊ฐ€์ ธ์˜จ ๋ธ”๋ก ๋ฐ์ดํ„ฐ์˜ ์ตœ๋Œ€๊ฐ’์„ $m_{\text{now}}$๋ผ๊ณ  ํ•˜์ž.

๊ณผ๊ฑฐ์˜ ์ตœ๋Œ“๊ฐ’๊ณผ ํ˜„์žฌ ๋ธ”๋ก์˜ ์ตœ๋Œ€๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ, ์ „์ฒด ์ตœ๋Œ“๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

\[m_{\text{new}}=\max(m_{\text{old}},m_{\text{now}}) \tag{2}\]

์ง€์ˆ˜ํ•ฉ ์—…๋ฐ์ดํŠธ

์ด์ „ ๋ธ”๋ก๊นŒ์ง€ ๊ตฌํ•œ ์ž„์‹œ ์ง€์ˆ˜ํ•ฉ์„ $l_{\text{old}}$๋ผ๊ณ  ํ•˜์ž.

์•ž์„œ ์ „์ฒด ์ตœ๋Œ“๊ฐ’์ด $m_{\text{new}}$๋กœ ์—…๋ฐ์ดํŠธ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ณผ๊ฑฐ์— ๊ตฌํ•ด๋‘” ๋ถ„๋ชจ์˜ ์ง€์ˆ˜ํ•ฉ $l_{old}$๋„ ์ƒˆ๋กœ์šด ๊ธฐ์ค€์— ๋งž์ถฐ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

\[l_{\text{new}} = l_{\text{old}} \cdot e^{m_{\text{old}} - m_{\text{new}}} + \sum e^{x_{\text{new}} - m_{\text{new}}} \tag{3}\]

์‹ (3)์ด ์„ฑ๋ฆฝํ•˜๋Š” ์ด์œ 

์ด์ „ ์ง€์ˆ˜ํ•ฉ $l_{\text{old}}$๋Š” $\sum e^{x_{\text{old}} - m_{\text{old}}}$ ๋กœ ๊ณ„์‚ฐ๋œ ์ƒํƒœ์ด๋‹ค.

์—ฌ๊ธฐ์— ๋ณด์ •๊ฐ’์ธ $e^{m_{\text{old}} - m_{\text{new}}}$๋ฅผ ๊ณฑํ•˜๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์‹์„ ์ „๊ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

\[\left( \sum e^{x_{\text{old}} - m_{\text{old}}} \right) \cdot e^{m_{\text{old}} - m_{\text{new}}} = \sum e^{(x_{\text{old}} - m_{\text{old}}) + (m_{\text{old}} - m_{\text{new}})} = \sum e^{x_{\text{old}} - m_{\text{new}}}\]

์ฆ‰, ๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š๋”๋ผ๋„, ์ฒ˜์Œ๋ถ€ํ„ฐ ์ „์ฒด ์ตœ๋Œ“๊ฐ’ $m_{\text{new}}$๋ฅผ ์•Œ๊ณ  ๊ณ„์‚ฐํ–ˆ๋˜ ๊ฒƒ๊ณผ ์ˆ˜ํ•™์ ์œผ๋กœ ์™„๋ฒฝํžˆ ๋™์ผํ•œ ๊ฒฐ๊ด๊ฐ’์ด ๋„์ถœ๋œ๋‹ค.

์ตœ์ข… ์ถœ๋ ฅ ํ–‰๋ ฌ $O$ ์—…๋ฐ์ดํŠธ

๊ธฐ์กด์˜ ์ถœ๋ ฅ ํ–‰๋ ฌ $O_{\text{old}}$ ์—ญ์‹œ ๊ณผ๊ฑฐ์˜ ์ง€์ˆ˜ํ•ฉ $l_{\text{old}}$์™€ ๊ณผ๊ฑฐ์˜ ์ตœ๋Œ“๊ฐ’ $m_{\text{old}}$ ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ž„์‹œ ๊ฒฐ๊ณผ๋ฌผ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์ƒˆ๋กœ์šด ๋ธ”๋ก์„ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋งˆ๋‹ค, ์Šค์ผ€์ผ๋ง์„ ํ†ตํ•ด ์ด์ „ ์ถœ๋ ฅ๊ณผ ํ˜„์žฌ ์ถœ๋ ฅ $O_{\text{now}}$ ๋ฅผ ๋ณ‘ํ•ฉํ•˜์—ฌ ์—…๋ฐ์ดํŠธํ•œ๋‹ค.

\[O_{\text{new}} = \frac{O_{\text{old}} \cdot l_{\text{old}} \cdot e^{m_{\text{old}} - m_{\text{new}}} + O_{\text{now}} \cdot l_{\text{now}} \cdot e^{m_{\text{now}} - m_{\text{new}}}}{l_{\text{new}}} \tag{4}\]