2021. 7. 31. 17:44ㆍNeural Networks/Time Series
최근 시계열쪽을 연구할 기회들이 생겨 관련 논문들을 읽고 있습니다.
본 논문은 그 중 하나로써 시계열을 효과적으로 embedding 하는 방법을 제안합니다.
최근 kaggle의 g2net에도 참가중이며, noise가 가득한 데이터셋에서 의미가 있는 sequence를 탐지하는 대회입니다.
시계열 대회이기 때문에 본 논문을 적용해봤습니다만, 논문만 보자면 잘 될 것 같은데 사용해보니 잘 안되네요.
방법은 좋은 것 같으며 citation 횟수도 높은편이라 리뷰를 준비했습니다.
논문에 대한 오역, 의역등이 다수 포함되어 있습니다.
댓글로 많은 의견 부탁드립니다.
Author: Jean-Yves Franceschi, Aymeric Dieuleveut, and Martin Jaggi
NIPS, 2019
1. Introduction
저자는 time series를 representation 하는 것이 다른 분야들과 달리 매우 도전적이며 어려운 일이라고 말합니다. Natural language processing이나 video의 경우 연속적인 값들을 representation 하는 것이 과도할 정도로 연구되고 있지만, time series는 그렇지 못하며, 두 가지 이유를 듭니다. 먼저, 실제 time series는 매우 희박한 label을 갖고 있습니다. 또한 각 time series는 매우 다양한 길이를 갖습니다.
사족으로 헬스케어를 예로 들겠습니다. 웨어러블 센서를 사용하여 심박을 예측하기 위해 데이터를 수집해야 하는데, 심박계로 혈압을 측정하는 하는 것이 label이라면 센서로 수집한 데이터들은 input time series입니다. 실제 label을 수집하는 행위는 약 5분간의 차를 두고 측정하는 것을 권장하는 반면 센서는 계속 수집되고 있습니다. 센서의 수집 주기가 짧다면 짧을수록 label과 label 사이의 간격은 더욱 멀어지게 되어 매우 희소한 label을 구성하게 됩니다. 또한 약 5분간의 격차를 두고 측정하지만 항상 같은 격차를 생성하지 못합니다. 첫 label과 두 번째 label 간의 시간 차가 5분 2초이고 두 번째 label과 세 번째 label 간의 시간 차가 4분 58초라면 시간이 서로 일치하지 않게 되어 데이터를 학습에 사용할 수 있도록 일반화 하는데 어려움이 발생합니다.
저자는 이런 문제를 해결할 방법을 제안합니다. Unsupervised representation learning은 학습과정에서 label을 필요로 하지 않기 때문에 label이 희박해짐으로 발생하는 문제에 종속되지 않습니다. 특히 학습을 위해 negative sampling을 적용했으며, negative sampling을 위한 triplet loss를 시계열에 적용한 것은 본인들이 최초라고 합니다. 그리고 dilated convolution에 기반을 둔 scalable encoder를 활용하여 고정된 길이의 output을 제공합니다. Auto-encoder는 representation에 매우 효과적인 것은 사실이지만 적어도 2배에 가까운 capacity를 요구합니다. 따라서 학습의 간편화를 위해 encoder만 사용한 구조를 제안하며, 학습은 triplet loss을 최소화 하는 방향으로 진행됩니다.
2. Unsupervised Training
위 그림은 논문에 수록된 그림입니다. Time series를 잘 representation한다면, $y_i$와 $y_{j,l}$을 각각 embedding 했을 때 time series 간에 차이가 발생해야 합니다. $y_i$로부터 임의의 series $x^{ref}$를 선정한 뒤, $x^{ref}$와 관련된 $x^{pos}$를 추출합니다. 그리고 $y_i$와 $y_j$는 서로 다름을 모델에게 학습시키기 위해 $x^{neg}$를 추출합니다. 각 시계열의 길이가 다르지만 github의 코드를 참고하자면 일정한 길이가 되도록 crop했습니다. 따라서 시계열의 일부만 보더라도 서로 같은 시계열이라면 비슷한 representation이 되도록 학습하고, 동시에 다른 시계열이라면 representation된 embedding value에 차이가 발생하게 됩니다.
어떻게 차이를 학습시키는지가 관건인데요. Triplet loss는 Word2vec의 손실함수이기도 합니다. 효과적인 학습을 위해 negative sample은 한 개만 선정하는 것이 아니라 $K$개를 샘플링 한뒤 평균을 내는 방식으로 개선했습니다. Encoder $f$가 sampling한 값들인 $x^{ref}, x^{pos}, x^{neg}$를 embedding하면 $f(x)$와 같은 형태로 쓸 수 있습니다. 또한 같은 encoder로 representation하기 때문에, output dimension은 모두 같습니다. 때문에 아래와 같은 loss가 가능합니다. Loss를 살펴보시면 target역할을 하는 label이 존재하지 않는 것을 알 수 있습니다. 따라서, 본 논문의 방법은 unsupervised learning이며 label이 희박함에도 서로 다른 시계열을 다른 값들로 embedding할 수 있게 됩니다.
$$ -\log( \sigma ( f(x^{ref})^\top f(x^{pos}) ) ) - \sum_{k=1}^K \log( \sigma ( - f(x^{ref})^\top f(x^{neg}_k) ) )$$
위 식에 따르면, $x^{ref}$와 positive, negative sampling한 값들을 각각 내적한 뒤, 확률 값으로 변환하기 위해 sigmoid function을 사용하고, 음의 log로 변환하여 신경망의 초기 손실함수인 logloss꼴로 표현할 수 있습니다. logloss가 최소화 되는 것은 $x^{ref}$와 $x^{pos}$의 내적된 확률이 1로 $x^{ref}$와 $x^{neg}$의 내적된 확률이 0으로 가는 것을 의미하며, 손실함수 아래의 그래프가 그 사실을 보여주고 있습니다. 만약 positive와 negative간의 차이를 분간하기 어렵다면 embedding된 값에도 차이가 발생하지 않기 때문에, 손실이 $-2\log2\sim1.37$ 정도 근처에서 머물게 됩니다. 손실함수에는 반영되지 않았지만 실제 코드에서는 $K$개의 샘플링 뒤 손실을 계산하고 손실 합에 대해 $K$로 나눠 positive와 negative의 비율을 1:1로 조정합니다.
마지막으로 architecture 부분입니다. Wavenet이나 TCN으로 알려진 dilated causal network를 기본 골자로 활용하며 마지막에 global max pooling을 적용했습니다. 자세한 내용들은 다른 분들의 해당 논문 리뷰를 참고해주세요.
3. Result
저자는 실험을 위해 time series repository인 UCR repository로부터 120여개의 데이터셋을 수집하고, 실험에 적합한 80개 가량의 시계열을 활용하여 검증했습니다. 실험 결과, 시계열을 성공적으로 embedding하는 모델은 다른 카테고리에서 추가학습 없이도 활용할 수 있다는 것을 보였습니다. Table 1.의 FordA는 FordA로 학습하고 나머지 6개의 dataset에 대해 추가학습 없이 평가한 결과입니다. 또한 다양한 데이터셋에서 $K$가 1인 경우는 성능이 대체적으로 좋지 않았지만 $K$가 커지면 성능에 큰 차이가 통계적으로 발생하지 않았기 때문에 적절한 $K$를 제시할 수 없었고, 가능하다면 다양한 $K$를 채용한 combined encoder를 사용하라고 했습니다.
자세한 실험 결과는 논문을 참고부탁드리며, 전체 실험 결과는 supplementary에 수록되었습니다.