고유값 분해(Eigendecomposition)란? AI 행렬의 변하지 않는 방향을 찾는 방법
TL;DR
고유값 분해(Eigendecomposition)는 정사각행렬의 작용을 고유벡터라는 방향과 고유값이라는 방향별 배율로 풀어 나타내는 행렬 분해입니다. 행렬이 충분한 수의 독립적인 고유벡터를 가지면 고유벡터 행렬, 고유값 대각행렬과 그 역행렬의 곱으로 원래 행렬을 표현합니다. AI에서는 공분산 행렬을 이용한 PCA, 그래프의 스펙트럴 분석, 선형 변환의 안정성 점검에 쓰입니다. 모든 행렬이 고유값 분해되는 것은 아니며, 비대칭 실수 행렬은 복소수 결과를 낼 수 있습니다. 대칭 행렬에는 일반 eig보다 전용 eigh 연산을 쓰고 재구성 오차와 고유벡터의 비유일성을 함께 확인해야 합니다.
핵심 3줄 요약
- 핵심 1
방향과 배율을 찾습니다. 고유벡터는 행렬을 적용해도 방향이 유지되는 벡터이고 고유값은 그 방향이 늘거나 줄어드는 배율입니다. - 핵심 2
정사각행렬에 적용합니다. 독립적인 고유벡터가 차원만큼 있을 때 행렬을 고유벡터와 대각행렬로 분해할 수 있습니다. - 핵심 3
행렬 성질에 맞는 연산이 필요합니다. 실수 대칭 또는 복소수 에르미트 행렬이라면 eig보다 eigh가 알맞습니다.
이 글에서 다룰 내용
- 고유값 분해의 한 문장 정의
- 방향이 유지되는 쉬운 행렬 예시
- AI에서 고유값과 고유벡터가 중요한 이유
- 고유값 분해가 성립하는 조건과 계산 결과
- SVD·PCA·Schur 분해와의 차이
- 대칭성·복소수·수치 오차를 확인하는 순서
- AI 초보자가 자주 묻는 질문
고유값 분해를 한 문장으로 정의하면 무엇인가요?
고유값 분해는 정사각행렬이 바꾸지 않는 고유벡터의 방향과 각 방향의 배율인 고유값을 찾아 행렬의 작용을 대각 형태로 표현하는 분해입니다.
정사각행렬 A에 0이 아닌 벡터 v를 곱한 결과가 v의 방향을 유지한 채 λ배가 된다면 Av=λv입니다. 이때 v가 고유벡터이고 λ가 고유값입니다. 행렬이 공간을 회전하거나 늘리는 여러 작용 가운데 방향이 그대로 남는 축을 찾는 셈입니다.
n차원 행렬에 서로 독립적인 고유벡터가 n개 있다면 그 벡터를 열로 모은 행렬 V와 고유값을 대각선에 둔 행렬 Λ를 만들 수 있습니다. 그러면 A=VΛV⁻¹로 표현합니다. 이런 행렬을 대각화 가능하다고 부릅니다.
한 줄 정리: 고유값 분해는 행렬을 적용해도 방향이 유지되는 축과 그 축의 확대·축소 비율을 찾는 방법입니다.
쉬운 예시로 이해해 볼까요?
가로 방향 값을 3배로 늘리고 세로 방향 값은 그대로 두는 2×2 행렬을 생각해 보겠습니다. 대각선에 3과 1이 있고 나머지가 0인 행렬입니다.
- 가로 벡터 (1, 0)을 곱하면 (3, 0)이 됩니다. 방향은 같고 길이만 3배이므로 고유값은 3입니다.
- 세로 벡터 (0, 1)을 곱하면 (0, 1)이 됩니다. 방향과 길이가 그대로여서 고유값은 1입니다.
두 방향을 섞은 (1, 1)은 (3, 1)이 되어 원래 방향과 달라집니다. 따라서 이 벡터는 고유벡터가 아닙니다. 고유값 분해는 모든 벡터를 찾는 작업이 아니라 행렬의 작용을 가장 단순하게 설명하는 특별한 방향을 찾는 작업입니다.
쉬운 예시: 사진을 가로로만 세 배 늘렸을 때 가로축과 세로축은 방향이 유지됩니다. 고유값은 각 축이 얼마나 늘어났는지 알려 줍니다.
왜 AI에서 고유값 분해가 중요한가요?
데이터가 크게 퍼지는 방향을 설명합니다
PCA는 평균을 뺀 데이터의 공분산 행렬에서 고유벡터와 고유값을 구하는 방식으로 설명할 수 있습니다. 고유벡터는 데이터가 퍼지는 주성분 방향이고 고유값은 그 방향이 담는 분산의 크기입니다. 큰 고유값부터 보면 정보를 많이 담은 축을 찾기 쉽습니다.
그래프의 연결 구조를 읽습니다
추천 관계나 문서 연결망을 그래프로 나타내면 인접행렬이나 그래프 라플라시안 같은 정사각행렬이 생깁니다. 이 행렬의 고유값과 고유벡터는 연결 구조, 군집 후보, 확산 성질을 살피는 스펙트럴 방법의 재료가 됩니다.
선형 변환의 반복 거동을 살핍니다
같은 선형 변환을 여러 번 적용하면 절댓값이 큰 고유값에 대응하는 방향의 영향이 커질 수 있습니다. 고유값의 크기를 보면 반복 계산이 커지는지 줄어드는지 이해하는 데 도움이 됩니다. 다만 실제 신경망은 비선형 층과 정규화가 함께 있으므로 고유값 하나만으로 전체 모델의 안정성을 단정하지 않습니다.
핵심 인사이트: 고유값 분해는 행렬 자체보다 그 행렬이 특별한 방향마다 어떤 변화를 만드는지 읽게 해 줍니다.
고유값 분해는 어떻게 작동하나요?
1. 정사각행렬인지 확인합니다
고유값 문제 Av=λv는 입력과 출력 벡터가 같은 공간에 있어야 하므로 A는 행과 열의 수가 같은 정사각행렬이어야 합니다. 직사각행렬을 방향과 크기로 나누려면 일반적으로 SVD를 사용합니다.
2. 고유값과 고유벡터 쌍을 구합니다
NumPy의 eig는 일반 정사각행렬에서 고유값과 오른쪽 고유벡터를 계산합니다. 반환된 고유벡터 행렬의 i번째 열은 i번째 고유값에 대응합니다. 고유값의 순서는 보장되지 않으므로 필요한 기준에 따라 직접 정렬하고 고유벡터 열도 같은 순서로 옮겨야 합니다.
3. 독립적인 축이 충분한지 봅니다
고유벡터가 차원만큼 선형 독립이면 V가 역행렬을 가지며 대각화가 성립합니다. 고유값이 모두 다르면 이 조건을 만족하지만, 고유값이 반복된다고 언제나 실패하는 것은 아닙니다. 반복 고유값에 대응하는 독립적인 고유벡터가 충분한지가 중요합니다.
4. 원래 행렬과 다시 비교합니다
계산 뒤에는 각 열에 대해 A와 고유벡터의 곱이 고유값과 고유벡터의 곱에 가까운지 확인합니다. 대각화가 가능한 경우 VΛV⁻¹로 재구성한 값도 원래 A와 비교합니다. 부동소수점 연산에는 반올림 오차가 있으므로 완전한 같음보다 허용 오차 안의 근접성을 봅니다.
실전 팁: 고유값만 필요하다면 고유벡터까지 계산하는 함수보다 전용 함수가 알맞을 수 있습니다. 사용하는 라이브러리의 eigvals 또는 eigvalsh 문서를 확인하세요.
대칭 행렬에서는 무엇이 달라지나요?
고유값이 실수이고 축이 직교합니다
실수 대칭 행렬이나 복소수 에르미트 행렬의 고유값은 실수입니다. 정규화한 고유벡터를 서로 직교하게 고를 수 있어 고유벡터 행렬 Q의 역행렬이 전치행렬 또는 켤레전치행렬과 같습니다. 실수 대칭 행렬의 분해는 A=QΛQᵀ처럼 더 단순한 형태가 됩니다.
eig보다 eigh를 사용합니다
NumPy·SciPy·PyTorch는 대칭 또는 에르미트 행렬을 위한 eigh를 제공합니다. 이 함수는 행렬의 위쪽이나 아래쪽 삼각 부분을 기준으로 계산하며 고유값을 오름차순으로 반환합니다. 공분산 행렬처럼 대칭성이 보장되는 입력이라면 일반 eig보다 행렬 성질에 맞는 연산을 선택합니다.
입력의 대칭성을 직접 확인합니다
일부 eigh 구현은 입력이 실제로 대칭인지 내부에서 검사하지 않습니다. 한쪽 삼각 부분만 사용하므로 비대칭 입력을 넣어도 오류 대신 의도와 다른 결과가 나올 수 있습니다. 데이터 처리 뒤 A와 A의 전치행렬이 허용 오차 안에서 가까운지 먼저 봅니다.
고유값 분해와 헷갈리는 용어는 무엇이 다른가요?
특이값 분해(SVD)와 고유값 분해의 차이
SVD는 행과 열의 수가 다른 행렬에도 적용하며 왼쪽 특이벡터, 음수가 아닌 특이값, 오른쪽 특이벡터로 나눕니다. 고유값 분해는 정사각행렬을 대상으로 하고 일반 실수 행렬에서도 복소수 고유값과 고유벡터가 나올 수 있습니다.
둘은 관련이 있지만 같은 분해가 아닙니다. SVD의 오른쪽 특이벡터와 특이값은 A의 전치행렬과 A를 곱한 대칭 행렬의 고유값 문제와 연결됩니다. 그렇다고 직사각행렬 A 자체를 고유값 분해했다고 말하면 안 됩니다.
PCA와 고유값 분해의 차이
PCA는 중심화한 데이터에서 분산이 큰 새 축을 찾는 차원 축소 방법입니다. 공분산 행렬의 고유값 분해는 PCA를 계산하는 한 방법입니다. PCA는 데이터 중심화와 성분 선택, 투영까지 포함하지만 고유값 분해는 주어진 정사각행렬을 분석하는 수학 연산입니다.
Schur 분해와 고유값 분해의 차이
대각화되지 않는 정사각행렬도 Schur 분해로 상삼각행렬 형태에 가깝게 나타낼 수 있습니다. NumPy 문서는 비에르미트 정규행렬에서 유니터리 고유벡터가 필요한 경우 SciPy의 Schur 분해를 고려하라고 안내합니다. 목적이 고유벡터 자체인지 안정적인 행렬 분해인지에 따라 도구가 달라집니다.
비교 정리: 고유값 분해는 정사각행렬의 불변 방향, SVD는 모든 형태의 행렬에서 좌우 방향과 크기, PCA는 중심화한 데이터의 분산 축을 다룹니다.
실전에서는 어디에 쓰이나요?
PCA의 주성분과 설명 분산 계산
수치 특징을 평균 중심화한 뒤 공분산 행렬을 만들고 고유값 분해를 적용할 수 있습니다. 큰 고유값에 대응하는 고유벡터를 주성분으로 골라 데이터를 적은 축에 투영합니다. 특징 수가 매우 많거나 희소한 데이터에서는 공분산 행렬을 직접 만들지 않고 SVD를 쓰는 구현도 비교합니다.
그래프 기반 군집과 임베딩
사용자·상품·문서의 연결을 그래프로 만든 뒤 라플라시안 행렬의 일부 고유벡터를 새 좌표로 사용할 수 있습니다. 스펙트럴 클러스터링과 그래프 임베딩에서 가까운 연결 구조를 드러내는 데 쓰입니다. 그래프 구성과 정규화 방식이 달라지면 결과도 바뀝니다.
공분산·곡률 행렬의 방향 분석
모델 학습과 해석에서는 공분산, 상관, 헤시안 근사처럼 대칭인 정사각행렬의 큰 고유값과 대응 방향을 살피기도 합니다. 어떤 방향에서 변화가 큰지 요약하는 용도입니다. 큰 행렬은 전체 분해 비용이 크므로 필요한 일부 고유쌍만 구하는 반복 알고리즘을 검토합니다.
실전 팁: 전체 고유벡터가 아니라 가장 큰 몇 개만 필요하다면 전체 분해부터 실행하지 말고 부분 고유값 문제를 지원하는 라이브러리 함수를 확인하세요.
구현할 때 어떤 순서로 확인하나요?
1. 행렬의 의미와 모양을 확인합니다
행과 열이 같은 대상을 나타내는 정사각행렬인지 봅니다. 공분산, 상관, 라플라시안처럼 행렬이 어떤 계산에서 생겼는지 기록해야 고유값의 의미도 올바르게 해석할 수 있습니다.
2. 대칭성과 자료형을 점검합니다
실수 대칭 또는 복소수 에르미트 행렬인지 허용 오차로 확인합니다. 대칭이면 eigh를 선택하고, 일반 행렬이면 복소수 결과가 나올 수 있도록 후속 코드와 저장 형식을 준비합니다. NaN과 무한대도 계산 전에 찾습니다.
3. 정렬 기준과 부호 규칙을 정합니다
일반 eig의 반환 순서는 보장되지 않습니다. 고유값을 크기나 절댓값으로 정렬했다면 대응 고유벡터 열도 함께 옮깁니다. 고유벡터는 부호나 복소수 위상을 바꿔도 같은 해일 수 있으므로 원소별 동일성보다 부분공간과 재구성 결과를 비교합니다.
4. 잔차와 조건을 검증합니다
각 고유쌍의 잔차 Av-λv와 전체 재구성 오차를 계산합니다. 서로 가까운 고유값이 있으면 작은 입력 변화에도 개별 고유벡터가 크게 바뀔 수 있습니다. 학습 과정에서 고유벡터를 미분한다면 고유값 간격이 좁을 때 기울기가 불안정할 수 있다는 PyTorch 경고도 확인합니다.
한 줄 정리: 행렬 모양, 대칭성, 자료형, 정렬, 잔차를 차례로 확인하면 함수가 값을 반환했다는 사실보다 결과의 의미를 제대로 검증할 수 있습니다.
사용할 때 무엇을 주의해야 하나요?
첫째, 모든 정사각행렬이 대각화된다고 가정하지 않습니다. 독립적인 고유벡터가 차원만큼 없는 결함 행렬은 V의 역행렬을 이용한 완전한 고유값 분해가 성립하지 않습니다.
둘째, 실수 입력에서 복소수 결과를 버리지 않습니다. 일반 비대칭 실수 행렬의 고유값과 고유벡터는 복소수가 될 수 있습니다. 허수부를 근거 없이 제거하면 재구성이 깨집니다.
셋째, 고유벡터 원소를 그대로 비교하지 않습니다. 같은 고유벡터도 부호나 복소수 위상이 달라질 수 있으며 반복 고유값에서는 기저 자체가 달라질 수 있습니다. 벡터가 만드는 부분공간과 잔차를 봅니다.
넷째, 대칭 전용 함수에 비대칭 입력을 넣지 않습니다. eigh가 대칭성을 검사하지 않는 구현도 있으므로 호출 전에 입력을 확인하고 오차 원인이 데이터인지 계산인지 구분합니다.
다섯째, 큰 행렬에서 전체 분해 비용을 먼저 계산합니다. 일부 큰 고유값만 필요하다면 부분 분해나 반복 방법을 사용하고 메모리, 계산 시간, 수렴 여부를 함께 기록합니다.
주의: 고유값이 계산됐다는 사실만으로 AI 모델의 원인이나 중요한 특징이 증명되지는 않습니다. 행렬을 만든 데이터와 전처리, 해석 목적을 함께 확인해야 합니다.
자주 묻는 질문
Q1. 고유값과 고유벡터는 무엇이 다른가요?
고유벡터는 행렬을 곱해도 방향이 유지되는 0이 아닌 벡터입니다. 고유값은 그 방향에서 벡터의 크기와 부호가 얼마나 바뀌는지 나타내는 배율입니다. 둘은 한 쌍으로 해석합니다.
Q2. 고유값 분해는 직사각행렬에도 적용할 수 있나요?
아닙니다. 일반 고유값 문제는 정사각행렬을 대상으로 합니다. 행과 열의 수가 다른 행렬이라면 SVD를 사용하거나 A의 전치행렬과 A를 곱해 만든 정사각행렬의 고유값 문제를 다룹니다.
Q3. eig와 eigh 중 무엇을 써야 하나요?
일반 정사각행렬에는 eig를 씁니다. 실수 대칭 행렬이나 복소수 에르미트 행렬에는 그 성질을 이용하는 eigh를 사용합니다. eigh를 쓰기 전에는 입력이 실제로 대칭 또는 에르미트인지 확인합니다.
Q4. 고유벡터의 부호가 실행마다 달라도 오류인가요?
오류라고 단정할 수 없습니다. 실수 고유벡터 v가 해라면 -v도 같은 고유값의 해입니다. 복소수에서는 위상도 달라질 수 있습니다. 부호보다 Av=λv의 잔차와 필요한 부분공간이 같은지 확인합니다.
Q5. 고유값이 모두 다르면 반드시 분해할 수 있나요?
네. n차원 정사각행렬에 서로 다른 고유값이 n개 있으면 대응 고유벡터가 선형 독립이어서 대각화할 수 있습니다. 고유값이 반복되더라도 독립적인 고유벡터가 충분하면 분해할 수 있습니다.
Q6. PCA는 항상 고유값 분해로 계산하나요?
아닙니다. 공분산 행렬을 고유값 분해할 수도 있고 중심화한 데이터 행렬에 SVD를 적용할 수도 있습니다. 데이터 모양, 희소성, 필요한 성분 수와 수치 안정성에 따라 구현이 달라집니다.
출처
마무리
고유값 분해는 정사각행렬의 작용을 방향이 유지되는 고유벡터와 방향별 배율인 고유값으로 나눠 이해하는 방법입니다. PCA의 공분산 분석, 그래프의 스펙트럴 방법과 선형 변환의 거동을 읽을 때 중요한 기초가 됩니다.
초보자라면 네 가지를 기억하면 충분합니다. 정사각행렬인지 확인하고, 대칭이면 eigh를 쓰며, 모든 행렬이 대각화되는 것은 아니라는 점을 알아두세요. 마지막으로 고유벡터의 부호보다 Av=λv의 잔차와 재구성 오차를 확인하면 계산 결과를 더 안전하게 해석할 수 있습니다.
