Autoencoders
- 입력데이터 자체를 레이블로 활용하는 학습방식이다.
- 별도의 레이블이 필요하지 않은 비지도 학습 방식이다.
- 데이터 코딩(encoding, decoding)을 위해서 원하는 차원만 할당하면 자동으로 학습하여 원하는 형태로 데이터의 차원을 축소해주는 신경망의 한 어플리케이션이다.
- 오토 인코더의 목적은 네트워크가 중요한 의미를 갖는 신호 외의 노이즈를 제거하도록 훈련함으로써 일반적인 차원 축소 방법론과 비슷한 목적으로 활용된다.
- 여기서 코딩된 코드 영역을 입력 데이터의 잠재적 표현(Latent representation)이라고 부르게 된다.
- 데이터를 잠재적 표현으로 변경하는 차원축소과정(encoding)과 잠재적 표현에서 다시 데이터로 재구성과정(decoding)은 각각의 가중치의 연산을 통해 이뤄지고, 이를 신경망을 통해 학습한다.
- 학습 과정에서는 인코딩 모델(파라미터)와 디코딩 모델(파라미터)가 동시에 학습되지만, 이를 각각의 모델로 구분하여 사용할 수 있다.
- 오토 인코더를 통하여 데이터의 노이즈를 제거하도록 학습하면 노이즈가 제거된 데이터의 특징값을 추출하는 특성값 추출기(Feature extractor)로 활용할 수 있고, 이 모델을 다양한 방식으로 활용할 수 있다.
- label 없이도 이미지를 일정 크기의 벡터로 자동 표현 할 수 있을까?
- 고정 크기의 벡터로 표현해야 하는 이유
- Information Retrieval
- Dimensionality Reduction
- 오토인코더를 사용하여 Word2Vec처럼, Image2Vec형태로 이미지를 벡터화 하는 것과 유사한 목표를 달성할 수 있다.
- 오토인코더는 ‘출력 = 입력’을 학습시키는 신경망이다.
- ‘비지도학습’이라고도 하지만, Self-supervised learning(SSL)의 워딩과 비슷한 개념이다.
- 학습이 완료된 후에도 일반적으로 입력과 완벽히 똑같은 출력을 만들 수 없겠지만, 매우 근사한 수치로 복제된다.
- Loss func에서 입력과 출력의 차이를 이용하기 때문에 출력은 입력과 최대한 근사하게 만들기 위해서 Latent representation으로 encoding하고, 다시 data로 decoding 하면서 이 latent는 데이터의 정보량이 많은 부분, 또는 대표적인 속성을 우선 학습하게 된다.
- 이렇기 때문에 AE를 생성 모델적 접근 방식에서도 중요한 부분으로 다뤄지게 된다.
- 생성모델의 대표적인 생성적 대립 신경망(GAN)에서도 배우지만, 인코더와 디코더가 있는 구조를 이용해 생성모델을 구현할 수 있다.
- 오토 인코더는 다양한 방식으로 활용할 수 있지만, 기존 신경망의 원리가 동일하며, 또한 신경망의 특이 케이스라고 생각하면 된다.
- 기존에 배운 역전파 및 경사하강법은 여기에도 잘 동작한다.
- Input에서 Code(Latent)까지
Encoder
는 입력 데이터를 압축하고Decoder
는 압축되지 않은 버전의 데이터를 생성하여 가능한 정확하게 입력을 재구성한다. - 학습과정(minimizing a loss function): $ L(x, g(f(x))) $
- $L$ 은 손실함수, $g(f(x))$와 $x$의 dissimiliarity (예, mean squared error)
- $f$ 는 encoder function
- $g$ 는 decoder function
Stacked AE
- 여러개의 히든 레이어를 가지는 오토인코더이며, 레이어를 추가할수록 오토인코더가 더 복잡한 코딩(부호화)을 학습할 수 있다.
- 히든레이어를 기준으로 대칭인 구조를 가진다.
실습 1
1 |
|
기본 오토 인코더
- 이미지를 64차원 잠재 벡터로 압축하는 가장 간단한 형태의 encoder와 잠재 공간에서 원본 이미지를 재구성하는 decoder라는 두 개의 Dense 레이어로 구성된 모델이다.
- 모델 정의: Keras Model Subclassing API
1 |
|
실습 2
노이즈 제거용 오토 인코더
- 오토인코더는 이미지에서 노이즈를 제거하도록 훈련될 수도 있다.
- 각 이미지에 임의의 노이즈를 적용하여 Fashion MNIST 데이터셋의 노이즈 버전을 생성한다.
- 다음 잡음이 있는 이미지를 입력으로 사용하고 원본 이미지를 대상으로 사용하여 오토 인코더를 훈련한다.
1 |
|
Convolutional autoencoder
- 가중치의 형태를 CNN으로 가져온다.
- Conv2D 레이어를
encoder
로 사용하고, 반대로decoder
로는 Conv2DTranspose를 사용하는 구조이다.
1 |
|
실습 3
이상현상 발견 용 오토 인코더
- ECG 5000 데이터 세트에서 이상현상을 감지하도록 오토인코더를 훈련시킨다.
- 각각 140개의 데이터로 구성된 5000개의 심전도(ECG, Electrocardiograms)가 포함되어 있다.
- 각 예제는 0(비정상 리듬) 또는 1(정상 리듬)으로 레이블이 지정된 단순화 된 버전의 데이터셋을 사용한다.
- 이 예제는 레이블이 지정된 데이터셋이므로 지도학습 문제라고 할 수 있다.
- 이 예제의 목표는 사용 가능한 레이블이 없는 더 큰 데이터셋에 적용할 수 있는 이상현상 감지 개념을 설명하는 것이다.
- 오토 인코더는 재구성 오류를 최소화하도록 훈련되었다.
- 오토 인코더를 정상적인 리듬으로만 훈련한 뒤 이를 사용하여 모든 데이터를 재구성한다.
- 여기서 우리의 가설은 비정상적인 리듬이 더 높은 재건(reconstruction) 오류를 가질 것이라는 것이다.
- 이것을 이용하여 오류가 임계값을 초과하는 경우 리듬을 이상으로 분류하는 것이다.
1 |
|
1 |
|
1 |
|
1 |
|
- 재구성 오류가 일반 ECG의 표준 편차 1보다 큰 경우 ECG를 비정상으로 분류하도록 정의한다.
- 학습 세트에서 일반 ECG, 오토 인코더에 의해 인코딩 및 디코딩 된 후의 재구성 및 재구성 오류를 플로팅 한다.
1 |
|
1 |
|
이상현상 탐지
- 재구성 손실이 고정 임계 값보다 큰지 여부를 계산하여 이상을 감지한다.
- 이 튜토리얼에서는 훈련 세트의 정상 예제에 대한 MAE를 계산한 다음 재구성 오차가 훈련 세트의 표준 편차보다 큰 경우 향우 예제를 비정상적인 것으로 분류한다.
1 |
|
- 평균보다 1SD가 높은 임계값을 선택한다.
- 통계수준에서 2SD를 벗어나게 되면, 95%의 신뢰구간을 벗어나는 것을 의미한다.
1 |
|
1 |
|
Review
오토인코더(AutoEncoder, AE)
- 단순히 입력을 출력으로 복사하는 신경망이다.
- 간단한 신경망처럼 보이지만 네트워크에 여러가지 방법으로 제약을 줌으로써 어려운 신경망을 만든다.
- hidden layer의 뉴런 수를 input layer 보다 작게 해서 데이터를 압축(차원을 축소)한다거나, 입력 데이터에 노이즈(noise)를 추가한 후 원본 입력을 복원할 수 있도록 네트워크를 학습시키는 등 다양한 오토인코더가 있다.
- 이러한 제약들은 오토인코더가 단순히 입력을 바로 출력으로 복사하지 못하도록 방지하며, 데이터를 효율적으로 표현(representataion)하는 방법을 학습하도록 제어한다.
잠재 벡터(Latent Vector)
- 차원이 줄어든 채로 데이터를 잘 설명할 수 있는 잠재 공간에서의 벡터
이상치 탐지(Anomaly Detection)
- Anomaly Detection이란, Normal(정상) sample과 Abnormal(비정상, 이상치, 특이치) sample을 구별해내는 문제를 의미한다.
- Anomaly Detection은 학습 데이터 셋에 비정상적인 sample이 포함되는지, 각 sample의 label이 존재하는지, 비정상적인 sample의 성격이 정상 sample과 어떻게 다른지, 정상 sample의 class가 단일 class 인지 Multi-class 인지 등에 따라 다른 용어를 사용한다.
매니폴드(Manifold), 혹은 매니폴드 학습(Manifold Learning)
- Manifold란 고차원 데이터(e.g Image의 경우 (256, 256, 3) or…)가 있을 때 고차원 데이터를 데이터 공간에 뿌리면 sample들을 잘 아우르는 subspace가 있을 것이라는 가정에서 학습을 진행하는 방법이다.
- 이렇게 찾은 manifold는 데이터의 차원을 축소시킬 수 있다.
Stacked AutoEncoder(Stacked AE)
- Stacked 오토 인코더는 여러개의 히든 레이어를 가지는 오토인코더이며, 레이어를 추가할수록 오토인코더가 더 복잡한 코딩을 할 수 있다.
- 히든 레이어를 기준으로 대칭인 구조를 가진다.
Denoising AutoEncoder (DAE)
- 오토인코더가 의미있는 특성을 학습하도록 제약을 주는 다른 방법은 입력에 noise를 추가하고, 노이즈가 없는 원본 입력을 재구성하여 학습시키는 것이다.
- 노이즈는 Gaussian 노이즈를 추가하거나, dropout처럼 랜덤하게 입력 노드를 꺼서 발생 시킬 수 있다.
Variational AutoEncoder (VAE)
- 2014년 D.Kingma와 M.Welling이 Auto-Encoding Variational Bayes 논문에서 제안한 오토인코더의 한 종류이다.
- 확률적 오토인코더(probabilistic autoencoder)로 학습이 끝난 후에도 출력이 부분적으로 우연에 의해 결정된다.
- 생성 오토인코더(generatie autoencoder)로, 학습 데이터셋에서 샘플링된 것과 같은 새로운 샘플을 생성할 수 있다.
- VAE의 코딩층은 다른 오토인코더와 다른 부분이 있는데 주어진 입력에 대해 바로 코딩을 만드는 것이 아니라, 인코더는 평균 코딩과 표준 편차 코딩을 만든다.
- 실제 코딩은 가우시안 분포에서 랜덤하게 샘플링되며, 이렇게 샘플링 된 코딩을 디코더가 원본 입력으로 재구성하게 된다.
- VAE는 마치 가우시안 분포에서 샘플링된 것처럼 보이는 코딩을 만드는 경향이 있는데, 학습하는 동안 손실함수가 코딩을 가우시안 샘플의 집합처럼 보이는 형태를 가진 코딩 공간 또는 잠재변수공간(latent space)로 이동시키기 때문이다.
- 이러한 이유로 VAE는 학습이 끝난 후에 새로운 샘플을 가우시안 분포로부터 랜덤한 코딩을 샘플링해 디코딩해서 생성할 수 있다.