towardsdatascience.com/introduction-to-autoencoders-7a47cf4ef14b
Introduction To Autoencoders
A Brief Overview
towardsdatascience.com
*위 내용 요약/정리한 글임을 알립니다!
Autoencoder란?:
비지도학습 중 하나로, 작은 차원에서 데이터와 represent 데이터 사이의 기초가 되는 상관관계를 찾는 목적이 있다.
1. Encoder: input을 받아서 작은 차원으로 만드는 구간
2. Bottleneck: encoding으로 만들어진 작은 차원인 hidden layer.
3. Decoder: 인코딩 된 값들로 input과 최대한 비슷하게 recreate하는 구간
Phi:Encoder의 representing 파라미터
Theta: Decoder의 representing 파라미터
Decoder가 Input과 최대한 비슷한 output을 만들기 위해 Reconstruction Loss라는 손실함수를 최소화하는 방향으로 학습한다.
(Mean Square error나 Binary Crossentropy(데이터가 binary일때)를 사용한다.)
**AutoEncoder를 사용하는 이유는!! 데이터 사이의 깊은 상관관계correlation과 관계relationships를 이해하고 표현하고 싶기 때문이다.
그래서 일반화된 낮은 차원의 표현이 필요하다.
-> 만약 data의 features가 correlated하지 않으면 autodencoder가 낮은 차원에서 데이터를 표현하기 어렵다.
NN으로 Autoencoder의 Bottleneck을 설계하면 bottleneck의 nodes가 많게되어,
단순히 input data를 기억함으로서 네트워크가 과대적합overfitting 할 수 있다.
그러면 encoding할때 올바른 correlation을 찾을 수가 없다.
하지만 그렇다고, 적은 수의 nodes를 수면 모든 relationship를 찾기 어렵다.
따라서 적절한 nodes를 찾으며 네트워크를 디자인해야한다.
PCA와 다른점?
PCA는 데이터 안에서 최대 분산과 중요한 correlation을 잡아서 원래 데이터를 설명하는 저차원 직교 hyperplane을 찾는다.
hyperplane을 찾기에 linear이다. 하지만, 종종 correlation은 non-linear이기에 PCArk wkqdmf tn djqtek.
Autoencoder의 응용사례:
1. Anomaly detection에 사용
특정 데이터셋을 Autoencoder에 넣고 학습하면 데이터들간의 관계를 찾아 input된 데이터셋과 최대한 비슷한(같은 종류)인 데이터셋을 만든다.(Reconstruction error가 작음)
만약, 다른 데이터셋이 들어가면 reconstruction error가 크다.
그래서 우리가 적절한 cutoff를 적용한다면 이상치 탐지기를 만들 수 있다.
2. Noise Removal에 사용
만약 noisy data를 input으로 주고 clean data를 output으로 준 뒤,
주어진 data를 Autoencoder가 학습한다면, noise points는 보통 correlation이 없기 때문에, 학습된 Autoencoder는 noise 제거에 매우 유용하다.
Autoencoder가 data를 저차원에서 표현한다면, encoding은 보통 중요한 정보들만 가지고, 랜덤한 것들은 무시한다.
그래서 아웃풋으로 디코딩된 데이터는 noise나 자잘한 것과 상관 없다.
3. Generative model에 사용
GAN이 등장하기 전에 Autoencoder가 생성 모델generative model로 사용되었다.
Autoencoder 중 Variational Autoencoder가 생성 목적으로 쓰였다.
4. Collaborative filtering에 사용
보통 Collaborative filtering은 matrix factorization방법으로 쓰이지만, Autoencdoer는 dependency를 배울 수 있고 item-user-matrix를 예측하는 것을 배울 수 있다.
Autoencoder의 종류
1. Undercomplete Autoencoder
Autoencoder의 아키텍처 중 가장 간단한 모델이다.
이 아키텍처의 핵심은 hidden layers와 central bottleneck에 더해질 수 있는 노드의 숫자에 제약을 두어, 네트워크를 통한 정보의 흐름을 제약하는 것이다. 그래서 결국 reconstruction할때 최고의 encoding을 만들 수 있다.
bottleneck을 이용하여 정보의 흐름을 제한함으로서 모델이 input을 기억하여 cheating하는 일은 없다.
2. Sparse Autoencoders
정보의 흐름을 제한할 때 위에서 hidden layer에 있는 노드의 수를 제한한다고 말했다.
하지만 종종 위 방법은 hidden layer의 노드 수 제한과 shallower network가 데이터 아이템들 사이의 복잡한 관계를 찾기 어려울 수 있다.
그래서 deeper network와 더 많은 hidden layer의 노드를 사용해야 되는데, 그렇다고 hidden layer의 노드 수를 늘리기에는 network가 input을 기억해서 오버피팅될 가능성이 있다.
그래서! regularizers가 필요하다!
regularization하는 동안 보통 weights를 규제하지만, 이 경우에서는 실제로 한 hidden layer에서 다른 hidden layer로 전달하는 activation을 규제한다. 즉, hidden layer의 모든노드들이 학습하지 않도록 두는 것이다.
activation function은 특정 노드에서 얼마나 많은 정보를 전달할지를 결정한다.(게이트처럼: 0이면 정보 전달X)
그래서 모델이 activation 여부를 결정하고 activation value를 penalize하게끔 둔다.
이처럼 규제하는 방식은 보통 2가지 방법이 있다.
1. L1 Regularization
많은 정보가 담긴 hidden layer의 nodes만 사용하고 나머지는 block한다.
regularizer부분은 hidden layer(h)의 모든 노드들의 활성화를 합한 값이다. 그래서 loss function을 줄이려할 때 activation을 줄이게된다.
tuning parameter로 규제 정도를 정하는 lambda를 쓴다.
2. KL Divergence
Kullback-Leibler Divergence는 두 확률 분포 사이의 비슷함과 다름을 측청한다.
p와 q가 얼마나 비슷한지를 알려준다.
이 방법은 sparsity parameter ρ(Rho)를 사용한다. Rho는 샘플셋 뉴런들의 평균 activation를 알려준다.
불필요한 샘플들의 activation을 0으로 만들기 위해, 매우 낮은 Rho 값을 사용해서 뉴런과 노드들이 평균적으로 낮은 값을 유지한다.
KL Divergence가 어떻게 작용되는지 알기위해서는 Bernoulli Distribution에 대해 알아야한다.
Bernoulli Distribution: 값 1을 확률 p로 받고 값 0을 확률 q=1-p로 받는 랜덤 변수의 discrete 확률분포
-> 즉, binary 수준의 확률 분포이다. 이런 것을 우리의 노드에 적용하고 싶다.
j라는 특정 뉴런에서 볼때 Rho의 계산은 아래와 같다.
m은 observations의 수이고 a는 hidden layer(h) 뉴런의 activation이다.
위 사진에서 빨간색 노드는 불필요한 노드로, 작동하지 않는다.
3. Denoising Autoencoders
위에서 Noise Removal에 관한 Autoencoder이다.
데이터의 관계를 표현하고 작은 사이즈의 encoding을 나타내기 위해, 제거된 noise를 보는게 아니라 object image를 본다.
이 때, input과 output이 다르기에 memorization문제가 더 이상 존재하지 않아, 노드의 숫자를 제한하거나 regularizer를 사용할 필요는 없다
.
4. Contractive Autoencoders
이 아키텍처의 핵심은 denoising encoder와 비슷하다.
encodings은 input과 비슷한 것을 만든다: 다른 말로, 만약 우리가 input을 바꾸거나 조금 비틀어도 encodings는 변하지 않고 그대로 같을 것이다. 그래서 이 encodings는 Feature extractions에 이용된다.
Autoencoder는 여러 종류의 NN을 시행할 수 있다. (이미지면 CNN, 시계열이면 RNN)
5. Variational Autoencoders
이 Autoencoder는 위에서 말한 autoencoder와 다른 종류이다.
그 전에, 저차원 encoding이 무슨 뜻일까?
784x1 이나 28x28차원의 input을 32x1차원으로 바꾸면 데이터의 정보를 많이 반영하는 중요한 32개의 features가 있다는 말이다.
만약, 얼굴 이미지 데이터를 input으로 두고 bottleneck layer에 6개의 노드가 있다면,
얼굴 이미지를 나타내는 주요 정보 6개의 feature를 얻게 된다: a smile, skin tone, gender, geard, wears glasses, and hair color
encoding은 이러한 features에 numerical value를 가진다.
위에서 말한 저차원 encoding의 6개 features는 latent features/attributes라고 한다.
그럼, latent attributes의 다른 값들은 이미지들의 features 차이를 나타낸다.
latent attributes는 항상 discrete한 값을 가지는데, variational autoencoder는 다르다.
discrete value를 전달하는 것 대신, 각 latent attribute를 확률 분포로서 보낸다.
그래서 전체적으로 볼 때 아래와 같다.
latent attribute가 확률 분포로 값을 전달한다.
decoder는 이 latent 분포에서 sampling하고 image를 reconstruct한다.
그래서! sampling이 input data와 비슷하게끔 backpropagated해서 image reconstructed하는 것이 아니라 랜덤으로 샘플링한다.
이것이 Variational Autoencoder가 generative network라고 알려진 이유이다.
각 latent vector에서 분포를 생성하기 위해, encoder는 정규 분포를 만들기 위한 확률 분포의 평균과 표준편차를 전달한다.
Probabilistic Encoder는 Recognition model이라고 불리고
Probabilistic Decoder는 Generative model이라고 불린다.
z(latent value)가 랜덤으로 샘플링 되었으니, 알 수 없어서 hidden variable이라고 명한다.
우리의 목표가 input data와 reconstructed output을 최대한 동일하게 아는것이여서,
z로부터 x를 reconstruct해야 되기에 P(z|x): x와 비슷한 z의 확률 값을 찾는 것이다.
즉, 우린 x를 알지만 z를 추정해야된다.
문제는 다중 적분 문제이고 적분의 수가 latent attribute 또는 encoding 차원의 증가에 따라 증가하게되어 z를 추정하기 어렵다는 것이다.
이 문제를 해결하기 위해,
p(z|x)와 비슷하지만 추정 가능할 수 있는 q(z|x)를 만든다.
이때, q(z|x)와 p(z|x), 두 확률 분포가 얼마나 비슷한 지를 측정하기 위해 KL diverence를 이용한다.
그래서 variational autoencoder의 loss function은 다음과 같다:
첫번째 항은 reconstruction error이고
두번째 항은 두 분포의 KL divergence이다.
-> Reparameterization Trick이라고 불리는 방법을 이용해서 back propagation없이 latent point를 resample한다.
'AI_ML' 카테고리의 다른 글
개체명 인식 (0) | 2021.07.21 |
---|---|
Seq2Seq (0) | 2021.07.15 |
AutoRec: Autoencoders Meet Collaborative Filtering (0) | 2021.03.18 |
spacy를 이용한 자연어처리 (0) | 2021.03.14 |
DNN Recomendation 해설 및 정리 (0) | 2021.03.08 |