🧐  Auto - Encoder 

🤫 Auto - Encoder란?
inputcode(hidden layer)로 encoding하는 encoder부분과
encoding된 code를 다시 decoding하는 decoder부분으로 구성되어 있다.
Encoding원래 data를 차원축소(dimensionality reduction)하는 것이다.
- 이때, 입력층보다 적은 수의 노드로 이루어진 은닉층(일명, code)을 중간에 넣어 차원을 줄인다.
Decoding은 차원축소(dimensionality reduction)된 data를 원래 data로 복원하는 것이다.
- code를 다시 원래 입력층과 같은 크기의 결과물로 출력한다.

원래 auto-encoder는 이전 기계학습에서 말했듯, PCA(주성분 분석)과 같은 차원축소를 위해 사용했었다.
하지만, 현재는 데이터 생성모형으로도 사용되고 있으며, 이때 auto-encoder는 비지도학습(unsupervised learning)에 속한다.





🤫  Auto-Encoder의 내부 구조 및 formula

입력데이터와 출력층의 벡터를 𝜒,  code(은닉층)에 해당하는 벡터를  𝟋 라 할 때,
encoder ɸ와  decoder 𝜓에 대해 아래의 수식과 같을때,

은닉층에 해당하는 code는 아래와 같이 나타낼 수 있다.
h = ɸ1 (W1x + b1). 
(이때, ɸ는 은닉층의 활성함수를 의미, W와 b는 random하게 초기화, 역전파법으로 학습됨)

은닉층에 해당하는 codedecoding하는 과정은 아래와 같이 나타낼 수 있다.
𝜒' = ɸ2 (W2x + b2). 

이후 auto-encoder는 입력 데이터 벡터 𝜒와 출력층으로 복원된 data벡터𝜒'간의 복원 에러를 줄이는 방향으로 학습한다.


=  || x -  ɸ2 (W2(ɸ1(W1x + b1)) + b2) || ^2



🤫  Auto-Encoder의 효과



🤫  Auto-Encoder  vs. GAN

GAN: original과 상관없는 결과물을 생성
Auto-Encoder:
original의 특징을 잘 살린 결과물을 생성

 

 

 

 

 

 

 

 

 

 

 

 

🧐  GAN (Generative Adversarial Networks

🤫 GAN이란?
초기 딥러닝: Drop-out과 BackPropagation을 기반으로 판별모델(discriminative model)을 사용
이는 데이터 판별에서 좋은 성능을 발휘했는데, 대표적으로 classification, regression이 있다.
반면, 생성모델(generative model)의 경우, 복잡한 확률계산으로 어려움을 겪었다.

GAN(Generative Adversial Network)판별모델생성모델, 두 신경망의 경쟁(adversial)을 통해 학습시키는 신경망이다.
판별모델의 목적: 주어진 데이터가 original인지 생성모델이 만든 가짜인지 구분하는 것
생성모델의 목적: 판별모델이 구분할 수 없도록 진짜같은 가짜 데이터를 생성하는 것
이런 GAN판별모델이 진짜와 가짜의 구분이 불가할 때까지 발전하는데, 아래와 같다.

1. 가짜 데이터는 판별모델의 학습단계에서 target data 0을 라벨링판별모델의 학습대상이 된다.
2. 생성모델의 학습단계에서 가짜데이터의 target data를 1로 설정, 가짜를 진짜로 판별하는 확률을 구한다.
이때, 경쟁의 대상이 되는 진짜는 판별모델의 학습단계에서 target data를 1로 받아 판별모델을 거친다.




🤫  Auto-Encoder  vs. GAN

GAN: original과 상관없는 결과물을 생성
Auto-Encoder: original의 특징을 잘 살린 결과물을 생성

 

 

🧐  GAN   Algorithm 

1. 랜덤 데이터 분포 Pz로부터 랜덤데이터 z를 추출.

2. 1에서 추출한 random data를 생성모델에 넣고 생성모델을 통해 가짜를 생성.


3. 2에서 얻은 가짜중 m개를 추출해 미니 배치 {z1, . . . , zm}으로 설정.

4. 진짜데이터인 train dataset 분포 Pdata(x)에서 m개를 추출, 미니 배치 {x1, . . . , xm}으로 설정.

5. 아래와 같은 gradient를 이용, 판별모델을 update.
판별모델은 가치함수(value function)를 최소화하는 것이 아닌 최대화 하는 것이 목적.
따라서 아래와 같은 gradient ascent방법을 사용한다.

이전의 gradient descent는 gradient에 (-)부호를 붙이지만
gradient ascent는 gradient에 (+)부호를 붙인다.


6. 1~5의 과정을 k번 반복 (k는 판별기 학습단계로 사용자가 직접 설정 가능)

7. 랜덤 데이터 분포 Pz로부터 random data z를 추출

8. 7에서 추출한 random data를 생성모델에 넣고 가짜data 생성

9. 8에서 얻은 가짜 중 m개를 추출, 미니 배치 {z1, . . . , zm}으로 설정.

10. 아래와 같은 gradient를 이용해 생성기를 update.
생성모델은 가치함수(value function)를 최소화하는 것이 목적.
따라서 아래와 같은 gradient descent방법을 사용한다.

11.  1~10단계를 반복 

 

+ Recent posts