- Reference
Naver d2 이활석님의 '오토인코더의 모든것'
Kaist Edward Choi 교수님의 Programming for AI(AI 504, Fall2020)
Naver d2 이활석님의 '오토인코더의 모든것'과 Kaist Edward Choi 교수님의 AI 504 수업을 토대로 공부한 후 정리하였습니다.
0. 글 쓰기에 앞서
3주 전부터 해왔던 딥러닝 스터디에서 이해 안 되는 내용이 점점 많아지고 있다.
그중에서도 가장 먼저 나의 발목을 잡은 것은 오토인코더(Autoencoder)다.
파이토치는 물론이고 딥러닝 모델들이 처음인 나로서는 영어로 된 강의를 듣고 한 번에 모든 내용을 이해하는 것은 불가능했다.
이에 Class 4 : Autoencoder부터는 추가로 공부를 하며 내용을 정리해보려 한다.
Naver d2 이활석님의 '오토인코더의 모든 것' 강의가 좋다는 평이 많아서 봤는데, 오토인코더는 물론이고 딥러닝의 전반적인 흐름을 명료하게 설명해주셔서 너무 도움이 많이 되었다. 딥러닝에 관심이 있는 사람이라면 꼭 볼 것을 강력 추천한다.
이번 포스팅에서는 오토인코더의 개념과 특징, 그 중에서도 가장 중요한 특징인 dimensionality reduction(차원축소)에 대해 정리해 보았다. 또한 Manifold의 관점에서 오토인코더가 어떻게 차원축소를 하는지도 알아 볼 것이다.
1. 오토인코더(Autoencoder)?
1-1. 오토인코더의 특징
오토인코더(Autoencoder) 란 무엇일까.
우선, 오토인코더에는 네 가지 특징이 있다.
- Unsupervised learning
- Representation learning
= Efficient coding learning - Dimensionality reduction
- Generative model learning
각 특징별로 오토인코더를 정의해보면
- Unsupervised learning => 오토인코더를 학습할 때 : unsupervised learning(비교사 학습방법)을 따르며
- Representation learning => 오토인코더를 학습할 때 : Loss는 Negative Maximum Likelihood(nml)로 해석되고,
- Dimensionality reduction => 학습된 오토인코더에서 : 인코더는 차원 축소의 역할을,
- Generative model learning => 학습된 오토인코더에서 : 디코더는 생성 모델의 역할을 수행한다.
즉 , AutoEncoder(오토인코더)란 unsupervised learning을 따르며 loss는 nml로 해석되고, 차원 축소의 역할(encoder)과 생성 모델의 역할(decoder)을 수행하는 것 이다.
(여기서 negative ML은 negative maximum likelihood로 loss(손실함수) 및 MLE에 관한 내용은 추후에 포스팅 하도록 하겠습니다.)
1-2. Dimensionality reduction(차원축소)
이 중에서도 가장 중요한 키워드는
3. Dimensionality reduction
즉, 차원을 축소해주는 역할을 한다는 것이다.
(차원 축소를 하지 않는 encoder도 있다.)
그렇다면 차원 축소는 왜 필요할까?
차원을 축소를 하면 데이터의 양이 줄어 시간복잡도 및 공간복잡도가 줄어든다.
또한 고차원 데이터로 학습시킨 머신러닝 모델은 내부 파라미터가 복잡해 과적합(overfitting)되기 쉽다.
오토인코더의 차원 축소는 Manifold Learning을 통해 진행된다.
2. Manifold Learning
Autoencoder의 가장 중요한 기능 중 하나는 Manifold(매니폴드)를 학습 한다는 것이다.
2-1. Manifold?
Manifold란 고차원 데이터(3차원 이상)를 데이터 공간에 점의 형태로 표현했을 때, 그 점들을 error 없이 아우르는 subspace를 의미한다. 이 Manifold를 잘 찾는 것이 Manifold Learning이고, 잘 찾은 manifold를 projection(정사영)시키면 데이터 차원이 축소가 될 수 있다.
다시, 매니폴드의 학습 목적으로 돌아오면
매니폴드 학습의 목적은 (1) 데이터 압축, (2) 데이터 시각화, (3) 차원의 저주 피하기, (4) 유용한 특징(피처) 추출 이렇게 네 가지가 있다.
1. 데이터 압축은 Manifold를 projection 시켰을 때를 생각해보면 직관적으로 이해 할 수 있고,
2. 데이터 시각화 역시 고차원 데이터를 시각화 하려면 3차원 이하의 데이터로 압축해야 한다고 쉽게 이해 할 수 있다.
2-2. Curse of Dimensionality(차원의 저주)
3. 차원의 저주 피하기
차원의 저주란 차원이 커질수록 각각의 차원 내에서 학습 데이터의 수가 적어지는(sparse) 현상을 의미한다.
즉, 데이터의 개수는 똑같은데 고차원으로 갈 수록 빈 공간이 많아짐을 뜻한다.
🙄빈 공간이 많아지면 왜 문제가 발생할까?
데이터가 8개 있는데 1차원(1x10) 공간에서 모델링을 하려 하면 데이터 공간 전체의 80%를 우리가 아는 것이다.
그러나 2차원(10x10)의 경우 데이터의 갯수는 8개로 동일하므로 8%의 정보만 가지고 모델링을 해야한다.
3차원(10x10x10)의 경우는 0.8%로 거의 데이터가 없는 상황에서 모델링을 해야하므로 만든 모델이 부정확할 가능성이 높다.
2-3. Manifold Learning은 어떻게 차원의 저주를 피하는가
우선, Manifold는 다음 두가지의 가정을 전제로 한다
Manifold Hypothesis (assumption)
1. Natural data in high dimesional spaces concentrates close to lower dimensional manifolds.
1. 고차원의 데이터의 밀도는 낮지만, 이들의 집합을 포함하는 저차원의 매니폴드가 있다.
2. Probability density decreases very rapidly when moving away from the supporting manifold.
2. 이 저차원의 매니폴드를 벗어나는 순간 급격히 밀도는 낮아진다.
이 두가지 가정이 타당한 가정인지 살펴보기 위해 이미지를 예시로 살펴보자.
200x200 RGB 이미지는 10^96329 개의 이미지를 표현 할 수 있다.
이는 굉장히 고차원 공간인데, 만약 위의 가정이 옳지 않다면 이 고차원 공간에서 랜덤하게 uniform sampling을 했을 때 그럴듯한 natural 이미지가 나와야 한다.
20만번을 sampling해도 위와 같은 그림만 나올 것이다.
얼굴, 스케치 심지어 폰트까지도 각각의 이미지 데이터들은 고차원 공간 어딘가에 그것들을 잘 아우르는 매니폴드 공간이 있을 것이라는게 mainfold assumption이다.
얼굴 사진을 예시로 들면 Manifold를 잘 찾았다는 것은, 얼굴 사진들 간의 관계성을 잘 찾을 수 있다는 것이고, 확률분포 또한 잘 찾았다면, sampling을 했을 때 기존 training DB에 없는 얼굴 사진이 나올 수 있을 것이다.
MNIST 데이터를 예시로 들자면,
손으로 쓴 숫자 데이터는 28x28, 약 784 dimension이다.
이 고차원 공간에서 이 숫자 데이터들을 잘 아우르는 subspace(manifold)를 잘 찾는다면, feature(rotation, thickess, size 등)를 알아서 잘 찾을 수 있다. (=> Unsupervised Learning)
Feature를 잘 찾는다는 것은 distance metric과 관련지어 해석 할 수 있다.
고차원 공간에서는 거리(유클리디안 기준)가 가까워도 매니폴드에서는 멀 수 있기 때문에 매니폴드를 통해 차원 축소를 한 후 거리를 측정해야 정확한 feature를 찾은 것이라 생각 할 수 있다.
골프 이미지를 예시로 마지막으로 정리해보자.
고차원 데이터 공간에서의 중간 이미지를 샘플링 해보면, 왼쪽의 중간이미지 처럼 이상한 사진이 나올 것이다.
그러나 매니폴드 공간에서 중간 이미지를 샘플링 해보면, 오른쪽의 중간이미지와 같은 우리가 찾고자 하는 이미지를 샘플링 할 수 있다(Feature를 잘 찾은 case).
3. 정리
이번 포스팅에서는 AutoEncoder의 특징과 그 중에서도 가장 중요한 차원축소(dimension reduction)에 대해 알아보았다.
차원축소는 Manifold Learning를 통해 이루어지는데 다음 포스팅에서는 AutoEncoder의 구체적인 이론 및 다른 차원 축소 방법들과의 차이점에 대해 정리 해봐야겠다.
'AI Theory > Generative models' 카테고리의 다른 글
최대한 쉽게 설명한 GAN (1) | 2022.02.07 |
---|---|
오토인코더(Autoencoder)가 뭐에요? - 5. Variational AutoEncoder(VAE) (0) | 2022.02.03 |
오토인코더(Autoencoder)가 뭐에요? - 4. Practice with PyTorch (AutoEncoder) (0) | 2022.01.31 |
오토인코더(Autoencoder)가 뭐에요? - 3. This is AutoEncoder! (0) | 2022.01.26 |
오토인코더(Autoencoder)가 뭐에요? - 2.Why AutoEncoder? (0) | 2022.01.25 |
댓글