Zhang, Y. F., Thorburn, P. J., Xiang, W., & Fitch, P. (2019). SSIM—A deep learning approach for recovering missing time series sensor data. IEEE Internet of Things Journal, 6(4), 6618-6628.
본 논문에서는 시계열 데이터의 결측치를 추정할 수 있는 방법론인 SSIM (Sequence-to-sequence Imputation Model)을 소개하고 있습니다. 논문의 전반적인 내용을 리뷰하기보다는 이 방법론이 왜 제안되었는지, 그리고 어떠한 아키텍처로 구성되어있는지 살펴보고자 합니다.
1. Introduction
무선 센서 및 장치에서 수집되는 데이터는 서버, 통신 오류 등의 문제로 인해 결측치가 자주 발생하게 됩니다. 이러한 결측치를 추정하기 위한 방법으로는 단순 대치법을 비롯하여, 데이터의 다른 변수들을 바탕으로 결측치를 추정하는 다중 대치법 등이 있습니다. 하지만 무선 장치 특성상 하나의 변수에 결측치가 발생할 경우, 다른 변수에도 결측치가 있을 확률이 높습니다. 따라서 다른 변수를 활용하여 결측치를 추정하는 다중 대치법을 적용하기는 어려우며, 장치 비용, 설치 등의 문제로 방대한 데이터를 수집하는 것도 어렵기 때문에 딥러닝을 적용하는 것 역시 비효율적일 수 있습니다.
따라서 본 논문에서는 LSTM 기반의 Sequence-to-Sequence Imputation Model (SSIM)을 바탕으로 다른 변수들을 활용하기 보다는 과거, 미래 정보를 활용하여 결측치를 추정하며, Variable-Length Sliding Window (VLSW) 알고리즘을 통해 보다 큰 훈련 데이터셋을 생성하여 효율적인 딥러닝 학습에 기여하고자 하였습니다.
2. SSIM - Encoder
SSIM의 전체적인 아키텍쳐는 위의 그림과 같습니다. 일단 Attention Vector 이전의 Encoder 부분에 대해서 살펴보고자 합니다. 우선 Input 데이터가 입력되면, Masking layer를 거치게 됩니다. Masking layer는 Input에서 zero-padded vectors를 제거하는 역할을 수행하는데, VLSW와 연관이 있기 때문에 이후에 더 자세히 설명하도록 하겠습니다. 다음은 Encoder로, LSTM이 양방향으로 전달되는 BiLSTM으로 구성되어있습니다. BiLSTM을 바탕으로 과거와 미래의 정보를 모두 활용하며, 합치는 과정은 단순 concatenate하거나, 덧셈, 평균도 가능합니다. 간단한 수식은 다음과 같습니다.
BiLSTM을 이해하기 위해서는 LSTM에 대해 알아야 하기 때문에, 우선 본 글에서는 양방향의 전달을 통해 과거와 미래의 정보를 모두 활용한다 정도만 알아두시고, LSTM에 대한 자세한 설명은 다른 글을 통해 작성하도록 하겠습니다.
3. SSIM - Decoder
다음은 Decoder입니다. 일반적인 LSTM과 달리, output이 온도, 대기질 등의 연속적 변수이기 때문에 마지막 Dense Layer에 Linear 함수를 적용합니다. \( s_t \)는 LSTM decoder의 은닉 상태, \( c_t \)는 attention vector, \( [s_t; c_t] \)는 두 값을 concatenate한 값을 의미합니다. 여기서 attention vector가 나오는데, attention vector에 대한 자세한 내용은 https://dslyh01.tistory.com/3 해당 링크에 설명되어있습니다. 간단하게 말하면 decoder의 각 단계마다 encoder의 은닉 상태들을 한 번 더 참고하여, 초기에 입력된 정보들의 손실을 방지할 수 있는 방법입니다.
4. VLSW
기존에 시계열 데이터에서 주로 활용되는 window인 GSW와 SWF는 window의 길이에 따라 데이터셋의 수도 줄어든다는 문제점이 존재합니다. 이는 데이터셋이 부족한 무선 장치 데이터의 단점과도 맞물리게 됩니다. 이러한 문제점을 해결하기 위해 제안된 방법이 VLSW (Variable-Length Sliding Window Algorithm)입니다.
VLSW는 그림과 같이 여러 window의 크기를 활용하여 기존 방법들보다 데이터셋의 크기를 부풀릴 수 있는 방법입니다.
위의 표는 논문에서 나온 예제 데이터로, GSW와 SWF와 비교하여 VLSW를 사용했을 때 데이터셋의 크기가 상당히 커진 것을 알 수 있습니다.
마지막으로 VLSW를 활용할 때 input 값은 output의 왼쪽, 오른쪽에 있는 값으로, 모델에 input으로 들어갈 때 왼쪽과 오른쪽에 있는 값들이 붙어있지 않다는 것을 알려줘야 합니다. 이를 위해 zero-padded vector를 이용하여 output이 원래 위치하던 곳에 0이 채워진 vector를 넣어주는 것입니다. 모델에 input이 들어가고 이미 zero-padded vector를 통해 output의 왼쪽과 오른쪽의 값들을 인식했으므로, Masking Layer가 다시 zero-padded vector를 제거해주게 됩니다.
논문에서 소개되는 예제는 해당 방법론이 우수하다는 것을 보여주는 것이므로 따로 소개하지 않았습니다. 논문 리뷰에 틀린 부분이 있다면 언제든지 댓글로 알려주시길 바랍니다.
댓글