File size: 8,450 Bytes
37c61d4 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 | # `SRA_RES_CAP_REL` โ ์๋ residual cap
**ํ ์ค ์์ฝ**
edge ๋ฒ๊ทธ๋ฅผ ๊ณ ์น์ MoFlow ์ํ๋ง์ด ๋ฐ์ฐํ๋ค. ์ ๋ cap(`SRA_RES_CAP`)์ ๊ฐ์ ๋ฎ์ถฐ๋
๋ฐ์ฐ ์์ ์ ๋ฏธ๋ฃฐ ๋ฟ์ด์๋ค. ์ํ์ **ํธ์คํธ ์๋ฒ ๋ฉ norm ์ ๋น๋ก**ํ๋๋ก ๋ฐ๊พธ์
(`โresโ โค ratioยทโorigโ`) 13ํ ํ๊ฐ๊น์ง ์์ ์ ์ผ๋ก ํ๊ฐํ๋ฉฐ baseline ์ ์์ฐ๋ค.
---
## 1. ์ ์ ๋ cap ์ผ๋ก๋ ๋ถ์กฑํ๊ฐ
๋ฐ์ฐ์ ์์ธ์ MoFlow ์ **train/sample mismatch** ๋ค. ํ์ต์ ๋๋ค timestep ํ๋์์
๊ทธ๋ํ๋ฅผ ํ ๋ฒ๋ง ์ ์ฉํ์ง๋ง, ์ํ๋ง์ 10 ์คํ
flow ์ ๋ถ์์ ๋งค ์คํ
์ ์ฉํ๊ณ ๊ทธ
์ถ๋ ฅ์ด ๋ค์ ์คํ
์
๋ ฅ์ผ๋ก ๋๋จน์๋๋ค โ ์ญ๋์ด ๋์ ๋๋ค.
์ ๋ cap ์ `โresโ โค c` ๋ก **๊ณ ์ ํฌ๊ธฐ**๋ฅผ ๊ฐ์ ํ๋ค. ๋ฌธ์ ๋ ๋ ๊ฐ์ง๋ค.
1. **ํธ์คํธ ์ค์ผ์ผ ์์กด.** residual norm ์ ๊ทธ ํธ์คํธ ์๋ฒ ๋ฉ์ด ์ฐ๋ ์ค์ผ์ผ ์์
์๋ค. ์ธก์ ๊ฐ: MoFlow ์์ ๊ทธ๋ํ residual โ **6.3**, ํธ์คํธ ์๋ฒ ๋ฉ โ **16**.
MoFlow ์์ ํ๋ํ `c = 3.0` ์ด ์๋ฒ ๋ฉ ์ค์ผ์ผ์ด ๋ค๋ฅธ MID/LED ์์๋ ์ฌ์ค์
๋ฌด์ฐ์ฐ์ด๊ฑฐ๋ ๋ฐ๋๋ก ๊ณผ๋ํ ์ ์ฝ์ด ๋๋ค.
2. **๋์ ์ ๊ฒฐ์ ํ๋ ๊ฒ์ ์ ๋ ํฌ๊ธฐ๊ฐ ์๋๋ผ ๋น์จ.** ์คํ
๋น ์ํ๊ฐ
`x โ x + res` ๋ก ๊ฐฑ์ ๋ ๋ ๋ฐ์ฐ ์ฌ๋ถ๋ฅผ ์ง๋ฐฐํ๋ ๊ฒ์ `โresโ/โxโ` ๋ค. ์ ๋ cap ์
์ด ๋น์จ์ ์ง์ ํต์ ํ์ง ๋ชปํ๋ค.
์ค์ ๋ก ์ ๋ cap ์ ๊ฐ์ ๋ฎ์ถ์๋ก **๋ฐ์ฐ์ด ๋ฏธ๋ค์ง ๋ฟ ์ฌ๋ผ์ง์ง ์์๋ค**:
| ์ ๋ cap | ๋ฐ์ฐ ์์ |
|---|---|
| 6.0 | eval 4 |
| 3.0 | eval 5 |
| 1.0 | eval 9 (์ดํ 1.15~1.61 ์ง๋) |
| 0.5 | 12ํ์ฐจ๋ถํฐ ๋ฐ๋ฑ (0.873 โ 0.922 โ 0.958) |
---
## 2. ๊ตฌํ
```python
# SRA_RES_CAP_REL: ๋
ธ๋๋ณ ์ํ์ ํธ์คํธ ์๋ฒ ๋ฉ norm ์ ๋น๋กํด ์ ํ๋ค.
_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) # [N, 1] ๋
ธ๋๋ณ ์ํ
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
```
- `orig` = ํธ์คํธ ์๋ฒ ๋ฉ, `res` = ๊ทธ๋ํ ์ญ๋. ์ํ์ด **๋
ธ๋๋ง๋ค** ์๊ธฐ ์๋ฒ ๋ฉ ํฌ๊ธฐ์
๋น๋กํด ์ ํด์ง๋ฏ๋ก ์ค์ผ์ผ ๋ฌด๊ดํ๋ค.
- `torch.where` ๋ฅผ ์ฐ๋ ์ด์ ๋ ยง4 ์ฐธ์กฐ (์ด์ ๊ตฌํ์ ์น๋ช
์ ๋ฒ๊ทธ).
- ๊ธฐ๋ณธ๊ฐ `0` = ๊บผ์ง. ์ผ์ง ์์ผ๋ฉด ์๋ณธ๊ณผ ๋์ผํ๊ฒ ๋์ํ๋ค.
๊ฒ์ฆ (A=11, K=4):
| ์ค์ | out_proj grad | โresโmax | โresโ/โorigโ max |
|---|---|---|---|
| ๋ฌด์ ํ | 1,716,997 | 9.009 | **0.557** |
| ์ ๋ cap 1.0 | 255,169 | 1.000 | 0.071 |
| relcap 0.10 | 408,742 | 1.765 | **0.100** โ |
| relcap 0.03 | 122,623 | 0.529 | **0.030** โ |
๋น์จ์ด ์ง์ ๊ฐ์ผ๋ก ์ ํํ ์ ํ๋๊ณ gradient ๋ ์ ์์ด๋ค.
---
## 3. ๊ฒฐ๊ณผ (MoFlow-NBA, full SRA, `SRA_EDGE_FIX=1`)
eval ๋ณ min-ADEโโ @4.0s:
| eval | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| **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** |
| **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 |
| 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 |
| 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.370 |
| *baseline(์ฐธ๊ณ )* | 1.163 | 1.021 | 0.961 | 0.964 | 0.952 | 0.955 | 0.953 | 0.895 | โ | โ | โ | โ | โ |
ํ์ฌ best (ADE/FDE ๋ **๊ฐ์ ํ๊ฐ ์์ **์์ ์ง์ง์):
| ์ค์ | best ADE / FDE | @eval | ์งํ |
|---|---|---|---|
| **relcap 0.03** | **0.8399 / 1.0025** | 13 | 2368/25500 (9 %) |
| relcap 0.10 | 0.8568 / 1.0441 | 11 | 2349/25500 |
| cap 0.5 | 0.8732 / 1.0531 | 10 | 2379/25500 |
| cap 1.0 | 0.9662 / 1.2508 | 8 | 3390/25500 โ ๋ฐ์ฐ |
๊ด์ฐฐ:
- **์๋ ๋ฐ์ฐ ์ง์ (eval 4~5)์ ์๋ cap 2์ข
๋ชจ๋ ํต๊ณผ**ํ๋ค. ์ ๋ cap 1.0 ๋ 8ํ์ฐจ๊น์ง๋
๋ฉ์ฉกํด ๋ณด์์ผ๋ฏ๋ก 4~5ํ ํต๊ณผ๋ง์ผ๋ก๋ ๋ถ์กฑํ๋ฐ, 13ํ๊น์ง ์ ์ง๋ ๊ฒ์ ๋ค๋ฅธ ์์ค์ ๊ทผ๊ฑฐ๋ค.
- **baseline(0.895) ์ ์์ฐ๋ค.** relcap 0.03 ์ด 0.840 ์ผ๋ก โ0.055.
- ์ ๋ cap 0.5 ๋ 10ํ์ฐจ 0.873 ์ดํ **0.922 โ 0.958 ๋ก 3ํ ์ฐ์ ์์น** โ ์๋ cap ๊ณผ
๋ฌ๋ฆฌ ๋ถ์์ ์กฐ์ง์ด ๋ณด์ธ๋ค.
- ๋น์จ์ 0.10 โ 0.03 ์ผ๋ก ๋ ์กฐ์ฌ๋ ์ฑ๋ฅ์ด ๋๋น ์ง์ง ์์๋ค. ์ฆ **๋ฌด์ ํ ์ํ์ ๋น์จ
0.557 ์ ํ์ ์ด์์ผ๋ก ํฌ๊ณ , ๊ทธ ๊ผฌ๋ฆฌ๊ฐ ๋ฐ์ฐ์ ์ ๋ฐ**ํ๋ค๋ ํด์๊ณผ ์ผ์นํ๋ค.
---
## 4. โ ๏ธ ๊ฐ์ด ๊ณ ์น ๊ฒ โ ์ด์ cap ๊ตฌํ์ ์น๋ช
์ ๋ฒ๊ทธ
์ฒ์ ์์ฑํ cap ์ ์ด๋ฌ๋ค:
```python
res = 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 ํฉ):
| ์ค์ | grad |
|---|---|
| SOFT_START ๋ง | 78,751 |
| RES_CAP ๋ง | 765,506 |
| **SOFT_START + RES_CAP** | **0.00** โ ํ์ต ๋ถ๊ฐ |
์ด ์กฐํฉ์ผ๋ก ๋๋ฆฐ ์คํ๋ค์ ์ฒดํฌํฌ์ธํธ๋ฅผ ์ด์ด๋ณด๋ **58 epoch ๋ค์๋
`future_graph.out_proj` ๊ฐ ์ ํํ `0.000e+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 |
---
## 5. ์ฌ์ฉ๋ฒ
```bash
# ๊ถ์ฅ ์ค์ (MoFlow-NBA)
SRA_EDGE_FIX=1 SRA_RES_CAP_REL=0.03 \
CUDA_VISIBLE_DEVICES=0 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
```
| ํ ๊ธ | ๊ธฐ๋ณธ | ์ญํ |
|---|---|---|
| `SRA_EDGE_FIX` | off | edge-index ์ฌ ํผํฉ ๋ฒ๊ทธ ์์ (**ํ์**) |
| `SRA_RES_CAP_REL` | 0 (off) | **๋น์จ ์ํ** `โresโ โค rยทโorigโ` โ ๊ถ์ฅ |
| `SRA_RES_CAP` | 0 (off) | ์ ๋ ์ํ โ MoFlow ์์ ์ด๋ฑํจ์ด ํ์ธ๋จ |
| `SRA_SOFT_START` | off | **RES_CAP ๊ณผ ํจ๊ป ์ฐ์ง ๋ง ๊ฒ** (ยง4). ๋จ๋
์ผ๋ก๋ ๋ฐ์ฐ ๋ชป ๋ง์ |
| `SRA_GATE_SCALE` | 1.0 | ์ ์ญ ์ถ์ โ ๊ฐ์ฅ ๋นจ๋ฆฌ ๋ฐ์ฐ(3ํ์ฐจ), ํ๊ธฐ |
---
## 6. ๋ฏธํ์ / ํ๊ณ
**โ ์ต์ข
์๋ ด๊ฐ์ ์์ง ๋ชจ๋ฅธ๋ค.** ํ์ฌ 9 %(2368/25500) ์์ 0.840 ์ด๋ค.
๊ธฐ์กด(๋ฒ๊ทธํ) SRA = **0.695**, baseline = **0.703**. ๋จ์ 91 % ์ cosine LR ๊ฐ์ ์์
๋ ๋ด๋ ค๊ฐ์ผ ํ๋ฉฐ, **0.695 ์ ๋๋ฌํ์ง ๋ชปํ ๊ฐ๋ฅ์ฑ์ ์ฌ์ ํ ์ด๋ ค ์๋ค.**
**โก ๋น์จ๊ฐ ํ๋์ด ๋๋์ง ์์๋ค.** 0.03 ๊ณผ 0.10 ์ด ๋น์ทํ๊ณ 0.03 ์ด ๊ทผ์ ์ฐ์๋ค.
๋ ์กฐ์ธ ๊ฐ(0.01)์ด ๋์์ง, ์๋๋ฉด 0.03 ์ด ์ด๋ฏธ ๊ณผ๋ํ ์ ์ฝ์ธ์ง๋ ๋ฏธ๊ฒ์ฆ์ด๋ค.
cap ์ ์กฐ์ผ์๋ก ๋ฐ์ฐ์ ๋งํ์ง๋ง ๊ทธ๋ํ ๊ธฐ์ฌ๋ ์ค์ด๋๋ฏ๋ก, **"๋ฐ์ฐ ์ ํ๋ฉด์
baseline ๋ณด๋ค ๋์" ๊ตฌ๊ฐ์ด ์ค์ ๋ก ์กด์ฌํ๋์ง**๊ฐ ์ต์ข
์ง๋ฌธ์ด๋ค. ํ์ฌ 0.840 vs
baseline 0.895 ๋ ๊ทธ ๊ตฌ๊ฐ์ด ์กด์ฌํ๋ค๋ ์ฒซ ์ฆ๊ฑฐ๋ค.
**โข MoFlow ์ ์ฉ ์ฒ๋ฐฉ์ด๋ค.** MIDยทLED ๋ iterative denoiser ๋ผ ์ด ๋ฐ์ฐ์ด ์๊ณ ,
`RES_CAP*` ์ ์ฐ์ง ์๋๋ค (MID ๋ gate_init/warmup, LED ๋ ์ฒ๋ฐฉ ์์).
๋ค๋ฅธ ํธ์คํธ์ ์ ์ฉํ๋ ค๋ฉด ๊ทธ ํธ์คํธ์ residual/embedding ๋น์จ์ ๋จผ์ ์ธก์ ํด์ผ ํ๋ค.
**โฃ ์ ๋ cap ์ด ํญ์ ๋์๋ค๊ณ ๋จ์ ํ ์๋ ์๋ค.** cap 0.5 ๋ ์์ง ๋ฐ์ฐํ์ง ์์๊ณ
๋ฐ๋ฑ ์กฐ์ง๋ง ๋ณด์ธ๋ค. ์๋ cap ์ ์ฐ์๋ ํ์ฌ 13ํ ํ๊ฐ ๊ธฐ์ค์ ๊ด์ฐฐ์ด๋ฉฐ, ์์ฃผ๊น์ง
๊ฐ์ผ ํ์ ๋๋ค.
|