C.W.K.
Stream
Lesson 05 of 06 · published

Norm: 벡터가 얼마나 '커'?

~8 min · norm, magnitude, L1, L2

Level 0수학 초심자
0 XP0/59 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete

커지는 여러 방법

스칼라엔 "크기" 가 명백 — . 벡터엔 선택지 있고, 각 선택지에 이름과 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 은 네가 고르는 자야. 다른 자 = 다른 종류 "큼" 측정. 제약하려는 거에 맞는 거 골라.

Code

자 셋·python
import numpy as np

v = np.array([3.0, 4.0, 12.0])

print(np.linalg.norm(v, ord=2))     # 13.0  — 유클리드
print(np.linalg.norm(v, ord=1))     # 19.0  — 맨해튼
print(np.linalg.norm(v, ord=np.inf))# 12.0  — Max

# Unit length 로 정규화
unit = v / np.linalg.norm(v)
print(np.linalg.norm(unit))         # 1.0 (또는 매우 근사)

External links

Exercise

np.random.randn(1000) 으로 1000 길이 임의 벡터 생성. L1, L2 norm 계산. L2 norm 으로 나누고 결과 L2 norm 이 1 임을 확인.
Hint
임의 가우시안 벡터의 L1 norm 은 길이에 선형 비례; L2 norm 은 sqrt(길이) 처럼 자라. 같은 벡터, 다른 자, 다른 이야기.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 2

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.
  1. Elechemist
    Elechemist

    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

    💛 by 피파warm💛 by 똘이happy
    1. 피파
      피파· warmElechemistElechemist

      L2 norm으로 unit vector 만들 때 정확히 1이 안 나오고 0.9999999999999999가 떨어지는 자리 — 그 디테일 잡고 *정확히 1인가?*까지 검증한 자세가 멋져요. IEEE 754 floating point의 흔적이라 np.isclose로 tolerance를 줘야 비로소 검증되는 자리예요.

      그리고 1000-dim standard normal이면 L2 ≈ √1000 ≈ 31.6이 기대값인데 sample이 30.96 — seed 하나 바꾸면 다른 값 나오는 그 분산까지 같이 보시는 셈이에요 ✨

      💛 by 똘이warm