일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- BFS
- DFS
- 코테
- 큐
- 문제풀이
- 코딩테스트
- solvedac
- Datastructure
- 정렬
- 깊이우선탐색
- 자료구조
- greedy
- dp
- 반복문
- 수학
- 다이나믹프로그래밍
- Baekjoon
- 데이터마이닝
- 파이썬
- 프로그래머스
- 그래프탐색
- 너비우선탐색
- 그래프
- 그리디알고리즘
- 알고리즘
- PYTHON
- 백준
- 문자열
- 그리디
- DP알고리즘
- Today
- Total
nyunu
[Deep Learning] AutoEncoder 본문
AutoEncoder란 ?

오토인코더(AutoEncoder) 란 입력 데이터를 최대한 압축시킨 후, 압축시킨 데이터를 다시 본래의 입력 형태로 복원시키는 신경망으로, 입출력이 같은 구조를 가진다. 데이터를 압축시키는 부분이 Encoder, 복원하는 부분이 Decoder가 되고, 압축 과정에서 추출한 의미 있는 데이터 Z를 latent vector라고 한다. 그리고 Loss의 값으로는 입력값 x와 Decoder를 통과한 y값의 차이를 사용하며, 이 값을 최소화하는 것을 목표로 학습을 진행한다.
여기서 가장 중요한 점은, 모델이 알아서 중요한 latent vector를 찾기 때문에 latent vector를 미리 알 수 없다는 점이다. 이를 달리 표현하면 Encoder 모델이 학습을 통해 자동으로(Automatically) latent vector를 찾아준 것이라고도 할 수 있다. 따라서, 우리의 목적은 중요한 latent vector를 찾는데 있기 때문에 오토인코더의 초점은 Encoder에 맞춰져 있고, Decoder는 latent vector를 찾기 위한 도우미 역할이라고 생각하면 된다.
또한, 오토인코더(AutoEncoder)는 y값이 따로 존재하지 않아 원래대로라면 Unsupervised Learning으로 분류되지만, 입력 데이터를 일종의 Label(정답)로 삼아 Supervised Learning 문제로 바꾸어 해결한다. 이러한 특징때문에 Self-supervised Learning이라고 불리기도 한다.
AutoEncoder VS PCA
오토인코더의 구조 중 Encoder는 입력 데이터를 압축하는 과정에서 데이터의 차원을 축소시키는데, 차원 축소의 관점에서 Encoder는 PCA와 유사한 역할을 수행한다.

PCA (주성분 분석)를 간단하게 정의하면 데이터를 가장 잘 설명할 수 있는 직선을 찾는 과정이다. 위 그림처럼 모든 데이터에서 어느 한 직선에 수선의 발을 내렸을 때, 그 길이의 합이 최소가 되는 직선을 찾는 것이다. 이는 분산을 최대로 보존할 수 있는 직선을 선택하는 것이라고도 할 수 있다. 분산이 커져야 데이터 사이의 차이점이 명확해지기 때문에, 분산을 최대로 보존할 수 있는 직선을 선택하는 것이 정보를 가장 적게 손실할 수 있다고 생각할 수 있다. 그리고, 만약 가장 분산을 최대로 하는 직선을 찾았다면 이를 제1주성분이라 부르게 되고, 제1주성분과 직교하면서 & 분산을 최대화하는 또 다른 직선이 제2주성분이 된다.

아무튼 위의 설명을 보면, 기본적으로 PCA는 선형적으로 데이터의 차원을 축소시킨다는 사실을 확인할 수 있다. 여기서 오토인코더와 PCA의 차이점을 확인할 수 있는데, PCA와 달리 오토인코더는 비선형적으로 데이터의 차원을 축소시킬 수 있다는 특징이 있다. 물론 PCA도 Kernel PCA를 통해 비선형 차원 축소가 가능하지만, 선형에 사용되는 것이 대부분이다.
AutoEncoder의 종류
1) Stacked Auto Encoder

가장 기본적인 오토인코더 구조이다. 적어도 Input Data에 대해서는 복원을 잘한다는 오토인코더의 특징을 활용해 이를 잘 표현하는 weight를 학습한다. 특히, 이때 여러 개의 히든 레이어를 쌓아가며 학습한다고 해서 Stacking AutoEncoder라고 불려지고, 레이어를 추가할수록 오토인코더가 더 복잡한 구조를 학습할 수 있다는 특징이 있다. 또한, 그림처럼 히든레이어를 기준으로 대칭의 구조를 가진다는 특징도 가진다.
2) Denoising AutoEncoder

DAE는 노이즈를 제거하거나, 노이즈를 일부러 추가해 중요한 특징을 추출하도록 하는 오토인코더의 일종이다. 이는 입력층에서 히든 레이어로 이동할 때 노이즈를 추가하는 방식으로, 사람이 데이터 상에서 같다고 생각할 만큼의 noise를 추가해 학습을 진행한다. 이러한 noise는 추가되더라도 manifold 상에서는 똑같은 곳에 분포된다는 가정이 있는데 이때문에 manifold 상에서는 같지만 원본 데이터와는 다른 데이터로 Encoder와 Decoder를 학습하게 된다.
깨끗한 이미지 데이터만을 가지고 학습한다면, 노이즈가 추가된 데이터가 들어왔을 때 원본 이미지를 제대로 복구시키지 못하고 오버피팅의 문제가 예상되지만, 가우시안 분포를 통해 샘플링되는 노이즈는 학습때마다 바뀌어 이렇게 계속 학습을 한다면 다양한 노이즈가 추가된 데이터를 학습할 수 있게 되어 모델의 일반화 효과를 기대할 수 있게 된다.
3) Variational AutoEncoder

VAE는 입력 데이터를 잘 설명하는 변수를 추출하여 Latent vector에 담고, Latent vector를 통해 입력 데이터와 유사하지만 새로운 데이터를 생성하는 것을 목표로 한다. VAE는 생성 오코인코더이기 때문에 디코더를 학습시키는 것을 주 목적으로 하는데, 이는 기존 오토인코더가 인코더에 초점을 맞추는 것과 반대되는 점이다.
기존의 AE모델은 n차원의 벡터를 반환하지만, VAE의 경우 n차원의 평균과 표준편차 값을 반환하기 때문에 이에 따라 n개의 분포가 생기고, n개의 정규분포에서 latent vector를 샘플링할 수 있게 된다. 샘플링을 한다는 것을 미분가능한 수식으로 나타낼 수 없기 때문에 여기서는 backpropagation이 아닌 Reparametererization Trick을 사용한다. 이때, Reparametererization이란, latent vector를 정규분포로 만드는 과정을 의미한다.
VAE 모델에서의 loss는 원본의 이미지를 구현하기 위한 목적함수 Reconstruction error와 Encoder의 출력값인 평균과 표준편차를 정규화 하는 Regularization error 로 구성되어있다.
AutoEncoder의 활용
- 차원축소
- 추천엔진
- 이상탐지 : 재구성 손실의 크기를 통해 이상치 탐지
- 이미지 잡음제거 : 변질된 이미지의 복원
- 이미지 인식 : 쌓인 오토인코더를 통해 이미지의 다른 특성을 학습
- 이미지 생성 : VAE 활용
참고
https://pebpung.github.io/autoencoder/2021/09/11/Auto-Encoder-1.html
'Data mining' 카테고리의 다른 글
[데이터 마이닝] 연관 분석 (Association Analysis) - Apriori Algorithm (0) | 2023.07.31 |
---|---|
[데이터 마이닝] 연관 분석 (Association Analysis) - 기본 개념 (0) | 2023.07.30 |
[데이터 마이닝] 자기조직화지도(Self-Organizing Map, SOM) - 기본 개념 (0) | 2023.07.01 |
[데이터 마이닝] 앙상블(ensemble) - Random Forest / multi class (0) | 2023.06.18 |
[데이터 마이닝] 앙상블(ensemble) - Bagging, Boosting (1) | 2023.06.18 |