태양광 발전량 예측 AI 경진대회

알고리즘 | 정형 | 회귀 | 에너지ㅣPinball Loss

  • moneyIcon Prize : 600만원
  • 2,319명 마감

 

[Pytorch Lightning] Transformer Baseline - v0118

2021.01.16 06:52 9,020 Views language

*20200118업데이트 (제출스코어 3.1 -> 2.31)
- categorical embedding을 nn.Linear를 사용해서 continuous 값으로 embedding을 만들도록 변경
- 이전 2일간의 데이터로 추후 2일을 예측하도록 변경
- 아키텍처 변경 - decoder는 이 대회에서 큰 메리트가 없다고 생각해서 제거했습니다. 보통 t 스텝의 값을 예측할때,  바로 직전 t-1 시퀀스 아이템의 정답을 넣어서 예측해야하는데, 이 대회에서는 바로 직전 시퀀스가 주어지지 않고, 이틀 전의 시퀀스로 그다음 이틀 시퀀스를 예측하는 식이기 때문에 decoder가 제 역할을 못할 것으로 생각됩니다.
- embedding dimension 32로 축소, early stopping patience 증가

베이스라인 스코어 언저리에 도달할때까지는 계속 업데이트해보려고 합니다.
코드에 부족한점이나 개선점을 댓글로 남겨주시면 감사하겠습니다! 코드 관련해서는 댓글 남겨주시면 답변드리겠습니다. Transformer관련한 이론적인 내용은 아직 공부를 제대로 안해서, 이론적인 내용은 제가 아는 선에서 최대한 답글달아보겠습니다.
+pytorch lightning을 처음 써봤는데, 확실히 코드가 간결해지고 보기가 편한것같습니다 bb

Code
로그인이 필요합니다
0 / 1000
윤기석
2021.01.16 18:39

transformer은 참 이해하기 어렵던데 대단하세요!

로렌조
2021.01.18 03:19

아직 저도 이해를 제대로 못해서요ㅎㅎ,, 계속 공부해보면서 개선해보고 있습니다.

로렌조
2021.01.18 03:18

--- 이전 코드설명 ---
Pytorch lightning으로 작성한 Transformer 기반 모델입니다. 튜닝 대강 하고 제출해보니 스코어는 3.1초반 정도 됩니다.
최근 kaggle에 열렸던 Riiid Answer Correctness 대회(https://www.kaggle.com/c/riiid-test-answer-prediction)에서 공개된 SAINT+ 아키텍처(https://arxiv.org/pdf/2010.12042.pdf)를 참고해서 이 대회에 맞게 수정해보았습니다. 
가능한 개선점으로는 

- 현재 numerical column값들을 강제로 categorical embedding을 사용중이라서, continuous한 embedding을 사용할 것 (특히 sparsity가 높은 소수점까지 내려가는 컬럼들을 임의로 정수or소수점 첫째짜리까지 끊거나, range별로 하나의 값을 가지도록 했기 때문에, 손실되는 정보가 꽤 있을 것으로 생각됩니다.)
- 현재 파이프라인이 6일간의 시퀀스가 전부 주어졌을때 나머지 2일의 값을 예측하도록 되어있는데, 데이터를 3일간의 시퀀스를 보고 나머지 2일의 값을 예측하도록 하는 식으로 데이터를 잘라서 학습데이터 양을 늘리기 (이틀을 예측하는데 6일 전부를 보는것보다는 이전 3일이나 2일만으로도 충분할 것 같다는 생각이 듭니다.)
- embed dimension, # of encoder/decoder layers 등의 파라미터 튜닝
- 아키텍처 수정

코드에 부족한점이나 개선점을 댓글로 남겨주시면 감사하겠습니다! 코드 관련해서는 댓글 남겨주시면 답변드리겠습니다. Transformer관련한 이론적인 내용은 아직 공부를 제대로 안해서, 이론적인 내용은 제가 아는 선에서 최대한 답글달아보겠습니다.
+pytorch lightning을 처음 써봤는데, 확실히 코드가 간결해지고 보기가 편한것같습니다 bb

로렌조
2021.01.18 21:24

현재 x를 제외한 다른 feature들이 전혀 학습에 도움을 주지 않고 있습니다. 다른 feature를 제외하고, x(발전량 y_t에 0이면 1, 0보다 크면 2를 매핑시킨 행렬을 0~47 값으로 시간시퀀스에 곱한 feature) 만 학습에 사용하고, lr과 layer수를 조정했더니 제출 스코어가 2.11까지 떨어졌습니다.

우왕여긴어디일까요
2021.01.18 22:03

혹시 런타임 몇시간 정도 걸렸나요??

로렌조
2021.01.18 22:03

gpu사용하면 다 도는데 10분정도 걸리는 것 같습니다