[기계학습개론] Dimensionality Reduction - PCA, Kernel PCA, Auto-Encoder

 

Dimensionality Reduction - PCA부터 오토인코더까지 핵심 원리 분석

오늘은 우리가 다루는 데이터의 복잡성을 한결 가볍게 만들어주는, 차원 축소(Dimensionality Reduction)에 대해 공유하고자 한다. 고차원 데이터의 복잡성을 줄여줄 중요한 도구라는 점에서 이번 내용은 충분히 가치 있을 것이다.


1. 차원 축소란 무엇인가? 왜 필요할까?

우리가 마주하는 데이터는 종종 수십, 수백, 심지어 수만 개가 넘는 변수(차원)로 이루어져 있다. 예를 들어, 금융 시장 분석 데이터는 수많은 경제 지표와 기업 정보를 포함할 수 있고, 의료 영상 데이터는 각 픽셀이 하나의 차원이 되어 엄청난 고차원 공간을 형성한다. 이러한 고차원 데이터(High-Dimensional Data)는 그 자체로 다루기 어려울 뿐만 아니라, 분석 및 모델링 과정에서 '차원의 저주(Curse of Dimensionality)'라는 문제에 직면하게 만든다. 데이터의 밀도가 희박해지고, 계산 비용이 기하급수적으로 증가하며, 과적합(Overfitting)의 위험도 커진다.

차원 축소는 바로 이러한 문제에 대한 핵심 해결책이다. 차원 축소는 많은 변수를 가진 데이터를 정보 손실을 최소화하면서 더 적은 수의 새로운 종합 변수(Synthetic/Composite Variables)로 요약하는 과정이다. 이를 통해 얻을 수 있는 주요 이점은 다음과 같다:

  • 데이터 압축 (Data Compression): 저장 공간을 절약하고 계산 속도를 향상시킨다. 핵심 정보를 유지하면서 데이터의 부피를 줄이는 것이다.
  • 데이터 시각화 (Data Visualization): 인간이 직관적으로 이해하기 어려운 고차원 데이터를 2차원 또는 3차원으로 투영하여, 숨겨진 패턴, 군집, 이상치 등을 발견할 수 있게 돕는다.
  • 데이터 표현 (Data Representation): 데이터의 핵심적인 특징을 추출하고 불필요한 잡음(Noise)을 제거하여, 후속 분석이나 머신러닝 모델의 성능을 향상시킨다.
Dimensionality Reduction


결국 차원 축소는 표현의 명료성과 정보 손실 사이의 절묘한 균형을 찾는 예술과 같다. 목표는 데이터의 분산(Variance)이나 내재된 핵심 구조를 최대한 보존하면서 차원을 효과적으로 줄이는 것이다.


2. 주성분 분석 (PCA): 데이터의 핵심을 꿰뚫는 선형 변환 💡

차원 축소 기법 중 가장 널리 알려지고 활용되는 것이 바로 주성분 분석(Principal Component Analysis, PCA)이다. PCA는 데이터의 분산이 가장 큰 방향을 새로운 축으로 삼아, 원래 데이터를 이 새로운 축으로 투영(Projection)하는 기법이다. 이 새로운 축들을 주성분(Principal Components)이라고 부른다.


PCA의 핵심 아이디어와 속성

PCA는 기존의 데이터 공간을 회전시켜 새로운 좌표계를 찾는 것과 유사하다. 이 새로운 좌표축, 즉 주성분들은 다음과 같은 중요한 특징을 지닌다.

  1. 분산 최대화: 첫 번째 주성분(PC1)은 원본 데이터의 분산을 가장 잘 설명하는 방향을 나타낸다. 두 번째 주성분(PC2)은 PC1과 직교(Orthogonal)하면서 나머지 분산 중 가장 큰 부분을 설명하는 방향이며, 이런 방식으로 각 주성분은 이전 주성분들과 직교하면서 순차적으로 데이터의 분산을 최대한 많이 설명하는 축으로 설정된다.
  2. 무상관성 (Uncorrelated): 이렇게 찾아진 주성분들은 서로 통계적으로 독립적, 즉 상관관계가 0이다. 이는 각 주성분이 데이터의 서로 다른 정보 조각을 담고 있음을 의미한다.
Visualizing Principal Component


주성분 z_j​는 원본 변수 x_i​들의 선형 결합으로 표현된다:


여기서 u_ji​는 각 원본 변수가 해당 주성분에 기여하는 정도를 나타내는 가중치(계수)이다.



PCA의 수학적 심층 탐구: 공분산 행렬과 고유값 분해

PCA의 마법은 사실 선형대수의 강력한 개념인 고유값(Eigenvalue)고유벡터(Eigenvector)에 기반한다. 주성분들은 데이터의 공분산 행렬(Covariance Matrix) 의 고유벡터로 결정된다. 공분산 행렬은 데이터 특성들 간의 상관관계를 나타내는 행렬이다.

공분산 행렬 Σ에 대한 고유값 방정식은 다음과 같다:

\[\Sigma v=\lambda v \]

여기서 v는 고유벡터이고, λ는 해당 고유벡터에 대응하는 고유값이다.

PCA에서,

  • 고유벡터 (): 주성분의 방향을 나타낸다. 즉, 데이터가 어떤 방향으로 가장 많이 흩어져 있는지를 보여준다.
  • 고유값 (): 해당 고유벡터(주성분) 방향으로 데이터가 갖는 분산의 크기를 의미한다. 고유값이 클수록 해당 주성분이 더 많은 정보를 담고 있다는 뜻이다.

모든 고유값의 합은 원본 변수들의 총 분산과 같다. 이 성질은 PCA가 정보 손실을 정량화하고, 몇 개의 주성분을 선택할지 결정하는 데 중요한 역할을 한다.

수학적인 내용은 선형대수학 관련 글을 참고하자.




PCA 구현 단계: Low-Level 관점에서

  1. 데이터 전처리 (Data Preprocessing): PCA는 데이터의 스케일에 민감하므로, 각 특성(Feature)의 평균을 0으로 맞추고 (평균 정규화, Mean Normalization), 필요하다면 분산을 1로 만들어주는 특성 스케일링(Feature Scaling)을 수행한다. 이는 모든 특성이 PCA 계산에 동등하게 기여하도록 한다.

    \[{x_{j}}^{i}\leftarrow\frac{{x_{j}-{\mu}_{j}}}{{s}_{j}}\]​​ (여기서 μ_j​는 평균, s_j​는 표준편차 또는 (최댓값-최솟값))

  2. 공분산 행렬 계산 (Σ): 전처리된 m×n 데이터 행렬 X (m개 샘플, n개 특성)에 대해 공분산 행렬은 다음과 같이 계산된다. (보통 X는 각 특성이 열벡터인 형태를 가정하며, 평균이 0으로 맞춰져 있다면)

    \[\Sigma=\frac{1}{m}X^{T}X \]

  3. 공분산 행렬의 고유벡터 계산: Σ의 고유값과 고유벡터를 계산한다. 이 과정은 주로 특이값 분해(Singular Value Decomposition, SVD)를 통해 효율적이고 안정적으로 수행된다. [U,S,V] = svd(Sigma) 명령어를 실행하면, U 행렬의 열벡터들이 바로 우리가 찾는 고유벡터, 즉 주성분의 방향이다. (엄밀히 말하면 SVD는 \(X=USV^{T}\) 형태로 분해하며, \(X^{T}X\)의 고유벡터는 V의 열벡터들이고, U는 \(XX^{T}\)의 고유벡터들이다. 공분산 행렬 \(\Sigma=\frac{1}{m}X^{T}X \)의 고유벡터는 X의 오른쪽 특이벡터(right singular vectors)인 V의 열벡터들이 된다.)

  4. 주성분 계산 (차원 축소): 계산된 고유벡터 중, 고유값이 큰 순서대로 k개를 선택하여 n×k 차원의 투영 행렬 W (선택된 고유벡터들을 열로 가짐)를 만든다. 원본 데이터 X (m×n)를 이 W에 투영하여 k차원의 새로운 데이터 Z (m×k)를 얻는다.

    \[Z=XW \]

  5. 최적의 주성분 개수 (k) 선택: 몇 개의 주성분을 유지할 것인가(k<n)는 매우 중요한 결정이다. 주로 설명된 분산(Explained Variance)의 비율을 기준으로 선택한다. 예를 들어, "전체 분산의 99%를 보존하는 최소 k개"를 선택하는 방식이다.

    SVD 결과에서 얻어지는 특이값(또는 공분산 행렬의 고유값) λi​를 사용하여 k개의 주성분으로 설명되는 분산의 비율은 다음과 같이 계산할 수 있다:

    \[\frac{\sum_{i=1}^{k}{\lambda}_{i}}{\sum_{i=1}^{n}{\lambda}_{i}}\geq target(ex:0.99)\]

    또 다른 방법은 평균 제곱 투영 오차(Average Squared Projection Error)를 최소화하는 k를 찾는 것이다.


    여기서 xapprox​는 k개의 주성분으로 복원된 데이터이고, ϵ은 허용 오차율이다 (예: 0.01은 1% 오차).

PCA result



PCA의 다양한 응용

  • 지도 학습 속도 향상: 고차원 특성 공간을 저차원으로 줄여 모델 훈련 시간을 단축시키고, 때로는 과적합을 줄이는 데 도움이 될 수 있다. 중요한 점은 PCA 매핑은 훈련 데이터셋(Training set)만을 사용하여 학습되어야 하며, 이 학습된 매핑을 검증(Validation) 및 테스트(Test) 데이터셋에 일관되게 적용해야 한다는 것이다.
  • 얼굴 인식 (Eigenfaces): 고차원의 얼굴 이미지를 저차원의 '고유 얼굴(Eigenface)' 공간으로 표현하여 인식률을 높이고 계산량을 줄인다.
    Face Recognition


  • 이미지 잡음 제거 및 행렬 완성: PCA는 데이터의 주요 구조를 포착하므로, 이를 이용해 잡음을 제거하거나 손실된 데이터를 복원하는 데 활용될 수 있다.
Reconstruction



PCA 사용 시 주의사항

PCA를 과적합(Overfitting) 문제 해결의 주된 방법으로 사용하는 것은 바람직하지 않다. 차원 축소는 정보 손실을 수반하므로, 과적합은 규제(Regularization) 기법을 통해 직접적으로 다루는 것이 훨씬 효과적이다. PCA는 특성 수를 줄이는 부수적인 효과는 있지만, 그것이 주 목적이 되어서는 안 된다.


3. 커널 PCA (Kernel PCA): 비선형의 벽을 넘어서 🌀

PCA는 데이터의 선형(Linear) 구조를 가정하고 저차원 부분 공간(Subspace)을 찾는다. 하지만 현실 세계의 데이터는 복잡한 비선형(Nonlinear) 구조, 즉 저차원 다양체(Manifold) 위에 놓여 있는 경우가 많다. 예를 들어, 스위스 롤(Swiss Roll) 데이터처럼 말려 있는 데이터는 선형 PCA로는 효과적으로 펼치기 어렵다.

이러한 비선형 구조를 다루기 위해 등장한 것이 커널 PCA(Kernel PCA)이다. 커널 PCA는 "커널 트릭(Kernel Trick)"이라는 기발한 아이디어를 사용하여 PCA를 고차원 특성 공간(High-Dimensional Feature Space)으로 확장한다. (SVM에서도 이용한 적 있음)

PCA vs Kernel PCA


커널 트릭의 마법

커널 트릭의 핵심은 원본 데이터 x를 명시적으로 매우 높은 (심지어 무한) 차원의 특성 공간 ϕ(x)로 매핑하지 않고도, 그 고차원 공간에서의 내적(Dot Product) ϕ(x)⋅ϕ(z)를 원본 공간에서의 커널 함수 K(x,z) 계산으로 대체하는 것이다.

K(x,z)=ϕ(x)Tϕ(z)

이를 통해 고차원 특성 공간에서 선형 PCA를 수행하는 것과 동일한 효과를 얻을 수 있다.



다양한 커널 함수

다양한 종류의 커널 함수가 있으며, 데이터의 특성에 따라 적절한 커널을 선택하는 것이 중요하다:

  • 선형 커널 (Linear Kernel): \[K(x,z)=x^{T}z\]
    • 이는 사실상 표준 PCA와 동일한 결과를 낳는다.
  • 다항식 커널 (Polynomial Kernel): \[K(x,z)=(\gamma x^{T}z+r)^{d}\]
    • 데이터의 다항 관계를 포착한다. d는 차수, γ,r은 계수이다.
  • 가우시안 커널 (Gaussian Kernel / RBF Kernel): \[K(x,z)=exp(-\frac{\left\|x-z\right\|^{2}}{2\sigma^{2}})=exp(-\gamma\left\|x-z\right\|^{2})\]
    • 가장 널리 사용되는 커널 중 하나로, 복잡한 비선형 관계를 유연하게 모델링할 수 있다. σ (또는 )는 커널의 폭을 결정하는 하이퍼파라미터이다.
  • 라플라스 커널 (Laplacian Kernel): \[K(x,z)=exp(-\frac{\left\|x-z\right\|}{\sigma})\]


커널 PCA의 작동 원리

  1. 적절한 커널 함수 와 하이퍼파라미터를 선택한다.
  2. 선택된 커널 함수를 사용하여 커널 행렬(Gram Matrix) 를 구성한다. 각 원소 는 데이터 포인트 ij 간의 유사도(또는 고차원 공간에서의 내적)를 나타낸다.
  3. 이 커널 행렬 K를 (특성 공간에서) 중앙화(Centering)한다.
  4. 중앙화된 커널 행렬에 대해 고유값 분해를 수행하여 고유값과 고유벡터를 얻는다. (실제로는 약간 더 복잡한 형태의 고유값 문제를 푼다.)
  5. 계산된 고유벡터들을 사용하여 데이터를 새로운 주성분 공간으로 투영한다. 이 새로운 주성분들은 원본 데이터 공간에서는 비선형적인 형태를 띤다.
Key point


커널 PCA는 최대 데이터 샘플 수(N)만큼의 비선형 주성분을 추출할 수 있으며, 원본 데이터 공간에서는 복잡하게 얽혀 있던 데이터 구조를 효과적으로 펼쳐낼 수 있다. 예를 들어, 동심원 형태의 데이터를 극좌표계로 변환하여 선형 분리가 가능하게 만드는 것과 유사한 효과를 비선형 변환을 통해 달성하는 셈이다.


4. 오토인코더 (Auto-Encoders): 스스로 학습하는 데이터 압축기 🧠

오토인코더(Auto-Encoder)는 차원 축소를 위한 또 다른 강력한 접근 방식으로, 신경망(Neural Network) 구조를 활용한다. 오토인코더의 기본 아이디어는 입력 데이터를 받아 신경망 내부에서 압축했다가 다시 원본 데이터와 최대한 유사하게 복원하도록 학습하는 것이다.


오토인코더의 구조: 인코더와 디코더

오토인코더는 크게 두 부분으로 구성된다:

  1. 인코더 (Encoder): 입력 데이터 \(x\)를 받아 더 낮은 차원의 잠재 공간 표현(Latent Space Representation) \(h\) (또는 코드, Code)로 압축한다. 이 과정은 \(h=f(x)\)로 표현할 수 있다. 인코더는 보통 여러 개의 신경망 계층으로 구성되어 점진적으로 차원을 축소한다.
  2. 디코더 (Decoder): 압축된 잠재 표현 \(h\)를 다시 입력 데이터와 유사한 형태인 \(\widehat{x}\)로 복원(Reconstruct)한다. 이 과정은 \(\widehat{x}=g(h)\)로 표현할 수 있다.
Auto-Encoder process

\[x\xrightarrow[Encoder f]{}h\xrightarrow[Decoder g]{}\widehat{x}\]


학습의 목표는 입력 \(x\)와 출력 \(\widehat{x}\) 사이의 재구성 오차(Reconstruction Error)를 최소화하는 것이다. 예를 들어, 평균 제곱 오차(Mean Squared Error, MSE)를 손실 함수로 사용할 수 있다:

\[L(x,\widehat{x})=\left\|x-\widehat{x}\right\|^{2}\]

만약 훈련 데이터에 대해 재구성 오차가 0에 가깝다면, 이는 오토인코더가 해당 훈련 데이터의 주요 특징들을 잠재 표현 \(h\)에 잘 압축해 담았음을 의미한다. 이 \(h\)가 바로 데이터의 효율적인 저차원 표현으로 사용될 수 있다. 특히, 인코더의 마지막 은닉층(Bottleneck Layer)의 차원을 원본 데이터의 차원보다 작게 설정함으로써 차원 축소가 이루어진다.


오토인코더의 특징 및 PCA와의 비교

  • 비선형성: 오토인코더는 신경망의 활성화 함수(Activation Function, 예: ReLU, Sigmoid) 덕분에 PCA보다 훨씬 복잡한 비선형 차원 축소가 가능하다.
  • 데이터 특화: PCA는 데이터 전체의 분산을 최대로 보존하는 일반적인 선형 변환을 찾는 반면, 오토인코더는 주어진 훈련 데이터에 대해 재구성을 가장 잘 하도록 학습되므로, 데이터에 더 특화된 표현을 학습할 수 있다.
  • 깊은 구조: 여러 은닉층을 쌓아 심층 스택형 오토인코더(Deep Stacked Auto-Encoders)를 구성하면, 계층적으로 더욱 추상적이고 복잡한 특징을 학습할 수 있다.
  • 생성 모델과의 연관성: 오토인코더, 특히 변이형 오토인코더(Variational Auto-Encoder, VAE)와 같은 발전된 형태는 데이터의 확률 분포 P(x)를 학습하는 것과 관련이 깊으며, 새로운 데이터를 생성하는 생성 모델(Generative Model)로도 활용될 수 있다.

MNIST 손글씨 이미지 데이터셋(784차원)을 2차원으로 축소했을 때, 선형 PCA와 깊은 오토인코더(예: 784-1000-500-250-2 구조)가 찾아낸 2D 표현은 서로 다른 분포를 보인다. 오토인코더는 종종 데이터 포인트들을 더 의미 있는 군집으로 분리해내는 경향이 있다. 문서 검색과 같은 비선형 문제에서도 잠재 의미 분석(LSA, PCA와 관련됨)보다 오토인코더가 더 나은 저차원 표현을 생성하기도 한다.

PCA vs Auto-encoder



5. 결론: 차원 축소, 데이터의 본질을 향한 여정 ✨

차원 축소는 고차원 데이터라는 미로 속에서 데이터의 핵심적인 정보와 구조를 찾아내는 필수적인 도구이다.

PCA는 데이터의 선형적 관계 속에서 분산을 기준으로 가장 중요한 축들을 찾아내고, 커널 PCA는 커널 트릭이라는 마법을 통해 이 능력을 비선형의 세계로 확장한다. 오토인코더는 신경망의 강력한 표현 학습 능력을 이용하여 데이터 스스로 자신의 압축된 정수를 드러내도록 한다.

이러한 기법들은 단순히 데이터의 크기를 줄이는 것을 넘어, 데이터 시각화, 잡음 제거, 저장 효율 증대, 그리고 머신러닝 모델의 성능 향상 등 광범위한 응용 분야에서 그 가치를 발휘한다. 각 기법의 수학적 원리와 알고리즘적 구현을 깊이 이해하는 것은, 복잡한 데이터의 바다를 항해하는 우리에게 더욱 강력한 나침반을 쥐여줄 것이다.




추천글:

[기계학습개론] Supervised learning technique - Support Vector Machine

hyeon_B

안녕하세요! AI 기술을 이용해 더 나은 세상을 만들어 나가고 싶은 과기원생 Hyeon이라고 합니다. 저는 앞으로 인공지능 시대에는 지식을 '활용'하는 능력이 중요해질 것이라고 생각합니다. 대부분의 일들은 인공지능이 뛰어난 모습을 보이지만, 인공지능은 데이터로 부터 연관관계를 학습하기 때문에 지식들을 새로 통합해서 활용하는 능력이 부족합니다. 인공지능이 뉴턴 전에 만들어졌다면 사과가 떨어지는 이유에 대답하지 못했을 것이고, 아인슈타인 전에 만들어졌다면 중력이 어떻게 생기는지 설명하지 못했을 것입니다. 따라서 앞으로 우리는 '본질'을 탐구하고 그 본질로부터 다른 곳에 적용하며 인공지능을 현명하게 활용해야 할 것입니다. 함께 인공지능 시대를 준비합시다!

댓글 쓰기

다음 이전

POST ADS1

POST ADS 2