티스토리 뷰

DL/AutoEncoder

[Ch3] AutoEncoders (AE, DAE, CAE)

jeong_reneer 2022. 1. 30. 20:12

AutoEncoder (AE)

1. Introduction

1) Terminology

AutoEncoders = Auto-associators = Diabolo networks = Sandglass-shaped net

- x : Input layer

- z : Bottleneck Hidden layer = Code = Latent Variable = Feature = Hidden representation

- y : Output layer (Reconstruct Input)

 

AE : 입력을 저차원 Latent space로 Encoding 한 후 Decoding 하여 복원(reconstruct)하는 Network

- 이미지를 입력받아 Encoder 통해 Latent space로 매핑하고, Decoder 통해 원본 이미지와 동일 차원으로 복원해  출력

- 원본 입력을 재구성하는 방법으로 학습

- 고전적인 방식은 구조화가 잘 된 Latent space를 생성하지 못하고 압축도 뛰어나지 않음

 

 

2) Notation

(1) x, y ∈ R^d : Input layer 와 Output layer의 size 같음 (같은 Dimension) → z : Dimension 축소됨

(2) Loss L(x, y) encourages Output to be close to Input : 입출력이 동일한 Network

(3) Unsupervised Learning 에서 Supervised(Self) Learning 문제로 바꿔서 해결

(4) 학습이 끝나면 Encoder와 Decoder를 따로 떼어 사용함

- Encoder : 최소한 학습 데이터는 잘 압축해서 latent vector로 표현할 수 있게 됨 → 데이터 추상화에 많이 사용

   입력 샘플을 잠재 공간, 즉 인코더에 의해 정의된 숨겨진 구조화된 값 집합에 매핑하는 함수 (압축)

- Decoder : 최소한 학습 데이터는 생성해낼 수 있게 됨 but, 생성된 데이터가 학습 데이터를 좀 닮아 있음

   이 잠재 공간의 요소를 사전 정의된 타겟 도메인으로 매핑하는 여함수 (복원)

   cf) GAN : AutoEncoder와 달리 Minimum 성능보장이 없어서 학습이 좀 어려움

 

 

 

2. Linear AutoEncoder

1) Multi-Layer Perceptron

Linear AutoEncoder : Hidden layers를 Activation function 없이 사용

Linear layer 아무리 많이 쌓아도 하나의 Linear layer 쌓은 것과 동일한 효과

 

 

2) Connection to PCA & RBM

Linear AutoEncoder + Mean Squared Loss = PCA와 똑같은 Manifold 학습 (Basis는 다르지만)

 

 

3. Stacking AE (SAE) for pretraining

AE가 Dimension reduction 목적으로도 사용되었지만,

CNN 나오기 전이라 Network parameter Initialization (Pretraining) 목적으로도 많이 사용되었음

 

(1) Layer by layer로 Layer 하나씩 원복하면서 Weight와 Bias Initialization

- 각 layer에 대해 Tied 형식(Weight를 Transpose 해서 사용)으로 Weight 구성해서 Training DB 학습

- 최소한 입력값으로부터 복원할 수 있는 Weight가 학습됨

(2) Last Layer는 Random Initialization

(3) 제일 마지막에는 Train DB 입력 후 backprop 해서 알고리즘 돌림 → MNIST classification output :10

 

 

 

 

Denosing AE (DAE)

1) 구조

 (1) DAE : AE의 입력 x에 Noise (Stochastic perturbation) 추가한 것

- Encoder의 입력 : ~x = x + Noise q

- Decoder의 출력 : y = x (Noise 추가되기 전 입력과 같도록 학습)

(2) Noise 포함된 입력을 넣어 Reconstruction하면 Denoised 된 결과 x가 나옴

      사람이 같은 의미를 갖는 샘플(같은 manifold)이라고 생각할 수 있는 수준의 Noise를 추가함

 

2) Evalutation (Performace)

(1) Visualization of learned filters

Filters in 1 hidden layer architecture must capture low-level features (Edge 성분) of images

랜덤값으로 초기화하였기에 노이즈처럼 보이는 필터일수록 학습이 잘 안된 것, 즉 Edge detector filter 모습일수록 better

 

 

 

(2) SDAE : Stacking DAE for Pretraining

- SAE보다 Input에 Noise 추가해 Stacking 한 SDAE의 Test classification error가 더 작음

- Noise 많이 넣을수록 error 작아지다가 일정 수준 이상이 되면 오히려 error 높아짐

 

(3) Generation

- 각 layer별 출력값을 Bernoulli 확률값으로 해석하면, 확률분포모델이 정해지기에 Sampling이 가능

- Sampling 다양하게 해서 비슷한 여러 이미지 생성할 수 있음 (SAE는 잘 안되는데 SDAE는 잘 됨)

 

 

 

 

 

Stochastic Contractive AutoEncoder (SCAE)

(1) DAE에서 입력에 Noise 추가했던 목적

: 의미적으로 같지만 (Manifold 상에서 같은 위치에 mapping) 원래 데이터 공간에서 다른 것들을 만들기 위해 추가

 

(2) SCAE

: 입력에 Noise를 추가하는 것 대신 Regularization term을 통해 Manifold 상에서 같은 위치로 mapping 하는 것 구현 

 

 

 

Contractive AE (CAE)

: SCAE에서 Noise 추가한 것에 대한 평균을 다양하게 구하는 것도 귀찮아서,

Taylor Expansion 사용해서 perturbation을 Analytic regularization term로 바꿔 Norm 형태로 구현

 

 

2) Evalutation (Performace)

(1) Visualization of learned filters

 

(2) CAE for Pretraining

 

 

 

 

 

 

 

 

'DL > AutoEncoder' 카테고리의 다른 글

[Ch5] Applications (Retrieval, Generation, GAN+VAE)  (0) 2022.02.22
[Ch4] Variational AutoEncoders (VAE, CVAE, AAE)  (0) 2022.01.31
[Ch2] Manifold Learning  (0) 2022.01.30
[Ch1] Revisit Deep Neural Networks  (0) 2022.01.30
[Ch0] AutoEncoder  (0) 2022.01.30
댓글
공지사항