
87번 Xavier Init 은 scalar 분산을 맞춥니다. Orthogonal init (Saxe et al. 2013) 은 한 걸음 더 — 행렬 전체가 직교 가 되도록 초기화:
또는 반대:
선형 전파: . 가 직교면:
즉 norm 보존 → 깊은 네트워크 / 긴 시퀀스에서 gradient 가 정확히 유지됨 (소실/폭발 없음).
RNN / deep CNN 의 초기화로 유용.
A ~ N(0, 1) shape (max(fan_in, fan_out), max(...)).Q, R = np.linalg.qr(A) — Q 가 직교 행렬.함수 orthogonal_init(fan_in, fan_out, seed) 를 완성하세요.
(fan_in, fan_out).n = max(fan_in, fan_out)
A = np.random.default_rng(seed).normal(size=(n, n))
Q, _ = np.linalg.qr(A)
return Q[:fan_in, :fan_out]
| # | 이름 | 검증 |
|---|---|---|
| 1 | shape | |
| 2 | 정사각 (fan_in=fan_out): W @ W.T = I | |
| 3 | 세로 긴 (fan_in > fan_out): W.T @ W = I | |
| 4 | 가로 긴 (fan_out > fan_in): W @ W.T = I | |
| 5 | norm 보존: |Wx| ≈ |x| | 정사각 |
| 6 | 시드 재현성 |
코드를 작성하고 Run 을 눌러보세요.