본문 바로가기
엑셈 경쟁력/시계열 데이터처리 AI 알고리즘

Chapter 4-5. AutoEncoder

by EXEM 2023. 12. 27.

오토인코더란?

 

오토인코더는 데이터의 압축을 통해 특성을 학습하는 비지도 방법의 인공 신경망이다. 오토 인코더의 목적은 고차원 데이터를 저차원으로 압축하여 데이터의 중요한 특성을 찾는 것이다.

오토인코더 [출처]: https://wikidocs.net/214507

 

 

오토인코더는 3가지 부분으로 이루어진다. 먼저, 인코더는 입력 데이터를 작은 차원으로 압축하는 부분이다. 이어지는 바틀넥 부분은 압축된 정보를 담고 있는 영역으로 오토인코더 알고리즘의 핵심에 해당한다. 이 부분을 잠재(latent) 영역, 혹은 코딩(coding) 영역이라고도 부른다. 마지막 디코더 부분은 압축되었던 데이터를 다시 입력형태와 동일하도록 변형하는 부분이다.

 

신경망의 핵심인 바틀넥 부분에 대해 조금 더 이야기하겠다. 바틀넥은 통과하는 정보의 양을 제한하기 위해 존재한다. 아키텍처를 보면 바틀넥의 크기가 신경망에서 가장 작은 것을 확인할 수 있는데 이 때문에 데이터의 중요한 정보만이 신경망을 통과할 수 있다. 이러한 기능은 Chapter 3-6에서 배웠던 차원 축소와 유사하다. 또한, 바틀넥의 이러한 압축은 신경망의 과적합을 방지해준다. 일반적으로 바틀넥의 사이즈가 작으면 과적합의 위험은 내려간다. 하지만 너무 작은 바틀넥은 저장할 수 있는 정보의 양을 제한하여 중요한 정보도 사라질 수 있음을 주의하자.

 

오토인코더의 하이퍼파라미터는 아래의 4가지가 있다.

 

  • 바틀넥(코드)의 크기

바틀넥의 크기는 가장 중요한 하이퍼파라미터이다. 위에서도 말했듯 바틀넥이 작을 수록 과적합의 위험이 사라지지만 너무 작은 바틀넥은 중요한 정보까지도 사라지게한다. 데이터의 특성을 파악하여 적절한 바틀넥의 크기를 설정하려는 노력이 필요하다.

 

  • 층의 개수

뒤에서 소개하겠지만 가장 기본적인 오토인코더는 적층 오토인코더이다. 즉, 대부분의 딥러닝 모델이 그러하듯 신경망의 층의 수를 늘이거나 줄일 수 있다. 층의 수가 많아지면 모델의 복잡도가 높아지지만 성능을 높일 수 있고 층의 수를 줄이면 성능은 떨어지지만 학습의 속도 및 메모리 사용량 등을 줄일 수 있다.

 

  • 각 층마다 노드의 개수

노드의 수는 각 층의 가중치 수를 결정한다. 일반적으로, 노드의 수는 인코더 부분에서 점점 줄어들어 바틀넥에서 최소된 후 디코더 부분에서 점차 늘어나 원래의 크기를 되찾는다.

 

  • 재구축 손실함수

오토인코더의 가장 큰 특징은 학습 데이터와 레이블 데이터가 동일하다는 것이다. 즉, 오토인코더를 통과하면 처음 입력된 데이터와 유사한(재구축 된) 데이터가 출력으로 나온다. 오토인코더에서 가장 활발하게 사용되는 손실함수는 입력 데이터와 재구축 데이터의 L2 Loss 혹은 L1 Loss이다. 이외에도 Binary Cross Entropy 혹은 커스터마이즈한 손실함수 등을 학습에 이용하고 있다. 

 

사실 오토인코더는 1980대에 처음 등장한 알고리즘으로 당시에는 차원축소를 위하여 이용되었다. 시간이 지남에 따라 오토인코더는 점점 진화하여 현재는 데이터 생성 알고리즘 전반에 널리 이용되고 있다. 아래는 앞으로 소개할 오토인코더이다. 이 가운데 이번 장에서는 가장 기본이되는 적층 오토인코더에 대하여 학습한다.

 

  • 적층 오토인코더
  • Robust 오토인코더
  • 희소 오토인코더
  • 변이형 오토인코더
  • 잡음제거 오토인코더

 

 

적층 오토인코더

 

적층 오토인코더는 가장 인기있는 오토인코더이다. 

적층 오토인코더 [출처]:https://medium.com/@evertongomede/unveiling-the-power-of-stacked-autoencoders-675de2ce4273

 

다음은 길이가 5인 데이터가 입력되어 길이가 2인 coding 영역을 지난 후 다시 처음과 동일한 길이 5로 디코딩되는 적층 오토인코더 아키텍처이다. 그림에서 보면 인코딩 영역에 2개의 히든 레이어가 있고 디코딩 영역에도 2개의 히든레이어가 있음을 확인할 수 있다. 이처럼 심층 신경망 구조의 오토인코더를 적층 오토인코더라고 부른다. 층이 많으면 이미지나 텍스트 등 고차원 데이터의 학습에 적합하지만 이는 동시에 저차원 데이터의 학습에서는 과적합 위험이 높아짐을 의미한다. 따라서, 학습을 진행할 데이터의 특성에 맞게 적절하게 설계하는 것이 필요하다.  

 

 

실습

 

오토인코더에 Dense layer 외에도 convolution layer 혹은 LSTM layer를 추가한 형태도 활발하게 이용되고 있다. 이번 실습에서는 convolution layer로 이루어진 오토인코더를 이용하여 층간소음 시계열 데이터에서 이상을 탐지해보자.

 

먼저, 필요한 라이브러리를 임포트한다. 이어서 github 링크를 통해 층간소음 데이터를 다운로드 받는다. art daily small noise는 학습 데이터이고 이상 데이터가 포함된 art daily jumpsup은 테스트 데이터이다. 그래프를 그려보면 art daily jumpsup에서 이상 데이터를 확인할 수 있다.

 

art daily small noise(좌); art daily jumpsup(우)

 

 

데이터를 정규화 한 후 윈도우를 이용하여 전처리를 진행하였다. 이를 풀어서 설명해보면 기준 윈도우의 크기가 288일 경우 전체 시계열에서 [0~287]까지의 윈도우가 첫번째 데이터가 된다. 이어서 [1~288]가 두번째 윈도우이다. 윈도우는 이런 방식으로 마지막 윈도우인 [3744~4031]까지 생성한다.

 

 

합성곱 오토인코더를 생성하였다. 최적화 방법에는 Adam을 이용하였고 손실함수는 MSE를 이용하였다.

 

 

학습을 진행하였다. 학습데이터와 정답데이터가 동일함을 확인할 수 있다, val_loss가 10회 이상 줄어들지 않을 경우 학습을 멈추도록 patience를 설정하였다.

 

 

첫번째 윈도우의 실제 데이터와 재구축한 데이터를 그래프로 나타내었다. 재구축 데이터가 실제 데이터를 어느정도 재현하였음을 확인할 수 있다. 아래 히스토그램은 학습 데이터의 MSE 분포이다. 이 중 가장 큰 MSE인 0.1658을 THRESHOLD로 세팅하였다.

 

[좌] 첫번째 윈도우의 실제 데이터와 재구축한 데이터 / [우] 학습 데이터의 분포

 

테스트 데이터도 전처리를 진행한 후 오토인코더를 통과시켰다. 학습 데이터를 통해 세팅한 THRESHOLD를 이용하여 이상 윈도우를 탐지하였다. 394개의 윈도우가 이상으로 탐지되었음을 확인할 수 있다.

 

 

이상으로 탐지된 윈도우를 통하여 전체 시계열에서 이상을 탐지해본다. 방법은 정하기 나름이지만 여기서는 i – interval +1에서 i 사이의 윈도우가 모두 이상으로 탐지된 경우 i 번째 시계열 데이터를 이상을 정의하였다. 전체 시계열에서 이상으로 탐지된 부분을 붉은색으로 나타내었다. 기대했던대로 art daily jumpsup의 소음이 큰 지점을 이상 데이터로 탐지하였다. 

 

[좌] 테스트 데이터의 분포 / [우] art daily jumpsup의 이상 탐지 결과

 

 

 

 

 

글 | 신기술본부 AI기술연구2팀 임상오

 

 

댓글