선형대수 5강. 특이값 분해와 저차원 근사
넷플릭스가 여러분의 취향을 아는 방식은, 거대한 표를 몇 개의 축으로 눌러 담는 것입니다.
풀고 시작
정사각형이 아니면 어쩌죠
앞 강에서 고유값과 고유벡터를 봤습니다. 행렬을 곱해도 방향이 바뀌지 않는 특별한 벡터가 있고, 그 벡터가 얼마나 늘어나는지가 고유값이었죠. 아름다운 도구입니다. 그런데 치명적인 제약이 하나 있습니다. 정사각행렬에만 정의됩니다.
현실의 데이터는 정사각형인 경우가 거의 없습니다. 사용자 1만 명이 영화 5천 편에 매긴 평점은 10000 × 5000 행렬이고, 문서 3만 건에 나타난 단어 5만 개는 30000 × 50000 행렬입니다. 고유값 분해는 여기서 아예 시작조차 못 합니다.
특이값 분해(SVD, singular value decomposition) 가 이 벽을 넘습니다. 어떤 행렬 A든 세 조각으로 쪼갤 수 있다는 정리입니다.
A = U Σ Vᵀ
가운데 Σ는 대각선에만 값이 있는 행렬이고, 그 값들을 특이값이라 부릅니다. 특이값은 언제나 0 이상이고 큰 것부터 차례로 놓입니다. 양옆의 U와 V는 서로 직교하는 축들의 모음입니다.
기하학적으로 읽으면 이렇습니다. 어떤 선형변환이든 회전, 축별 늘이기, 다시 회전의 세 단계로 분해된다. 아무리 복잡해 보이는 변환도 결국 돌리고 늘이고 다시 돌리는 것의 합성이라는 뜻이죠.
큰 것부터 몇 개만 남기면
특이값이 큰 것부터 정렬된다는 사실이 SVD를 실용의 도구로 만듭니다.
특이값이 100, 80, 60, 3, 2, 1, 0.5, ... 이렇게 나왔다고 해 봅시다. 앞의 셋이 나머지를 압도하죠. 이때 작은 것들을 0으로 만들어 버리고 앞의 셋만 남기면 원본과 거의 같으면서 훨씬 작은 행렬이 나옵니다. 이것을 저차원 근사(low-rank approximation) 라 합니다.
여기에 대단히 강한 정리가 붙습니다. 에카르트-영 정리입니다. 계수를 k로 제한한 모든 근사 가운데 SVD로 상위 k개만 남긴 것이 오차가 가장 작습니다. 더 잘하려야 할 수가 없다는 뜻이죠. 압축에서 이런 최적성 보장은 흔치 않습니다.
이미지를 예로 들면 감이 옵니다. 512 × 512 흑백 사진은 값 262,144개입니다. 상위 특이값 50개만 남기면 값 51,300개 정도로 줄어드는데, 눈으로 보면 원본과 구별하기 어렵습니다. 정보의 8할을 버렸는데도 그렇습니다. 사진에 담긴 구조가 몇 개의 강한 축에 몰려 있기 때문입니다.
주성분분석이 실은 SVD입니다
데이터 분석에서 가장 널리 쓰이는 차원축소 기법이 주성분분석(PCA) 입니다. 변수가 100개인 데이터를 2~3개 축으로 눌러 그림을 그리는 그 기법이죠.
PCA의 정체가 SVD입니다. 데이터에서 평균을 뺀 뒤 SVD를 걸면, V의 열들이 곧 주성분이고 특이값의 제곱이 각 주성분이 설명하는 분산입니다. "제1주성분이 전체 분산의 62%를 설명한다"는 문장은 첫 특이값의 제곱이 전체의 62%라는 말입니다.
그래서 PCA를 쓰면서 SVD를 모르면 왜 되는지를 모른 채 쓰게 됩니다. 주성분의 개수를 몇 개로 할지, 스케일링을 먼저 해야 하는지 같은 판단이 전부 특이값의 분포에서 나오기 때문입니다.
추천 시스템도 같은 원리입니다. 사용자와 영화의 평점 행렬을 저차원으로 근사하면, 그 축들이 "액션 취향", "잔잔한 드라마 취향" 같은 드러나지 않은 요인으로 해석됩니다. 아무도 그런 축을 정해 주지 않았는데 데이터가 스스로 드러낸 것이죠. 문서와 단어 행렬에 같은 짓을 하면 잠재의미분석(LSA) 이 되어 뜻이 비슷한 단어가 가까이 모입니다. 오늘날의 단어 임베딩이 딛고 선 자리가 여기입니다.
인출 문제
생각해볼 질문 (정답 없음)
- 저차원 근사가 버리는 것은 잡음일까요, 아니면 소수 집단의 진짜 신호일까요. 추천 시스템이 취향이 독특한 사람에게 잘 맞지 않는 이유를 여기서 생각해 보세요.