Frobenius 노름 입문
목표: 논문에서 나 “Frobenius norm으로 쟀다”는 문장을 만났을 때 무엇을 더하고 제곱근을 씌운 값인지 바로 떠올리고, 그 숫자가 크다·작다가 무슨 뜻인지 읽어 낼 수 있기.
행렬과 특이값이 낯설다면 Singular Value Decomposition (SVD)를 같이 펴 두면 좋다.
한 줄로 먼저
Frobenius 노름은 행렬의 모든 칸을 한 줄로 펼친 뒤, 그 긴 벡터의 길이를 잰 값이다.
이름은 독일 수학자 페르디난트 게오르크 프로베니우스(Ferdinand Georg Frobenius)에서 왔다. 읽을 때는 “프로베니우스 노름”이라고 읽는다.
0. 노름(norm)이 뭔가
노름은 “크기”를 재는 자다. 숫자 하나의 크기는 절댓값이고, 벡터의 크기는 화살표의 길이다.
벡터 의 길이는 피타고라스 정리로 다. 이것을 L2 노름 라고 부른다.
행렬도 “얼마나 큰가”를 물을 수 있다. 다만 행렬은 숫자가 2차원으로 놓여 있어서 재는 방법이 여러 가지다. Frobenius 노름은 그중 가장 단순한 방법이다. 2차원 배치를 무시하고 그냥 숫자 더미로 본다.
1. 손으로 한 번 계산하기
- 모든 칸을 제곱한다:
- 다 더한다:
- 제곱근을 씌운다:
이게 전부다. 를 라는 벡터로 펼쳐서 L2 길이를 잰 것과 똑같다.
코드로는 이렇게 쓴다.
import numpy as np
A = np.array([[1, 2], [3, 4]], dtype=float)
np.linalg.norm(A, "fro") # 5.477...
np.sqrt((A ** 2).sum()) # 같은 값
import torch
torch.linalg.matrix_norm(torch.tensor(A)) # 기본값이 'fro'2. 같은 값을 쓰는 세 가지 방법
논문은 같은 Frobenius 노름을 상황에 따라 다른 모양으로 쓴다. 셋 다 같은 값이라는 것만 알아 두면 수식을 읽다가 헷갈리지 않는다.
(1) 원소 제곱합
정의 그대로다.
(2) trace로 쓰기
의 대각선 번째 칸은 의 번째 열을 자기 자신과 내적한 값, 즉 그 열의 길이 제곱이다. 대각선을 다 더하면(trace) 모든 열의 길이 제곱을 더한 것이 되고, 이는 모든 원소의 제곱합과 같다.
이 모양은 미분할 때 편해서 최적화 논문에 자주 나온다. 예를 들어 다.
(3) 특이값으로 쓰기
는 의 특이값이다(Singular Value Decomposition (SVD)). 회전은 길이를 바꾸지 않으므로, SVD의 두 회전 를 떼어 내면 특이값만 남는다.
위의 예시에서 의 특이값은 약 와 이다. . 원소 제곱합과 같다.
대칭이고 고유값이 0 이상인 행렬(공분산 행렬, 커널 행렬 등)에서는 특이값이 곧 고유값이다. 그래서 로 쓰기도 한다.
3. 행렬끼리의 거리와 내적
거리
두 행렬이 얼마나 다른지는 차이의 Frobenius 노름으로 잰다.
같은 자리의 칸끼리 뺀 값을 제곱해서 더하고 제곱근을 씌운 것이다. 이미지 두 장의 픽셀 차이를 재는 것과 같은 계산이다.
크기가 다른 행렬끼리 비교할 때는 상대 오차 를 쓴다. 이 값이 0.01이면 “원래 크기의 1% 정도 어긋났다”는 뜻이다.
내적
벡터에 내적이 있듯 행렬에도 Frobenius 내적이 있다.
같은 자리끼리 곱해서 다 더한다. 자기 자신과 내적하면 가 된다. 이 내적으로 두 행렬의 cosine 유사도도 만들 수 있다.
4. 스펙트럴 노름과 무엇이 다른가 ❌(안 읽음)
행렬을 재는 또 하나의 대표적인 자가 스펙트럴 노름 다. 둘은 이름이 비슷하지만 묻는 질문이 다르다.
- Frobenius 노름: 행렬에 담긴 숫자의 “총량”은 얼마인가. 특이값 전부의 제곱합의 제곱근이다.
- 스펙트럴 노름: 이 행렬이 벡터를 가장 많이 늘리는 배율은 얼마인가. 가장 큰 특이값 하나다.
둘 사이에는 늘 이 관계가 성립한다. 은 행렬의 랭크다.
예시 행렬에서는 이다.
특이값 하나가 압도적이면 두 값이 거의 같다(위 예시가 그렇다). 특이값이 고르게 퍼져 있으면 Frobenius 노름이 훨씬 커진다. 그래서 비율은 “이 행렬이 몇 개의 방향에 고르게 힘을 쓰는가”를 대략 알려 준다.
곱의 부등식
두 행렬을 곱한 결과의 크기는 각자 크기의 곱을 넘지 못한다. 이 부등식 덕분에 라는 비율은 항상 0과 1 사이에 있다. 아래 6절의 Transformer Circuits 지표가 바로 이 비율이다.
5. 회전해도 값이 그대로다 ❌(안 읽음)
가 회전(또는 반사)을 나타내는 직교 행렬이면 다음이 성립한다.
좌표축을 어떻게 돌려 잡든 행렬의 “총량”은 변하지 않는다는 뜻이다. 신경망의 은닉 표현은 기저(좌표축)를 마음대로 돌려도 같은 정보를 담을 수 있다. 그래서 표현을 비교하는 지표가 이 성질을 가지면 기저 선택에 흔들리지 않는다.
6. 논문에서 만나는 곳
Weight decay
L2 정규화(weight decay)는 손실에 를 더한다. “가중치 행렬의 칸들이 너무 커지지 않게 하라”는 벌점이다. 가중치를 한 줄로 펼친 벡터의 L2 노름이 곧 Frobenius 노름이라서 같은 말이다.
저랭크 근사와 LoRA ❌(안 읽음)
행렬을 랭크 로 줄일 때 를 가장 작게 만드는 답은 SVD에서 큰 특이값 개만 남기는 것이다(Eckart–Young 정리). 이때 남는 오차는 버린 특이값으로 정확히 계산된다.
“상위 몇 개 특이값이 Frobenius 노름의 몇 %를 설명하는가”라는 문장은 이 식을 말한다. LoRA·모델 압축 논문에서 저랭크 근사가 얼마나 원본을 잘 보존하는지 볼 때 자주 쓴다.
표현 유사도 (CKA)
Linear CKA는 두 신경망 표현 (행은 같은 입력, 열은 각 모델의 특징)가 얼마나 닮았는지를 다음처럼 잰다.
분자는 두 표현의 교차공분산이 얼마나 큰지, 분모는 각자의 크기로 나눠 0~1로 맞추는 역할이다. Revisiting the Platonic Representation Hypothesis - An Aristotelian View가 다루는 “정규화된 교차공분산의 Frobenius 노름 제곱”도 같은 계열의 양이다.
Attention 헤드 조합 강도 ❌(안 읽음)
A Mathematical Framework for Transformer Circuits는 앞 헤드의 출력이 뒤 헤드의 입력에 얼마나 쓰이는지를 재려고 다음 비율을 쓴다.
4절의 곱의 부등식 때문에 이 값은 1을 넘지 않는다. 1에 가까울수록 두 행렬이 “같은 방향”을 쓰고 있어서 강하게 조합된다고 읽는다.
행렬 패턴 간 거리
A Mechanistic Analysis of Looped Reasoning Language Models는 서로 다른 층의 attention 행렬이 얼마나 닮았는지를 로 잰다. 3절의 거리 그대로다. 값이 작을수록 두 층의 attention 패턴이 비슷하다.
엔트로피 계산 지름길 ❌(안 읽음)
커널 행렬 의 고유값을 로 나눠 확률처럼 만들면, 2차 Rényi 엔트로피는 다음과 같다.
2절 (3)의 덕분에 고유값 분해 없이 원소 제곱합만으로 계산된다. Integrating Local and Global Entropy for Uncertainty Quantification in LLMs가 이 지름길을 쓴다.
7. 아주 짧은 암기
- = 모든 칸 제곱합의 제곱근 = 펼친 벡터의 길이
- (스펙트럴은 최대 배율, Frobenius는 총량)
- , 그래서 정규화한 비율은 0~1
- 회전해도 값이 변하지 않는다
입문자가 조심할 점
- 를 “원소 제곱합”으로 읽지 않는다. 행렬에서 는 보통 스펙트럴 노름()이다. 원소 제곱합은 다. 논문마다 표기가 다를 수 있으니 정의 문장을 먼저 찾는다.
- 제곱인지 아닌지 확인한다. weight decay, CKA, 엔트로피 식은 대부분 (제곱)를 쓴다. 제곱이 붙으면 값의 스케일이 크게 달라진다.
- 행렬 크기가 다르면 그대로 비교하지 않는다. 칸이 많을수록 노름이 커진다. 층이나 모델끼리 비교할 때는 상대 오차나 정규화된 비율을 쓴다.
- 코드의 기본값을 확인한다.
torch.linalg.norm은 2차원 입력에ord를 안 주면 Frobenius 노름을 돌려준다. 반면torch.linalg.matrix_norm(A, ord=2)는 스펙트럴 노름이다. 3차원 이상 텐서는 어느 축을 행렬로 볼지dim을 명시한다.
출처
- Golub, G. H. & Van Loan, C. F. (2013). Matrix Computations (4th ed.), §2.3 Matrix Norms. Johns Hopkins University Press.
- Horn, R. A. & Johnson, C. R. (2012). Matrix Analysis (2nd ed.), Ch. 5 Norms for Vectors and Matrices. Cambridge University Press.
- Eckart, C. & Young, G. (1936). The approximation of one matrix by another of lower rank. Psychometrika, 1(3), 211–218.
- Kornblith, S. et al. (2019). Similarity of Neural Network Representations Revisited. ICML. https://arxiv.org/abs/1905.00414
- Elhage, N. et al. (2021). A Mathematical Framework for Transformer Circuits. https://transformer-circuits.pub/2021/framework/index.html
- NumPy,
numpy.linalg.norm. https://numpy.org/doc/stable/reference/generated/numpy.linalg.norm.html - PyTorch,
torch.linalg.matrix_norm,torch.linalg.norm. https://pytorch.org/docs/stable/linalg.html