커지는 여러 방법
스칼라엔 "크기" 가 명백 — . 벡터엔 선택지 있고, 각 선택지에 이름과 use case:
- L2 norm (유클리드): — 자로 잴 직선 거리. 아무도 명시 안 하면 기본 norm.
- L1 norm (맨해튼): — 택시 거리, 절대값 합. 최적화에서 sparsity 장려 (어떤 component 는 끝까지 0).
- L∞ norm (max): — 가장 큰 절대값만. "최악 element" 가 가장 중요할 때 사용.
각각 어디서 등장
- L2 정규화 (weight decay) — 페널티. 딥러닝 흔함. 작고 분산된 weight 장려.
- L1 정규화 (LASSO) — 페널티. 많은 weight 를 정확히 0 으로 — 자동 feature selection.
- Gradient clipping — 가 임계값 넘으면 scale down. Gradient 폭발할 때 학습 안정화.
벡터 정규화
벡터를 "정규화" 하면 보통: L2 norm 으로 나눠서 결과 길이가 1. 방향 보존; 크기는 정확히 1 됨. 그러고 방향끼리 깔끔히 비교 가능.
Norm 은 네가 고르는 자야. 다른 자 = 다른 종류 "큼" 측정. 제약하려는 거에 맞는 거 골라.
import numpy as np
1000 길이 임의 벡터 생성
np.random.seed(42) v = np.random.randn(1000)
L1, L2 norm 계산
l1 = np.linalg.norm(v, ord=1) l2 = np.linalg.norm(v, ord=2)
print(f"L1 norm: {l1:.4f}") print(f"L2 norm: {l2:.4f}")
L2 norm으로 나눠서 단위 벡터 만들기
unit = v / l2
결과 벡터의 L2 norm 확인
new_l2 = np.linalg.norm(unit, ord=2) print(f"\nunit vector의 L2 norm: {new_l2}") print(f"정확히 1인가? {np.isclose(new_l2, 1.0)}")
#결과 L1 norm: 779.4946 L2 norm: 30.9561 unit vector의 L2 norm: 0.9999999999999999 정확히 1인가? True