sra-trajectory-code / docs /MOFLOW_DIFF.md
po03087's picture
docs: MoFlow diff vs previous revision (edge fix + residual caps)
dd1c60c verified
|
Raw
History Blame Contribute Delete
10.1 kB

MoFlow ์ตœ์‹ ๋ณธ โ€” ์ด์ „ ๋ฒ„์ „ ๋Œ€๋น„ ๋ฌด์—‡์ด ๋ฐ”๋€Œ์—ˆ๋‚˜

๋น„๊ต ๊ธฐ์ค€: HF po03087/sra-trajectory-code ์ปค๋ฐ‹ 0d52562 โ†’ 37c61d4

๋ฐ”๋€ MoFlow ํŒŒ์ผ์€ 2๊ฐœ, ์ด 88์ค„์ด๋‹ค. ๊ทธ ์ค‘ ์‹ค์ œ ๋กœ์ง์€ 5์ค„์ด๊ณ  ๋‚˜๋จธ์ง€๋Š” ์ฃผ์„์ด๋‹ค.

ํŒŒ์ผ ๋ณ€๊ฒฝ ์„ฑ๊ฒฉ
models/graph_interaction_nba.py +23 ๋ฒ„๊ทธ ์ˆ˜์ • (edge index)
models/graph_interaction_nba_v6.py +65 ์ƒˆ ์•ˆ์ •ํ™” ์˜ต์…˜ 3์ข…

๋ชจ๋“  ์ƒˆ ๋™์ž‘์€ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ํ† ๊ธ€ ๋’ค์— ์žˆ๊ณ  ๊ธฐ๋ณธ๊ฐ’์€ ์ „๋ถ€ off๋‹ค. ํ† ๊ธ€์„ ์•ˆ ์ผœ๋ฉด ์ด์ „ ์ฝ”๋“œ์™€ ๋น„ํŠธ ๋‹จ์œ„๋กœ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค โ€” ๊ธฐ์กด ์ฒดํฌํฌ์ธํŠธ์™€ ์ง„ํ–‰ ์ค‘์ธ ์‹คํ–‰์ด ๊ทธ๋Œ€๋กœ ์žฌํ˜„๋œ๋‹ค.


1. graph_interaction_nba.py โ€” edge index ์”ฌ ํ˜ผํ•ฉ ๋ฒ„๊ทธ

๋ฐ”๋€ ์ฝ”๋“œ

 def _make_batched_edge_index(self, num_scenes):
     single  = self._single_edge_index                    # [2, E0]
     offsets = torch.arange(num_scenes, ...) * self.num_agents
     batched = single.unsqueeze(0).expand(num_scenes,-1,-1) + offsets.view(-1,1,1)
-    return batched.reshape(2, -1)                        # [2, S*E0]
+    if os.environ.get('SRA_EDGE_FIX', '') not in ('', '0', 'false', 'False'):
+        # [S,2,E0] -> [2,S,E0] -> [2,S*E0]: src/dst ์ถ•์„ ๋จผ์ € ์•ž์œผ๋กœ ์˜ฎ๊ธด๋‹ค
+        return batched.permute(1, 0, 2).reshape(2, -1)
+    return batched.reshape(2, -1)                        # legacy (์”ฌ ํ˜ผํ•ฉ)

์™œ ํ‹€๋ ธ๋‚˜

batched ์˜ shape ๋Š” [S, 2, E0] ์ด๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋ฐฐ์น˜๋Š”

s0_src  s0_dst  s1_src  s1_dst  s2_src  s2_dst  ...

์ด๋‹ค. ์—ฌ๊ธฐ์— .reshape(2, -1) ์„ ํ•˜๋ฉด ์•ž ์ ˆ๋ฐ˜์ด row 0, ๋’ค ์ ˆ๋ฐ˜์ด row 1 ์ด ๋˜๋ฏ€๋กœ row 0 = "์•ž์ชฝ ์”ฌ๋“ค์˜ src+dst ์ „๋ถ€", row 1 = "๋’ค์ชฝ ์”ฌ๋“ค์˜ src+dst ์ „๋ถ€" ๊ฐ€ ๋œ๋‹ค. src/dst ํ–‰์ด ์•„๋‹ˆ๋ผ ์”ฌ ๋ธ”๋ก์œผ๋กœ ์ž˜๋ฆฐ ๊ฒƒ์ด๋‹ค.

์ธก์ •๋œ ์˜ํ–ฅ (A=11)

์ง€ํ‘œ ์ˆ˜์ • ์ „ ์ˆ˜์ • ํ›„
๊ฐ™์€ ์”ฌ ์•ˆ์— ๋จธ๋ฌด๋Š” edge ๋น„์œจ 0 % 100 %
๋“ค์–ด์˜ค๋Š” edge ๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋Š” ๋…ธ๋“œ ์ ˆ๋ฐ˜ 0
๋‚˜๋จธ์ง€ ๋…ธ๋“œ์˜ degree ์˜๋„์˜ 2๋ฐฐ ์ •์ƒ
top-N ์ด์›ƒ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ฌถ์ด๋Š” ๋น„์œจ 33 % 100 %

์ฆ‰ "์˜ˆ์ธก๋œ ๋ฏธ๋ž˜ ์œ„์—์„œ ์”ฌ ๋‚ด๋ถ€ top-N ์ด์›ƒ์„ ๊ณ ๋ฅธ๋‹ค"๋Š” SRA ์˜ ์„ค๋ช…๊ณผ ์‹ค์ œ ์ฝ”๋“œ๊ฐ€ ๋‹ฌ๋ž๋‹ค. ๋…ผ๋ฌธ ์ˆ˜์น˜(MID 0.957 / LED 0.778 / MoFlow 0.695)๋Š” ์ „๋ถ€ ์ด ๋ฒ„๊ทธ ์ƒํƒœ์—์„œ ๋‚˜์˜จ ๊ฐ’์ด๋‹ค.


2. graph_interaction_nba_v6.py โ€” ์•ˆ์ •ํ™” ์˜ต์…˜ 3์ข…

edge ๋ฅผ ๊ณ ์น˜์ž MoFlow ๋งŒ ์ƒˆ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค. ํ•™์Šต loss ๋Š” ๋‹จ์กฐ ๊ฐ์†Œํ•˜๋Š”๋ฐ ์ƒ˜ํ”Œ๋ง์ด ๋ฐœ์‚ฐํ•œ๋‹ค. ์›์ธ์€ train/sample mismatch ๋‹ค.

  • ํ•™์Šต: ๋žœ๋ค timestep ํ•˜๋‚˜์—์„œ ๊ทธ๋ž˜ํ”„๋ฅผ ํ•œ ๋ฒˆ ์ ์šฉ
  • ์ƒ˜ํ”Œ๋ง: 10 ์Šคํ… flow ์ ๋ถ„์—์„œ ๋งค ์Šคํ… ์ ์šฉํ•˜๊ณ  ๊ทธ ์ถœ๋ ฅ์ด ๋‹ค์Œ ์Šคํ… ์ž…๋ ฅ์œผ๋กœ ๋˜๋จน์ž„

๋ฒ„๊ทธ ์ƒํƒœ์—์„œ๋Š” ๋…ธ๋“œ ์ ˆ๋ฐ˜์ด ๊ณ ์•„๋ผ ์„ญ๋™์ด ์•ฝํ•ด์„œ ์ด ๋ˆ„์ ์ด ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š์•˜๋‹ค. edge ๋ฅผ ๊ณ ์ณ ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ ์ด์›ƒ์„ ๋ฐ›์ž ์„ญ๋™์ด ์ปค์ง€๊ณ  10 ์Šคํ…์— ๊ฑธ์ณ ๊ธฐํ•˜๊ธ‰์ˆ˜๋กœ ์Œ“์ธ๋‹ค.

MIDยทLED ๋Š” iterative denoiser ๋ผ ์ด ํ˜„์ƒ์ด ์—†๋‹ค. ์•„๋ž˜ ์˜ต์…˜์€ MoFlow ์ „์šฉ ์ฒ˜๋ฐฉ์ด๋‹ค.

2.1 SRA_SOFT_START โ€” ์ดˆ๊ธฐ ์ถฉ๊ฒฉ ์ œ๊ฑฐ

if os.environ.get('SRA_SOFT_START', ...):
    nn.init.zeros_(self.out_proj.weight); nn.init.zeros_(self.out_proj.bias)
    nn.init.constant_(gate_proj_linear.bias, SRA_GATE_BIAS)   # ๊ธฐ๋ณธ -4, sigmoid(-4)โ‰ˆ0.018

MID ๊ฐ€ ์›๋ž˜ ์“ฐ๋˜ ๋ฐฉ์‹(zero-init + warmup gate)์„ V6 ๋กœ ์˜ฎ๊ธด ๊ฒƒ. ๋‘˜ ๋‹ค ํ•™์Šต ๊ฐ€๋Šฅ ํ•˜๊ฒŒ ๋‚จ์•„ ์žˆ์–ด์„œ ๊ณ ์ • ์ถ•์†Œ์™€ ๋‹ฌ๋ฆฌ ๊ทธ๋ž˜ํ”„๊ฐ€ ๋‚˜์ค‘์— ์ œ ๊ฐ•๋„๊นŒ์ง€ ์ž๋ž„ ์ˆ˜ ์žˆ๋‹ค. ๋‹จ๋…์œผ๋กœ๋Š” ๋ฐœ์‚ฐ์„ ๋ง‰์ง€ ๋ชปํ–ˆ๋‹ค.

2.2 SRA_GATE_SCALE โ€” ์ „์—ญ ์ถ•์†Œ

res = SRA_GATE_SCALE * gate * self.out_proj(nodes)     # ๊ธฐ๋ณธ 1.0 = off

๊ฐ€์žฅ ๋‹จ์ˆœํ•œ ์ฒ˜๋ฐฉ์ด์ง€๋งŒ ๊ฐ€์žฅ ๋นจ๋ฆฌ ๋ฐœ์‚ฐํ–ˆ๋‹ค(3ํšŒ์ฐจ). ํ๊ธฐ.

2.3 SRA_RES_CAP / SRA_RES_CAP_REL โ€” residual norm ์ƒํ•œ

_cap = float(os.environ.get('SRA_RES_CAP', 0.0) or 0.0)          # ์ ˆ๋Œ€ ์ƒํ•œ
if _cap > 0:
    rn  = res.norm(dim=-1, keepdim=True)
    res = res * torch.where(rn > _cap, _cap / rn.clamp_min(1e-6), torch.ones_like(rn))

_rel = float(os.environ.get('SRA_RES_CAP_REL', 0.0) or 0.0)      # ์ƒ๋Œ€ ์ƒํ•œ โ˜…
if _rel > 0:
    lim = _rel * orig.norm(dim=-1, keepdim=True)   # ๋…ธ๋“œ๋งˆ๋‹ค ์ž๊ธฐ ์ž„๋ฒ ๋”ฉ ํฌ๊ธฐ์— ๋น„๋ก€
    rn  = res.norm(dim=-1, keepdim=True)
    res = res * torch.where(rn > lim, lim / rn.clamp_min(1e-6), torch.ones_like(rn))
out = orig + res

์ ˆ๋Œ€ cap ์€ ๊ฐ’์„ ๋‚ฎ์ถฐ๋„ ๋ฐœ์‚ฐ ์‹œ์ ์„ ๋ฏธ๋ฃฐ ๋ฟ์ด์—ˆ๋‹ค:

์ ˆ๋Œ€ cap ๊ฒฐ๊ณผ
6.0 4ํšŒ์ฐจ ๋ฐœ์‚ฐ
3.0 5ํšŒ์ฐจ ๋ฐœ์‚ฐ
1.0 8ํšŒ์ฐจ best 0.9662 โ†’ ์ดํ›„ ๋ฐœ์‚ฐ, ์ตœ๊ทผ 1.41
0.5 10ํšŒ์ฐจ best 0.8732 โ†’ 12ํšŒ์ฐจ๋ถ€ํ„ฐ ๋ฐ˜๋“ฑ, ์ตœ๊ทผ 1.41

์ด์œ ๋Š” ๋‘ ๊ฐ€์ง€๋‹ค. (a) residual norm ์€ ํ˜ธ์ŠคํŠธ ์ž„๋ฒ ๋”ฉ ์Šค์ผ€์ผ ์œ„์— ์žˆ์–ด์„œ MoFlow ์—์„œ ํŠœ๋‹ํ•œ ๊ฐ’์ด MID/LED ์—์„œ๋Š” ์˜๋ฏธ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค. (b) x โ† x + res ์˜ ๋ˆ„์ ์„ ์ง€๋ฐฐํ•˜๋Š” ๊ฒƒ์€ ์ ˆ๋Œ€ ํฌ๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋น„์œจ โ€–resโ€–/โ€–xโ€– ์ธ๋ฐ ์ ˆ๋Œ€ cap ์€ ์ด๊ฑธ ์ง์ ‘ ํ†ต์ œํ•˜์ง€ ๋ชปํ•œ๋‹ค.

์ƒ๋Œ€ cap ์€ ๋…ธ๋“œ๋งˆ๋‹ค โ€–resโ€– โ‰ค rยทโ€–origโ€– ๋กœ ๋น„์œจ์„ ์ง์ ‘ ๋ฌถ๋Š”๋‹ค. ์ด๊ฒƒ๋งŒ ์‚ด์•„๋‚จ์•˜๋‹ค.

โš ๏ธ ๊ฐ™์ด ๊ณ ์นœ ๊ฒƒ โ€” ์ด์ „ cap ๊ตฌํ˜„์˜ dead-gradient ๋ฒ„๊ทธ

์ฒ˜์Œ ์“ด cap ์€ res * (rn.clamp(max=cap) / (rn + 1e-6)) ์ด์—ˆ๋Š”๋ฐ ๋‘ ๊ฐ€์ง€๊ฐ€ ํ‹€๋ ธ๋‹ค.

  1. res = 0 ์—์„œ gradient ๊ฐ€ ์ •ํ™•ํžˆ 0. ์Šค์ผ€์ผ์ด 0/1e-6 = 0 ์ด๊ณ  Jacobian ๋„ 0. SRA_SOFT_START(out_proj zero-init)์™€ ๊ฐ™์ด ์ผœ๋ฉด out_proj ๊ฐ€ 0 ์— ์˜๊ตฌํžˆ ๊ฐ‡ํ˜€ ๊ทธ๋ž˜ํ”„๊ฐ€ ์ „ํ˜€ ํ•™์Šต๋˜์ง€ ์•Š๋Š”๋‹ค. NaN ์ด ์•„๋‹ˆ๋ผ ์กฐ์šฉํžˆ ์ฃฝ๋Š”๋‹ค.

    ์„ค์ • out_proj gradient ํ•ฉ
    SOFT_START ๋งŒ 78,751
    RES_CAP ๋งŒ 765,506
    SOFT_START + RES_CAP 0.00 โ† ํ•™์Šต ๋ถˆ๊ฐ€

    ์‹ค์ œ๋กœ ๊ทธ ์กฐํ•ฉ์œผ๋กœ ๋Œ๋ฆฐ ์‹คํ–‰์˜ ์ฒดํฌํฌ์ธํŠธ๋Š” 58 epoch ๋’ค์—๋„ future_graph.out_proj ๊ฐ€ ์ •ํ™•ํžˆ 0.000000e+00 ์ด์—ˆ๋‹ค. ์ฆ‰ ๊ทธ ์‹คํ–‰๋“ค์€ host ๋‹จ๋…(=baseline)์„ ์ธก์ •ํ•œ ๊ฒƒ์ด๊ณ , "cap ์ด ๋ฐœ์‚ฐ์„ ํ•ด๊ฒฐํ–ˆ๋‹ค"๋˜ ๊ฒฐ๋ก ์€ ๋ฌดํšจ์˜€๋‹ค. ํ•ด๋‹น ๊ฒฐ๊ณผ 4๊ฑด์€ ํ๊ธฐํ–ˆ๋‹ค.

  2. cap ๋ฏธ๋งŒ ๊ฐ’๋„ ๋ถ€๋‹นํ•˜๊ฒŒ ์ถ•์†Œ๋œ๋‹ค. rn/(rn+1e-6) ์€ rn ์ด ์ž‘์„์ˆ˜๋ก 1 ์—์„œ ๋ฉ€์–ด์ง„๋‹ค โ€” โ€–resโ€–=1e-5 ์—์„œ 0.909 ๋ฐฐ.

torch.where ๋กœ ๋ฐ”๊พธ๋ฉด ๋‘˜ ๋‹ค ํ•ด๊ฒฐ๋œ๋‹ค.

๊ฒ€์ฆ old new
res=0 ์—์„œ gradient 0.0000 31.30
โ€–resโ€–=1e-5 ์ผ ๋•Œ ์Šค์ผ€์ผ 0.909 1.000
cap ์ดˆ๊ณผ ์‹œ ์ƒํ•œ 3.0 3.0 (๋™์ผ)
์ •์ƒ ๊ตฌ๊ฐ„ gradient ์ฐจ์ด โ€” ์ƒ๋Œ€์ฐจ 6e-7

3. ํ† ๊ธ€ ์š”์•ฝ

ํ† ๊ธ€ ๊ธฐ๋ณธ ์—ญํ•  ํŒ์ •
SRA_EDGE_FIX off edge index ์”ฌ ํ˜ผํ•ฉ ์ˆ˜์ • ํ•„์ˆ˜
SRA_RES_CAP_REL 0 (off) โ€–resโ€– โ‰ค rยทโ€–origโ€– ๋น„์œจ ์ƒํ•œ ์œ ์ผํ•œ ์ƒ์กด ์ฒ˜๋ฐฉ
SRA_RES_CAP 0 (off) ์ ˆ๋Œ€ ์ƒํ•œ ๋‘ ๊ฐ’ ๋ชจ๋‘ ๋ฐœ์‚ฐ, ์—ด๋“ฑ
SRA_SOFT_START off out_proj zero-init + gate bias ๋‹จ๋… ๋ถˆ์ถฉ๋ถ„. RES_CAP ๊ณผ ๋ณ‘์šฉ ๊ธˆ์ง€ (ยง2.3)
SRA_GATE_BIAS โˆ’4.0 SOFT_START ์˜ gate bias โ€”
SRA_GATE_SCALE 1.0 (off) ์ „์—ญ ์ถ•์†Œ 3ํšŒ์ฐจ ๋ฐœ์‚ฐ, ํ๊ธฐ

4. ์ง€๊ธˆ ์‹ค์ œ๋กœ ๋Œ๋ฆฌ๋Š” ์„ค์ •

SRA_EDGE_FIX=1 SRA_RES_CAP_REL=0.03 \
CUDA_VISIBLE_DEVICES=1 python fm_nba_graph_v6.py \
  --cfg cfg/nba/cor_fm.yml --exp v3_rel003 \
  --batch_size 192 --epochs 150 --fm_in_scaling --tied_noise \
  --top_n_neighbors 5 --uncertainty_weight 0.01 --data_dir ./data/nba

eval ๋ณ„ min-ADEโ‚‚โ‚€ @4.0s (24ํšŒ์ฐจ, 4170/25500 = 16 % ์ง„ํ–‰):

์„ค์ • 1โ€“6 7โ€“12 13โ€“18 19โ€“24
relcap 0.03 1.190 1.010 0.979 1.019 0.971 0.941 0.912 0.894 0.894 0.857 0.863 0.863 0.840 0.828 0.832 0.818 0.816 0.819 0.803 0.823 0.808 0.818 0.807 0.820
relcap 0.10 1.128 1.017 0.988 0.954 0.950 0.944 0.958 0.936 0.880 0.889 0.857 0.862 0.876 0.863 0.893 0.873 0.871 0.874 0.869 0.915 0.873 0.867 0.830 0.894
cap 0.5 (์ ˆ๋Œ€) 1.155 1.032 1.018 0.990 0.978 0.907 0.937 0.901 0.931 0.873 0.875 0.922 0.958 โ†’ ๋ฐœ์‚ฐ ์ข…๋ฃŒ (์ตœ๊ทผ 1.41)
cap 1.0 (์ ˆ๋Œ€) 1.146 1.013 0.985 1.020 0.978 1.006 1.170 0.966 1.309 1.378 1.150 1.344 ๋ฐœ์‚ฐ ์ข…๋ฃŒ (์ตœ๊ทผ 1.41)
cap ์—†์Œ 1.141 1.052 1.048 1.828 1.429 1.716 ๋ฐœ์‚ฐ โ€” โ€”

ํ˜„์žฌ best (ADE/FDE ๋Š” ๊ฐ™์€ ํ‰๊ฐ€ ์‹œ์ ์—์„œ ์ง์ง€์Œ):

์„ค์ • best ADE / FDE @eval ํ‰๊ฐ€ ํšŸ์ˆ˜
relcap 0.03 0.8029 / 0.9635 19 24 (์•ˆ์ •)
relcap 0.10 0.8302 / 1.0857 23 24 (์ง„๋™)

5. ์ด ๋ณ€๊ฒฝ์ด ๋…ผ๋ฌธ ์ˆ˜์น˜์— ์˜๋ฏธํ•˜๋Š” ๊ฒƒ โ€” ์ •์งํ•œ ์ƒํƒœ

โ‘  ๋…ผ๋ฌธ์˜ MoFlow+SRA = 0.695 ๋Š” ๋ฒ„๊ทธ ์ƒํƒœ์˜ ๊ฐ’์ด๋‹ค. ์”ฌ์„ ๊ฐ€๋กœ์ง€๋ฅด๋Š” ๊ทธ๋ž˜ํ”„๋กœ ์–ป์€ ๊ฐ’์ด๋ฏ€๋กœ, "์˜ˆ์ธก๋œ ๋ฏธ๋ž˜ ์œ„์˜ ์”ฌ ๋‚ด๋ถ€ sparse graph ๋•๋ถ„"์ด๋ผ๋Š” ๋…ผ๋ฌธ์˜ ์„ค๋ช…๊ณผ ๊ทธ ์ˆ˜์น˜๋ฅผ ๋งŒ๋“  ์ฝ”๋“œ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.

โ‘ก ์ˆ˜์ • ํ›„ ์žฌํ•™์Šต์€ ์•„์ง 0.695 ์— ๋„๋‹ฌํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ํ˜„์žฌ 0.8029 (16 % ์ง„ํ–‰). ๋‚จ์€ 84 % ์™€ cosine LR ๊ฐ์‡ ์—์„œ ๋” ๋‚ด๋ ค๊ฐ€์•ผ ํ•˜๋ฉฐ, ๋„๋‹ฌํ•˜์ง€ ๋ชปํ•  ๊ฐ€๋Šฅ์„ฑ์€ ์—ด๋ ค ์žˆ๋‹ค.

โ‘ข SRA_RES_CAP_REL ์€ ๋…ผ๋ฌธ์— ์—†๋Š” ํ•ญ์ด๊ณ  ์ถ”๋ก  ์‹œ์—๋„ ์ ์šฉ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ด๊ฑด ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฉ”์„œ๋“œ ๋ณ€๊ฒฝ์ด๋‹ค. ์“ด๋‹ค๋ฉด ๋…ผ๋ฌธ ๋ณธ๋ฌธ์— ๊ธฐ์ˆ ํ•ด์•ผ ํ•˜๊ณ , ์•ˆ ์“ฐ๋ฉด edge ์ˆ˜์ •๋ณธ MoFlow ๋Š” ์•„์˜ˆ ํ•™์Šต๋˜์ง€ ์•Š๋Š”๋‹ค (SRA_EDGE_FIX=1 ๋งŒ์œผ๋กœ๋Š” 4ํšŒ์ฐจ์— 1.828 ๋กœ ๋ฐœ์‚ฐ).

โ‘ฃ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ๋Š” ์ด ์ฒ˜๋ฐฉ์„ ์“ฐ์ง€ ์•Š๋Š”๋‹ค. MID ๋Š” graph_gate_init/warmup, LED ๋Š” ์ฒ˜๋ฐฉ ์—†์ด ํ•™์Šต๋œ๋‹ค. ์ƒ๋Œ€ cap ์„ ๋‹ค๋ฅธ ํ˜ธ์ŠคํŠธ์— ์ ์šฉํ•˜๋ ค๋ฉด ๊ทธ ํ˜ธ์ŠคํŠธ์˜ residual/embedding ๋น„์œจ์„ ๋จผ์ € ์ธก์ •ํ•ด์•ผ ํ•œ๋‹ค.

โ‘ค ๋น„์œจ๊ฐ’ ํŠœ๋‹์ด ๋๋‚˜์ง€ ์•Š์•˜๋‹ค. 0.03 ์ด 0.10 ๋ณด๋‹ค ๋‚ซ๋‹ค. ๋” ์กฐ์ธ ๊ฐ’(0.01)์ด ๋‚˜์„์ง€, 0.03 ์ด ์ด๋ฏธ ๊ณผํ•œ ์ œ์•ฝ์ธ์ง€๋Š” ๋ฏธ๊ฒ€์ฆ์ด๋‹ค.