Data Science/4. 딥러닝

[n433]Auto Encoder(AE)

착한곰돌e 2021. 8. 26. 08:50

■ Key words

  ㆍAE(Auto Encoder) 

     - Input(Encoder; Input X)

     - Latent Feature(잠재된 특징)

     - Output(Decoder; same Input X)

 

■ 주요내용

  ㆍAE(Auto Encoder) : "출력 = 입력"을 학습시키는 신경망. 차원 축소 등을 위해 표현학습(representation learning)

                              또는 특징학습(feature learning)을 비지도 학습의 형태로 학습하는 신경망

     ⇒ input x를 넣어 이르 특징을 잡아주는 벡터 z를 생성하고, 이를 바탕으로 x를 복원(reconstruction)하여 나온

         x'과 x의 차이를 손실함수(reconstruction error)로 정의한 후 z를 학습하여 input data의 특징을 labeling 하는 것

     - 입력데이터 자체를 레이블로 활용하는 학습방식 / 별도의 레이블이 필요없는 비지도학습.

     - 목적 : 네트워크가 중요한 의미를 갖는 신호 외의 noise를 제거하도록 훈련함으로써 차원 축소

       · 잠재적 표현(Latent Representation) : Auto Encoder에서 코딩된 코드영역

     - 구조 : encoding/decoding model(parameter)가 동시에 학습되나, 분리하여 활용 가능(Feature extractor 등)

       · Encoding : 데이터를 잠재적 표현으로 변경하는 차원축소과정(→ Latent Representation)

       · Decoding : 잠재적 표현에서 다시 데이터로 재구성하는 과정(→ Data)

       · Latent Representation : 데이터의 정보량이 많은 부분 또는 대표적인 속성이 우선 남게 됨

       * 생성 모델적 접근 방식에서 중요 ↔ 생성적 대립 신경망(GAN) 등 Encoder/Decoder 활용으로 생성모델 구현 가능

     - 표현학습/특징학습 : 특징 탐지(feature detection)나 분류(classification)를 위해 필요한 특징들을 자동으로

                                  발견하는 시스템적 기법들의 총체

       * 다층구조학습 : 여러 층으로 구성된 모델로 학습하는 것. AE가 해당.

     - Manifold Hypothesis : 고차원의 데이터가 저차원의 다양체(manifold)에 표현될 수 있다는 가정

       (기하학적 유추를 통해 4차원 이상의 공간을 연구하기 위해 도입된 개념)

     - Loss Function : 입력과 출력의 차이

       ⇒ 모델을 통과하며 압축(차원축소)되었다가 복원되더라도 특징을 학습하기 때문에 매우 근사하게 복원됨

     - AE의 활용

       · 데이터(이미지)의 차원축소(및 복원)

       · noise 제거 : 각 image에 임의의 noise를 적용하여 보다 중요한 특징을 학습할 수 있음

       · Convolutional Auto Encoder : 가중치를 CNN의 형태로 가져오는 모델.

       · 이상현상 발견용 AE : ECG(심전도) 그래프 분석을 위해 개발. 정상 모델로 학습 후 loss값이 threshold를

                                     넘는지 여부로 정상/이상 판별(정상으로 학습하였기에 비정상의 loss값이 큼)

         * 일종의 지도학습. 학습대상이 정상으로 labeling 되어있음.

         * threshold : 일반적으로 평균보다 1 표준편차(Standard Deviation) 큰 값을 지정(~ 통계 신뢰수준 범위)

                          threshold 조정을 통해 precision 및 recall 조정 가능.

  ㆍStacked Auto Encoder : Encoder의 layer가 너무 깊어지면 학습이 잘 안 일어날 수도 있으므로, AE를

                                    여러 층 쌓아 하나의 모델로 활용하는 것

 

■ Session note

ㅁ 오전 session
  ㆍAuto Encoder : 비지도 학습. Encoder(원본 이미지 차원 ↓) + Decoder(차원 ↑; 원본 이미지 복원)
  ㆍ압축 후 복원하는 과정에서 손실이 있음 / noise를 입력하여 복원 성능을 더 올릴 수 있음
  ㆍ활용 : 이상현상 발견용 AE : ECG(심전도) 분석
     - 정상적인 심전도로 학습 후 비정상 데이터로 테스트; 평균과 표준편차를 활용하여 threshold 지정 및 비정상 판별
  ㆍ목적 : label이 없는 데이터에서 input data에서 주요한 특징(feature)을 추출하기 위해
     - 추출 후 복원하는 과정을 통해 그 차이를 손실함수로 삼아 특징을 학습함
  ㆍ구조 : encoder(차원 축소) - latent feature - decoder(복구)
  ㆍ무엇을 할 수 있는가? 차원 축소(loss 발생) / 노이즈 제거 / 이상 감지
  ㆍencoder와 decoder의 가중치를 역치로 사용하는 이유 : 학습할 parameter를 줄여서 속도가 더 빠름 / 성능도 잘 나옴
  ㆍ과제 : encoder 층을 늘리면서 결과 변화 확인해보기 / 층이 많다고 좋은 것은 아님; 데이터마다 다름
  ? noise : 일반화, 과적합 방지; 모델 성능 증가 + CNN 활용으로 성능 증가
  ? mnist image 크기 784(28, 28, 1) :  28*28pixel, channel 1(흑백) / 이미지 크기가 커지고 색(RGB)가 들어갈 경우, input shape이 달라지게 됨
  ? 일단은 정상범주 사람의 데이터만 넣고 테스트를 비정상적인 사람을 하는건가요?
     - 이상치 파악
     - 정상범위로 학습
     - 정상 / 비정상 테스트
  ? 모델에 input_shape를 넣을 때는 실제 이미지의 픽셀과 다른 값을 넣으면 모델이 알아서 크롭해서 사용하게 되나요?
    그 CNN 과제할 때 사람마다 input_shape을 다르게 했던데 다 모델이 돌아가더라구요
    CNN할때 보니까 인풋 안넣어주면 빌드가 안된다고 하던데
     - 정석적으로는 원래 image의 실제 pixel값을 넣어줘야 함
     - keras의 발달로 Input(shape)을 입력하지 않아도 알아서 인지함
  ? 비슷한 질문인데 이미지 데이터 제너레이터에서 사이즈 지정해주는것도 완전 자유인가요? 아니면 좋은 사이즈가 있을까요?
     - 보통 model 구조에 맞춰서 입력함 / 필요시 실제 사이즈로 넣기도 함
  ? AE로 푸는 문제는 굳이 레이블이 필요없는 문제 위주인가?
     - AE의 목적은 image 압축임. 이를 여러 방면으로 활용하는 것.
  ? 오래된 사진 복원에 AE 사용? 목적은 차원 축소이지만, noise 제거 차원에서는 활용 가능할 듯
  ? 혹시 AE를 어제 배운 segmentation, object detection 등에 활용 가능하다면 성능적인 차원에서 AE와 (Faster)R-CNN 중 어느 것이 더 좋을까요?
     - AE는 차원 축소를 위한 것이므로, segementation 등의 학습에 활용은 가능하나, 이 둘의 목적이 다르므로 직접적인 성능 비교는 불가함
  ? 하나의 인코더에 레이어를 여러개 쌓는것과 stacked AE는 다른건가요?
     - 학습 방법에 차이가 있음. layer가 이어진 AE는 역전파 1회 / stacked AE는 각각이 AE. 단계에 따라 역전파를 n회 시행함. layer의 층이 깊어지면 학습이 어려워질 것으로 생각하고 분리한 stacked AE 방법이 고안됨. stacked AE 방법의 성능이 좀 더 좋다고 알려짐

ㅁ 오후 session
  ㆍAE의 데이터 시각화 : 디코더에서 이미지 복원, 노이즈 제거 이미지 제작 등
  ㆍAuto Encoder
     - 목적 : 이미지의 차원 축소
     - 할 수 있는 것 : 노이즈 제거, 특성추출, 이상치 감지
     - 구조 : 인코더(이미지의 차원 축소) + 디코더(차원 복구)
        ⇒ 인코더로 축소한 것이 특징을 잘 축소했는지 확인하기 위해 디코더로 복구
     - latent feature
  ㆍstacked AE : AE의 layer가 너무 깊어지게 되면 학습이 잘 안 될 수 있으므로, 여러 개의 AE를 쌓아올린 모델
  ㆍDenoising : noise는 해당 image의 특징이 아니기 때문에, 차원을 축소하고 복원하는 과정에서 사라지게 됨
  ㆍlatent Variable : input data의 중요한 feature만 남아있는 것
  ? 정보량이 많은 부분 = 주요한 부분? != feature selection, = feature extraction; 선택이 아닌 추출
     - 대표적이고 정보량이 많은 부분이 많이 반영될 것. 중요 특징들은 가중치에 의해서 결정됨
  ㆍ이상치 발견 AE
     - 주의할 점 : 정상(주류) 데이터로만 학습 → loss 확인 → 모르는(비정상) 데이터는 loss가 커서 threshold 이상일 경우 이상치로 분류
  ? 오래된 사진 복원 : 학습 시엔 깔끔한 데이터(원본) 필요 / 사용 시엔 오래된 사진을 줄 수 있지만, 학습 시엔 사용 못 함.
  ? stacked AE : input 50 → softmax layer → output 10
     - latent feature가 50. 이 latent feature를 가지고 classification에 활용하는 층임.
  * GAN : AE의 반대 과정
  ㆍAE로 사전학습한 것을 전이학습으로 이용하여 활용할 수 있음 

 

■ 주요함수

  ㆍ

 

■ Reference

  ㆍAuto Encoder : https://www.youtube.com/watch?v=YxtzQbe2UaE 

  ㆍ Auto Encoder : https://youtu.be/54hyK1J4wTc

  ㆍAuto Encoder : https://www.youtube.com/watch?v=3jmcHZq3A5s&t=93s