본문 바로가기
논문으로 현업 씹어먹기

Dual-Stage Attention-Based RNN for Time Series Prediction

by Yoo Sung Hyun 2021. 4. 15.
728x90

서론

최근의 일이다.

BERT를 파보고 있었다. (Goolgle git에서 다운받아서.)

 

Attention을 알고는 있었는데, 자연어 처리 업무를 최근까지 할 일이 거의 없었고(맨~~~이미지만 그냥.,...),

대부분의 작업을 KR-WordRank를 이용한 추출요약에 관련된 업무로 처리를 하고있다가, (혹은 Seq2Seq로 처리했었다... 뭐 결국 이도 추출요약이지만.)

 

BERT를 까보면서 Cosine 유사도, 내적 유사도, 벡터의 내적에 대해 눈을 뜨게 되었고,

--- 나의 가설

혹시 그렇다면, 내가 진행하던 업무의 일종인, Time Series Forecasting도 특징간의 내적으로, 유의미한 Feature를 추출해내고, 그 부분을 이용하여 집중 학습시켜, 더 나은 예측 결과값을 얻어낼 수 있지 않을까?

  => 결론부터 말하자면 아직은 시기상조다. (자세한 내용은 차차 작성토록 하겠다.)

 

Attention에 대한 기본부터 설명하려면 dot-product(내적) Attention의 일환인 Luong Attention부터 설명해야겠으나,뭔가 레퍼런스가 있는 것부터 보자라는 마인드에서, 구글링을 하다가, DA-RNN에 대한 내용을 레퍼런스로 먼저 접하게되어서, 요녀석부터 짚고 넘어가고자 한다.

dual_stage_attention_rnn_논문정리.pdf
4.36MB

논문을 내가 해석해가며, 단어나 내 생각을 좀 휘갈기는 편인데, 글씨체를 알아볼 수 있다면 한번 같이봐도 좋을 것 같다.

(아니 그리고 한국 레퍼런스는 왜케 시계열 예측이 없는건가 모르것다 진심으로다가...;;)

 

-- 내가 찾은 레퍼런스

github.com/Junghwan-brian/Dual_Stage_Attention_RNN

 

Junghwan-brian/Dual_Stage_Attention_RNN

DARNN. Contribute to Junghwan-brian/Dual_Stage_Attention_RNN development by creating an account on GitHub.

github.com

이 분의 git에 있는 소스를 그대로 사용하면, 예제에만 적합하게 모델이 돌아가게 되고, 이분 소스도 결국 DARNN에 대한 부분은 100% 직접 구현은 아닌 것 같았다. (뭔가 다른 레퍼런스 찾아보다가 부분부분 똑같은 소스들을 많이 봤음.)

 

소스는 내가 수정한게 있으니, 그걸 좀 가공해서 올려놓던가 하겠다.

 

나중에 바다나우와 내적 어텐션을 논문대로 구현해보다가 느끼게 된 점이었는데,

기본적인 형태에서의 두 어텐션의 특징은 어텐션을 Decoder에서만 활용하게 된다.

나중에 바다나우와 내적 어텐션도 정리하겠지만은, Encoder의 값은 Decoder의 출력에서만 얼마나 영향력 있는지에 대한 지표로만 활용될 수 있을 뿐이다.

 

대부분의 한국 레퍼런스들은 Attention은 단순히 자연어 처리에만 Focus를 맞춰 설명하기 때문에, 이게 왜 비효율적인지에 대해 설명해보자면,

예를 들어, 한국어를 영어로 번역하는 경우, Encoder는 한국어 Decoder는 영어가 된다.

이 경우에, 한글(encoder)의 단어 등장 순서(time-step)가 영어(decoder)의 단어 등장 순서(time_step)에만 영향을 미치니까, 그냥 time-series에만 attention되어도 학습이 잘 될 수 있다.

 

그렇다면 time-series에 대해 생각해보자.

우리가 부동산가격을 예측한다고하면, 시간에 흐름에 따라,

주변에 버스정류장 수가 늘어나는 것과 같은 연속성 변수들도 있겠으며,

주변에 백화점이 생겼는지 여부에 대한 범주형 변수들도 존재하게 되고, 단순히 시간의 흐름에따라 값이 오르고 내리는 것과 함께, 특징에 대한 부분도 분명히 존재한다는 것이다.

 

번역의 경우를 정리해보면, 고려해야될 점이 1가지다.

한글단어 순서에 따른 영단어의 순서 (time-step)

 

time-series에서의 경우를 정리해보면, 고려해야될 점이 2가지다

직전년도, 혹은 저번달의 금액변동의 흐름 (time-step)

시간이 흐름에 따라, 바뀌는 연속/범주형 특징들 (회귀문제)

 

자, 이제 좀 감이 오는가?

기본적인 어텐션을 구현해보면 알 수 있겠지만, 디코더에서 1번의 어텐션을 하는 것 만으로는 time-step과 회귀문제 두개에 대한 attention을 전부 진행시킬수 없다는 점이다.

(물론 time-series에서도 1가지만 고려해서 잘 될 수도 있지만, 필자는 time-step과 특징값 두개중 어떤거로 attention해도 잘 되지 않았다. -> 이것은 reduce_sum을 하는 최종 context_vector를 얻는 과정에서, 어떻게 전치시켜 활용하느냐에 달린 문제다.)

 

다시 주제로 돌아가보자.

Dual! 2개!

어떤 느낌인지 알겠는가?

encoder에서 1번!, decoder에서 1번!

총 2번의 어텐션을 쳐서, 우리가 원하던 time-series 예측에 딱 알맞는 아키텍쳐를 설계했고, 실제로 그게 잘 되더라 하는 이야기이다.

 

내가 바로 위에서 time-step과 특징값에 대한 어텐션은 각각을 어떻게 전치시키냐에 따라서, 구할 수 있다고 하였다.

DA-RNN에서는 쉽게 바다나우 어텐션을 활용하되, 전치를 이용하여 어떤 차원에 context vector를 뽑느냐에 따라,

Input Attention에서는 특징에 대한 Attention

Temporal Attention에서는 시계열에 대한 Attention을 진행하게 된다.

  => encoder-decoder 사이에 Attention이 껴있다는 것만 다를 뿐, 교사강요와 같은 학습과 예측 방식 자체는 평범한 encoder-decoder 모델과 동일하게 녹아있다.

 

근데 결론은 현업 데이터로 적용 시 RAE를 썼던 것 대비 크게 효과가 나타나지 않았고,

Attention을 2회에 걸쳐 하며, time-sequnece가 길 경우, Encoder / Decoder에서 시간이 어마무시하게 많이걸린다.

(왜냐면 각 특징별, 시간별 어텐션 바다나우 계산을 전부해야하니까...)

필자 현업에서는 반기 데이터로 반기 데이터 예측하는거 했는데, 3년치 데이터 학습하는데 RAE는 3090기준 17분? 걸린거 같은데, DA-RNN은 거의 6시간? 돌렸던 것 같다.

 

정확도는 RAE가 훨씬 더 높았다. 속도라도 빨랐으면, 메리트가 있을 수 있겠다 싶어서 고도화를 진행해볼까 했는데, 속도가 너무 느려, 운영상 RAE가 더 적합하다고 판단됐다.

 

소스는 DA-RNN 모델 아키텍쳐와, 실제 돌려봤던 IPython 파일을 정리해서 올릴까 하는데,

일단 주석 정리도 해야되거니와, 민감한 소스 부분은 삭제해야하기에 빠르게 작업해서 올리도록 하겠다.

그리고 두어번 돌려보고 아니다 싶어 폐기한 아키텍쳐여서, 상당히 소스가 난잡하게 적혀있는 것은 덤....ㅋㅋㅋ

git에 올릴지, 여기에 올릴지는 잘 모르겠다. 추후에 표기하겠다.

 

참고로 소스의경우 keras 클래스를 상속받아서 작성하였기 때문에, 만약 돌려보고 의미가 있다면 attention_weight를 뽑아, 마치 scikit-learn에서 feature importance 구하듯이 그래프로 표현할 수도 있다.

 

소스를 좀 수정할 요량이라면 필자가 올려둔 git에 가면 즉시 활용 가능한 수준으로 되어있으니, 참고해보길 바란다.

 

 

======================== 21년 4월 19일 수정본

github.com/YooSungHyun/attention-time-forecast/tree/master

 

YooSungHyun/attention-time-forecast

attention으로 시계열 예측은 할 수 없을까. Contribute to YooSungHyun/attention-time-forecast development by creating an account on GitHub.

github.com

깃 수정해서 darnn은 본인의 dataset을 써서 범용적으로 활용 가능하도록 수정하여 올려놨다.

 

주석도 한땀한땀 들여놨으니 관심있으면 읽어보길바란다

728x90

댓글