2022 하계 모각코

[4회차] Deep Learning - AutoEncoder

yeonarom 2022. 7. 26. 19:10

[Deep Learning]

인코딩(Encoding) - "문자(문자열)를 바이트 형식으로 변환"

컴퓨터에서 인코딩은 동영상이나 문자 인코딩 뿐만 아니라 사람이 인지할 수 있는 형태의 데이터를 약속된 규칙에 의해 컴퓨터가 사용하는 0과 1로 변환하는 과정을 통틀어 말한다.

쉽게 말해 사람이 이해할 수 있는 데이터를 컴퓨터가 이해할 수 있도록 바꿔주는 것이다.

그 예시로 'ASCII', 'URL 인코딩', 'HTML 인코딩', 'Base64 인코딩' 등이 존재한다.

디코딩(Decoding) - "바이트 형식을 문자(문자열)로 변환"

디코딩은 인코딩의 반대로 컴퓨터가 이해할 수 있는 데이터를 사람이 이해할 수 있도록 바꿔주는 것이다.


Autoencoder

Autoencoder는 입력을 출력으로 복사하는 신경망이다.

Autoencoder

간단한 신경망처럼 보일 수 있지만 네트워크에 여러 가지 방법으로 제약을 줌으로써 어려운 신경망으로 만든다.

예를 들면 hidden layer의 뉴런 수를 input layer(입력층) 보다 작게 해 데이터를 압축(차원을 축소)하거나, 입력 데이터에 노이즈(noise)를 추가한 후 원본 입력을 복원할 수 있도록 네트워크를 학습시키는 등의 다양한 Autoencoder가 있다.

이런 제약들은 Autoencoder가 단순히 입력을 바로 출력으로 복사하지 못하도록 방지하며, 데이터를 효율적으로 표현하는 방법을 학습하도록 제어한다.

 

Tensorflow의 MNIST 데이터셋을 이용하여 데이터를 압축하는 Autoencoder를 만들어보자.

input layer의 크기는 28x28로 하고 총 3개의 hidden layer를 만들어준다.

첫 번째 hidden layer의 필터 수는 64, kernel 크기는 3, stride는 2로 지정해준다.

두 번째 hidden layer의 필터 수는 128, kernel 크기는 3, stride는 2로 지정해준다.

여기까지가 인코딩 과정이다.

마지막으로 세 번째 hidden layer의 필터 수는 64, kernel 크기는 3, stride는 1로 지정해준다.

세 번째 hidden layer의 전후에 UpSampling2D로 이미지의 크기를 키워준다.

마지막 output layer는 필터 수 1, kernel 크기 3, stride 1로 지정해준다.

이 모델을 summary하면 아래와 같은 결과가 나온다.

 

Autoencoder 모델

이 모델을 학습시켜 이미지를 출력해보면 아래와 같다.

왼쪽이 원본 이미지, 오른쪽이 모델을 사용한 결과이다.

왼쪽이 원본, 오른쪽이 Autoencoder를 사용한 결과