Frobenius 노름 입문

목표: 논문에서 나 “Frobenius norm으로 쟀다”는 문장을 만났을 때 무엇을 더하고 제곱근을 씌운 값인지 바로 떠올리고, 그 숫자가 크다·작다가 무슨 뜻인지 읽어 낼 수 있기.

행렬과 특이값이 낯설다면 Singular Value Decomposition (SVD)를 같이 펴 두면 좋다.


한 줄로 먼저

Frobenius 노름은 행렬의 모든 칸을 한 줄로 펼친 뒤, 그 긴 벡터의 길이를 잰 값이다.

이름은 독일 수학자 페르디난트 게오르크 프로베니우스(Ferdinand Georg Frobenius)에서 왔다. 읽을 때는 “프로베니우스 노름”이라고 읽는다.


0. 노름(norm)이 뭔가

노름은 “크기”를 재는 자다. 숫자 하나의 크기는 절댓값이고, 벡터의 크기는 화살표의 길이다.

벡터 의 길이는 피타고라스 정리로 다. 이것을 L2 노름 라고 부른다.

행렬도 “얼마나 큰가”를 물을 수 있다. 다만 행렬은 숫자가 2차원으로 놓여 있어서 재는 방법이 여러 가지다. Frobenius 노름은 그중 가장 단순한 방법이다. 2차원 배치를 무시하고 그냥 숫자 더미로 본다.


1. 손으로 한 번 계산하기

  1. 모든 칸을 제곱한다:
  2. 다 더한다:
  3. 제곱근을 씌운다:

이게 전부다. 를 라는 벡터로 펼쳐서 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을 명시한다.

출처