같은 객체, 다른 모양
행렬엔 flavor 있어. 각 flavor = 구조 제약일 뿐인데, 제약이 특정 능력을 잠금해제해서 각자 이름 얻음.
| 유형 | 제약 | 왜 쓸모 있나 |
|---|---|---|
| 정방 | 행 수 = 열 수 | 역행렬, 행렬식, eigenvalue 가지는 유일한 모양 |
| 직사각 | m ≠ n | 차원 변경 (예: 1024차원 → 256차원 projection) |
| 대각 | 대각 외 0 | 축별 스케일링; 곱셈이 대각 element-wise |
| 단위 | 대각 1, 그 외 0 | 곱셈 단위원 — |
| 영 | 전부 0 | 덧셈 단위원 — |
| 대칭 | 상관관계, 거리, 에너지에서 자주 등장 | |
| 희소 | 대부분 0 | 메모리 절약, 곱셈 가속 (대부분 셀이 죽었을 때) |
왜 신경 써야 해
대부분 만나게 됨. 단위 행렬은 역행렬 공식에서 등장. 대각 행렬은 스케일링과 SVD 곳곳에. 대칭 행렬은 많은 ML 알고리즘에서 eigenvalue decomposition 이 well-behaved 한 이유. 희소 행렬은 대형 추천 시스템과 그래프 신경망이 RAM 에 들어가는 유일한 이유.
Type hint, 수학 에디션. 행렬 유형 인식하면 어떤 연산이 싸고 어느 게 깨지는지 알 수 있음. 직사각 행렬에 역행렬 계산 X (존재 X); 희소 행렬을 dense 로 저장 X (OOM); 대칭 아닌데 대칭 가정 X.
import numpy as np
D = np.diag([2., 0.5, -1.]) v = np.array([10., 10., 10.])
print('D =') print(D) print('D @ v =', D @ v)