15장 - PCA와 ICA
15장. PCA와 ICA
주성분 분석(PCA)은 오래되었지만 여전히 유용한 고전적 학습 알고리즘이다. 그러나 PCA를 실제로 사용해야 할 때와 사용하지 말아야 할 때를 구분하는 것이 중요하다. 오늘은 PCA의 유도와 응용을 다루고, 독립 성분 분석(ICA)의 문제 설정까지 소개한다.
15.1 인자 분석에서 PCA로
지난 강의에서 다룬 인자 분석(factor analysis) 알고리즘은 고차원 데이터가 저차원 부분공간 위에 놓여 있다고 가정하고, 확률적 모델 \(p(x)\)를 구축하는 방법이었다. 예를 들어 100차원 데이터에 30개의 예제만 있는 경우, 인자 분석은 고차원 공간에서 저차원 부분공간에 대응하는 고차원 가우시안을 모델링했다.
오늘 배울 **주성분 분석(PCA, Principal Components Analysis)**은 확률적 방법이 아니다. \(p(x)\)를 모델링하지 않지만, 데이터가 저차원 부분공간 위에 놓여 있다면 그 부분공간이 무엇인지 파악하고 데이터의 차원을 줄일 수 있게 해 준다.
15.2 PCA의 직관적 이해
동기 부여 예시
PCA를 이해하기 위해 몇 가지 구체적인 예시를 살펴보자.
예시 1: 어린이 키 측정
어린이 학교를 운영하면서 같은 달에 아이들의 키를 센티미터와 인치로 동시에 측정했다고 하자. 반올림 오차 때문에 두 측정값은 거의 완벽하게 상관되어 있지만 완전히 일치하지는 않는다. 이 데이터는 2차원(\(n = 2\))이지만, 본질적으로는 1차원 데이터가 2차원 공간에 놓여 있는 것이다. 센티미터든 인치든 결국 같은 것, 즉 아이의 키를 측정하고 있기 때문이다.
PCA는 데이터가 실제로 변동하는 방향, 즉 대각선 방향의 **주요 변동 축(principal axis of variation)**을 찾아낸다. 아이가 크거나 작다는 정보가 이 축을 따라 표현되고, 직교하는 방향에는 약간의 노이즈만 존재한다. 데이터를 이 주요 변동 축에 투영하면 2차원 데이터를 1차원으로 줄일 수 있으며, 그 결과는 노이즈가 제거된, 더 깨끗한 키 추정값이 된다.
예시 2: 공장 진동 센서
공장의 대형 기계에 서로 다른 제조사의 진동 센서 두 개를 부착했다고 하자. 두 센서 모두 기계의 흔들림 정도를 측정하고 있으므로, 2차원 데이터를 1차원으로 줄이는 것이 합리적이다. 세탁기가 고장 나기 전에 흔들림 패턴이 변하는 것처럼, 진동 센서 데이터는 예방 정비(preventive maintenance)에 활용할 수 있다.
예시 3: 헬리콥터 조종사
스탠퍼드에서 자율 헬리콥터를 날리며 일한 경험을 예로 들면, \(x\)축에 조종사의 기술(skill), \(y\)축에 조종사의 즐거움(enjoyment)을 측정했다고 하자. 이 두 변수는 사실 "조종 적성(pilot aptitude)"이라는 하나의 잠재 요인에 의해 결정될 수 있다. 적성이 높은 조종사는 더 많이 연습하고, 더 숙련되며, 더 즐거워하기 때문이다. PCA를 사용하면 이 2차원 데이터를 1차원으로 투영할 수 있다.
이 예시들은 모두 저차원이지만, 실제로는 10,000차원 데이터를 100차원이나 1,000차원으로 줄이는 것이 일반적이다. 2차원에서 1차원으로 줄이는 일은 칠판의 제약 때문에 설명용으로 사용할 뿐, 실무에서는 거의 하지 않는다.
15.3 전처리: 평균 제거와 분산 정규화
PCA를 실행하기 전에, 그리고 사실 많은 지도 학습 알고리즘을 실행하기 전에도, 다음과 같은 전처리를 수행한다.
- 평균 제거: 각 특성의 평균 \(\mu_j\)를 계산하고, 모든 예제에서 평균을 뺀다.
- 분산 정규화: 각 특성 \(j\)의 분산 \(\sigma_j^2\)를 계산하고, 표준편차 \(\sigma_j\)로 나눈다.
이 전처리를 거치면 각 특성의 평균은 0, 분산은 1이 된다.
왜 평균을 빼야 하는가? 데이터가 원점에서 멀리 떨어진 곳에 몰려 있으면, PCA는 원점에서 데이터 덩어리로 향하는 방향을 주요 변동 축으로 잘못 선택한다. 평균을 빼면 데이터가 원점 주변에 정렬되어, 데이터 자체의 변동 방향을 올바르게 포착할 수 있다.
왜 분산을 정규화해야 하는가? 축의 단위가 매우 다를 경우(예: 한쪽은 센티미터, 다른 쪽은 킬로미터), 데이터가 한 축으로 극단적으로 늘어져서 PCA가 그 축만을 주요 변동 축으로 선택하게 된다. 분산을 정규화하면 이 문제를 방지할 수 있다.
15.4 PCA의 수학적 유도
두 가지 직관
PCA를 유도하는 방법은 두 가지가 있으며, 둘은 수학적으로 동치이다.
- 투영 거리 최소화: 데이터 점을 어떤 직선(부분공간)에 직교 투영할 때, 원래 점과 투영된 점 사이의 제곱 거리의 합을 최소화하는 직선을 찾는다.
- 투영 분산 최대화: 데이터 점을 어떤 직선에 투영할 때, 투영된 점들이 가능한 한 넓게 퍼지도록(분산이 최대가 되도록) 하는 직선을 찾는다.
첫 번째 직관에서는 투영 거리가 작을수록 좋고, 두 번째 직관에서는 투영된 점들의 분산이 클수록 좋다. 피타고라스 정리에 의해 이 두 기준은 동치이다. 강의에서는 두 번째 직관을 사용하여 유도하고, 첫 번째 직관과의 동치성은 과제에서 직접 증명한다.
실제로 PCA를 유도하는 동치적인 방법은 11가지가 있다는 논문도 있다. 여기서 다루는 두 가지는 그중 가장 대표적인 것이다.
최적화 문제 정의
단위 벡터 \(u\)(\(\|u\| = 1\))를 찾아, 데이터를 \(u\) 방향으로 투영했을 때 투영값의 분산을 최대화하고자 한다.
단위 벡터 \(u\) 위로의 \(x^{(i)}\)의 투영 길이는 \(u^T x^{(i)}\)이다. 따라서 최적화 문제는 다음과 같다.
\[\max_{\|u\| = 1} \frac{1}{m} \sum_{i=1}^{m} \left( u^T x^{(i)} \right)^2\]
공분산 행렬과 고유벡터
이 목적 함수를 전개하면 다음과 같다.
\[\frac{1}{m} \sum_{i=1}^{m} \left( u^T x^{(i)} \right)^2 = \frac{1}{m} \sum_{i=1}^{m} u^T x^{(i)} (x^{(i)})^T u = u^T \left( \frac{1}{m} \sum_{i=1}^{m} x^{(i)} (x^{(i)})^T \right) u\]
괄호 안의 행렬을 \(\Sigma\)로 정의한다.
\[\Sigma = \frac{1}{m} \sum_{i=1}^{m} x^{(i)} (x^{(i)})^T\]
이 행렬은 평균을 0으로 만들고 분산을 정규화한 후의 데이터의 **공분산 행렬(covariance matrix)**이다. (공분산 행렬을 나타내는 기호 \(\Sigma\)와 합산 기호 \(\sum\)이 동일하지만, 문맥으로 구분할 수 있다.)
따라서 최적화 문제는 다음과 같이 정리된다.
\[\max_{\|u\| = 1} u^T \Sigma u\]
라그랑주 승수법을 통한 풀이
제약 조건 \(\|u\| = 1\), 즉 \(u^T u = 1\)이 있는 최적화 문제를 풀기 위해 라그랑주 승수법을 적용한다. 라그랑지안을 구성하면:
\[\mathcal{L}(u, \lambda) = u^T \Sigma u - \lambda(u^T u - 1)\]
\(u\)에 대해 미분하고 0으로 놓으면:
\[\nabla_u \mathcal{L} = \Sigma u - \lambda u = 0\]
\[\Sigma u = \lambda u\]
이것은 바로 \(u\)가 \(\Sigma\)의 **고유벡터(eigenvector)**이고, \(\lambda\)가 대응하는 **고유값(eigenvalue)**이라는 의미이다. 목적 함수 \(u^T \Sigma u = u^T \lambda u = \lambda\)이므로, 분산을 최대화하려면 가장 큰 고유값에 대응하는 고유벡터, 즉 **주 고유벡터(principal eigenvector)**를 선택해야 한다.
결론
데이터를 가장 잘 근사하는 1차원 부분공간을 찾으려면, 공분산 행렬 \(\Sigma\)의 주 고유벡터가 지정하는 방향을 선택하라.
15.5 \(K\)차원으로의 확장
데이터를 \(K\)차원으로 투영하려면, 공분산 행렬 \(\Sigma\)의 상위 \(K\)개 고유벡터 \(u_1, u_2, \ldots, u_K\)를 선택한다. 대응하는 고유값은 \(\lambda_1 \geq \lambda_2 \geq \cdots \geq \lambda_K\)이다.
새로운 표현
1,000차원 데이터를 10차원으로 줄이는 경우(\(K = 10\)), 각 훈련 예제 \(x^{(i)}\)는 다음과 같이 10개의 숫자로 표현된다.
\[y^{(i)} = \begin{bmatrix} u_1^T x^{(i)} \\ u_2^T x^{(i)} \\ \vdots \\ u_K^T x^{(i)} \end{bmatrix}\]
복원
압축된 표현 \(y^{(i)}\)에서 원래 공간으로 되돌리려면 다음 근사식을 사용한다.
\[x^{(i)} \approx y_1^{(i)} u_1 + y_2^{(i)} u_2 + \cdots + y_K^{(i)} u_K\]
이 복원된 벡터는 원래 \(n\)차원 공간에서의 \(K\)차원 부분공간 위의 점이다. 앞의 어린이 키 예시에서, \(x \in \mathbb{R}^2\)를 \(y \in \mathbb{R}\)로 압축한 후 다시 복원하면, 복원된 모든 점은 직선 위에 놓이게 된다.
훈련 세트와 테스트 세트
PCA에서 고유벡터는 훈련 세트에서만 한 번 계산한다. 테스트 세트에 대해 별도의 고유벡터를 구하지 않는다. 훈련 세트에서 구한 동일한 \(u_1, \ldots, u_K\)를 사용하여 테스트 데이터를 저차원 공간으로 매핑한다.
고유벡터의 직교성
\(\Sigma\)는 대칭 양의 준정치(symmetric positive semi-definite) 행렬이므로, 그 고유벡터들은 서로 직교한다. 따라서 \(u_1, \ldots, u_K\)는 \(K\)차원 부분공간의 **직교 기저(orthogonal basis)**를 형성한다. 대부분의 수치 선형대수 라이브러리(예: NumPy)는 고유벡터를 고유값의 내림차순으로 정렬하여 반환하므로, 상위 \(K\)개를 그대로 취하면 된다.
15.6 PCA의 응용
좋은 응용 1: 시각화
고차원 데이터를 2차원이나 3차원으로 투영하여 시각화하는 것은 PCA의 대표적인 좋은 활용 사례이다.
스탠퍼드의 한 학생이 이 강좌에서 PCA를 배운 후 신경과학 연구에 적용한 사례가 있다. 원숭이의 뇌에 50개의 전극을 꽂아 뇌 활동을 측정하면 50차원 시계열 데이터가 생긴다. 이 데이터를 직접 시각화하는 것은 불가능하다. PCA를 사용하여 50차원에서 3차원으로 줄이자, 원숭이가 터치스크린의 목표물에 손을 뻗는 과제를 수행할 때 뇌 상태가 어떻게 변화하는지 시각화할 수 있었다. 목표물이 나타나면 뇌가 계획 상태로 전환되고, "출발" 신호가 주어지면 뇌 상태가 실행 상태로 이동하는 궤적을 2차원 또는 3차원 공간에서 실제로 관찰할 수 있었다. 이 결과는 신경과학 분야의 획기적 성과가 되었다.
좋은 응용 2: 학습 알고리즘의 효율성을 위한 압축
대부분의 고차원 데이터는 저차원 부분공간 위에 잘 근사된다. 예를 들어 10,000차원 데이터는 1,000차원 부분공간으로 충분히 근사될 가능성이 높다. 서포트 벡터 머신과 같은 학습 알고리즘에 10,000차원 데이터를 그대로 입력하면, 훈련 과정 내내 10,000차원 벡터를 처리해야 한다. 그러나 PCA로 1,000차원으로 압축하면, 메모리 대역폭, 네트워크 대역폭, 계산 속도 모든 면에서 훨씬 효율적으로 학습 알고리즘을 실행할 수 있다.
의문스러운 응용 1: 과적합 방지
"PCA로 10,000차원을 1,000차원으로 줄이면, 로지스틱 회귀가 과적합할 가능성이 줄어들지 않을까?"라고 생각할 수 있다. 실제로 시도하면 절반 정도의 경우에는 효과가 있고, 나머지 절반에서는 실패한다. 문제는 효과가 있었던 절반의 경우에만 논문이 출판되어, 마치 이 방법이 잘 작동하는 것처럼 보인다는 것이다. 과적합을 방지하려면 PCA 대신 **정규화(regularization)**를 사용하는 것을 권한다.
의문스러운 응용 2: 이상치 탐지와 거리 기반 매칭
초기 얼굴 인식 연구에서는, 두 얼굴 사진이 같은 사람인지 판별하기 위해 픽셀 공간에서 유클리드 거리를 측정하는 대신, PCA로 차원을 줄인 후 축소된 공간에서 거리를 측정하면 노이즈가 줄어들어 더 좋은 결과를 얻을 수 있다는 이론이 있었다. 100x100 픽셀 이미지는 10,000차원 벡터이고, 이를 1,000차원으로 줄여 거리를 측정하는 방식이다. 그러나 이 방법도 때로는 운이 좋으면 약간 나아지지만, 신뢰할 수 있는 결과를 보장하지는 않는다.
PCA 사용에 대한 조언
학습 알고리즘의 일부로 PCA를 사용하여 데이터를 10,000차원에서 1,000차원으로 줄이기 전에, 먼저 원본 데이터 \(x^{(i)}\)를 그대로 사용해 보고 알고리즘의 성능을 확인하라. 속도를 높이거나 메모리 사용량을 줄여야 하는 경우가 아니라면, PCA를 불필요하게 추가하지 말라. 이것은 "조기 최적화(premature optimization)"와 비슷한 문제이다.
15.7 주성분 개수 \(K\)의 선택
고유값 \(\lambda_1 \geq \lambda_2 \geq \cdots \geq \lambda_n\)에 대해, 다음 비율을 계산한다.
\[\frac{\sum_{i=1}^{K} \lambda_i}{\sum_{i=1}^{n} \lambda_i}\]
이 값이 예컨대 0.9라면, "\(K\)차원 부분공간이 데이터 분산의 90%를 유지한다"라고 말한다. 논문에서 "PCA를 사용하여 10,000차원에서 1,000차원으로 줄였으며, 이 부분공간이 데이터 분산의 90%를 유지한다"라고 쓰여 있다면, 바로 이 비율을 의미한다.
분산은 모든 예제가 영벡터일 때(분산이 0일 때)와 비교하여, 데이터가 얼마나 변동하는지를 나타낸다. 따라서 이 비율은 "신호의 몇 퍼센트를 보존하고, 몇 퍼센트를 버렸는가"를 나타낸다.
실무에서 흔히 사용하는 기준은 다음과 같다.
유지 분산 비율 |
사용 빈도 |
|---|---|
90% |
흔함 |
95% |
흔함 |
98~99% |
흔함 |
매우 고차원 데이터의 경우, 데이터 크기를 10배 줄이면서도 분산의 95%를 유지하는 것은 전혀 드문 일이 아니다.
15.8 네 가지 비지도 학습 알고리즘의 비교
지금까지 배운 네 가지 비지도 학습 알고리즘을 두 가지 기준으로 분류할 수 있다.
저차원 부분공간 가정 |
클러스터(군집) 가정 |
|
|---|---|---|
확률적 (\(p(x)\) 모델링) |
인자 분석 (Factor Analysis) |
가우시안 혼합 모델 (Mixture of Gaussians) |
비확률적 |
PCA |
K-평균 (K-means) |
- 확률적 모델은 밀도 추정과 이상치 탐지에 유용하다.
- 비확률적 모델은 데이터 압축, 시각화, 인간의 데이터 이해에 유용하다.
- EM 알고리즘은 잠재 변수 \(z\)가 있는 모델 \(p(x, z)\)에서 \(p(x)\)를 추정하는 기법이며, 인자 분석과 가우시안 혼합 모델 모두에 적용된다. 인자 분석에서는 \(z\)가 연속(가우시안)이고, 가우시안 혼합에서는 \(z\)가 이산적이다.
고유벡터의 수치적 불안정성
PCA의 개별 고유벡터를 해석하려는 시도에 대해 한 가지 주의할 점이 있다. 3차원 데이터가 대략 2차원 평면 위에 있을 때, \(u_1\)과 \(u_2\)가 그 평면의 기저를 이룬다. 그러나 데이터를 아주 미세하게 변경하면(소수점 다섯째 자리 수준의 변화), 고유벡터가 크게 달라질 수 있다. 반면, 상위 \(K\)개 고유벡터가 span하는 부분공간 자체는 안정적이다. 따라서 개별 고유벡터를 직접 해석하려는 시도는 연구자의 "환상(hallucination)"에 가까울 수 있으므로 주의해야 한다.
PCA의 과적합 가능성
PCA가 과적합하는 경우는 매우 드물다. 과적합이 발생할 수 있는 유일한 상황은 \(K\)(주성분 개수)와 \(m\)(훈련 예제 수)이 너무 비슷한 경우이다. 예를 들어 10,000차원의 1,000차원 부분공간을 구하려 하는데 훈련 예제가 1,000개뿐이라면, PCA가 데이터의 변동을 제대로 포착하지 못할 수 있다.
15.9 독립 성분 분석(ICA) 소개
PCA가 데이터의 **주성분(principal components)**을 찾는다면, ICA는 데이터의 **독립적인 변동 축(independent axes of variation)**을 찾는다.
칵테일 파티 문제
ICA를 동기부여하는 가장 유명한 문제는 **칵테일 파티 문제(cocktail party problem)**이다.
파티에서 여러 사람이 동시에 대화하고 있다고 하자. 방에 두 개의 마이크를 설치하면, 각 마이크는 두 화자의 목소리가 겹친 선형 결합을 녹음한다. 화자 1의 목소리는 두 마이크에 모두 도달하고, 화자 2의 목소리도 마찬가지이다. 각 마이크에는 두 목소리가 서로 다른 비율로 섞여 들어간다.
이 상황에서 ICA 알고리즘에 두 마이크의 녹음을 비지도 학습 데이터로 입력하면, ICA는 이 오디오 데이터가 두 독립적인 화자에 의해 가장 잘 설명된다는 것을 파악하고, 두 화자의 목소리를 분리해 낸다. 과제에서는 5명의 화자와 5개의 겹치는 목소리를 분리하는 ICA를 직접 구현한다.
음원의 수학적 모델
소리란 공기 압력의 미세한 변화이며, 마이크는 이 변화를 시간에 따라 기록한다. 순수한 사인파 형태의 소리는 소리굽쇠의 소리에 해당하고, 실제 음성은 훨씬 복잡한 파형을 갖는다.
ICA에서는 데이터가 다음과 같은 음원(source) \(s \in \mathbb{R}^n\)에 의해 생성된다고 가정한다(\(n\)은 화자의 수).
\[s_{ij} = \text{시각 } i\text{에서 화자 } j\text{의 신호}\]
혼합 모델
관측 데이터 \(x^{(i)}\)는 음원 \(s^{(i)}\)에 혼합 행렬(mixing matrix) \(A\)를 곱한 것이다.
\[x^{(i)} = A s^{(i)}\]
여기서 \(x_{ij}\)는 시각 \(i\)에서 마이크 \(j\)의 녹음값이다. 구체적으로:
\[x_{ij} = \sum_{k} a_{jk} \, s_{ik}\]
즉, 시각 \(i\)에서 마이크 \(j\)는 \(k\)번째 화자의 신호 \(s_{ik}\)에 가중치 \(a_{jk}\)를 곱한 선형 결합을 기록한다.
역혼합(Unmixing)
ICA의 목표는 역혼합 행렬(unmixing matrix) \(W = A^{-1}\)를 찾아 원래의 음원을 복원하는 것이다.
\[s^{(i)} = W x^{(i)}\]
\(W\)의 행을 \(w_1^T, w_2^T, \ldots, w_n^T\)로 쓰면, \(j\)번째 원본 음원은 다음과 같이 복원된다.
\[s_j^{(i)} = w_j^T x^{(i)}\]
ICA가 가능한 이유
ICA가 가능한 이유를 직관적으로 이해해 보자. 각 화자가 매 시점에서 \(-1\)과 \(+1\) 사이의 무작위 값을 방출한다고 가정하면, 음원 \(s_1\)과 \(s_2\)의 결합 분포는 정사각형 형태의 균등 분포가 된다. 혼합 행렬 \(A\)를 거치면 이 정사각형이 평행사변형으로 변형되어 관측 데이터 \(x_1, x_2\)의 분포가 된다. ICA의 과제는 이 평행사변형을 다시 정사각형으로 되돌리는 역혼합 행렬 \(W\)를 찾는 것이다. \(s_1\)과 \(s_2\)가 독립적인 분포를 회복하는 \(W\)를 찾는 것이 핵심이다.
모호성
ICA에는 두 가지 본질적인 모호성이 있다.
- 축 모호성(permutation ambiguity): \(s_1\)과 \(s_2\) 중 어느 것이 화자 1이고 어느 것이 화자 2인지 알 수 없다. 즉, 음원의 순서가 임의적이다. 그러나 음원 자체는 올바르게 복원되므로 실용적으로 문제가 되지 않는다.
- 부호 모호성(sign ambiguity): \(+s\) 대신 \(-s\)가 복원될 수 있다. 균등 분포의 직사각형을 좌우 또는 상하로 뒤집어도 같은 모양이기 때문이다. 다행히 음원의 부호를 바꾸어 스피커로 재생해도, 사람의 귀에는 거의 동일하게 들린다. 따라서 실용적으로 양의 부호든 음의 부호든 상관없다.
화자 수와 마이크 수
기본적인 ICA 알고리즘에서는 화자의 수(음원의 수)와 마이크의 수가 동일하다고 가정한다. 이 가정을 완화하는 방법은 이후 강의에서 다룬다.
핵심 정리
개념 |
핵심 |
|---|---|
PCA |
공분산 행렬 \(\Sigma\)의 상위 \(K\)개 고유벡터 방향으로 데이터를 투영하여 차원을 축소 |
전처리 |
PCA 전에 평균 제거 + 분산 정규화 필수 |
주성분 선택 |
\(\sum_{i=1}^K \lambda_i / \sum_{i=1}^n \lambda_i\)로 유지 분산 비율 계산 (90~99% 기준) |
좋은 응용 |
시각화 (고차원 → 2D/3D), 학습 효율성을 위한 압축 |
나쁜 응용 |
과적합 방지 목적 (정규화를 사용하라), 거리 매칭 (신뢰성 부족) |
고유벡터 안정성 |
개별 고유벡터는 불안정하지만, span하는 부분공간은 안정적 |
ICA |
혼합 행렬 \(A\)를 통해 섞인 독립 음원을 역혼합 행렬 \(W = A^{-1}\)로 분리 |
칵테일 파티 문제 |
ICA의 대표적 응용: 겹치는 음성 신호를 독립 음원으로 분리 |
ICA 모호성 |
축 모호성 (음원 순서), 부호 모호성 (\(+s\) vs \(-s\)) |
PCA vs 인자 분석 |
PCA는 비확률적, 인자 분석은 \(p(x)\)를 모델링하는 확률적 방법 |
이전 장: 14장 - EM 알고리즘과 인자 분석 다음 장: 16장 - 독립 성분 분석과 강화 학습