내 생각대로 구현하고, 실 데이터로 증명할뿐.
만약 그 증명이 틀린게 있다면 거침없이 댓글을 달아주기 바란다.
1. 시간별로 데이터 전처리 / Not Scaled
2. 일반 lstm 3레이어 정도(?)
3. 이전 hidden data도 중요하다고 생각듬
4. BI-LSTM 사용
5. 데이터가 너무 없어 K-Fold 적용
6. Layer만 주구장창 쌓다가 AutoEncoder 활용
7. 데이터 Scaled 적용
8. Loss Function Custom
9. 1차 마무리
- 여기 사이에는 BERT가 포함되어있다. (Google Source를 다 까봤는데, 이건 언제 또 정리할까...) -
10. Attention 적용
=> Dual-Stage Attention RNN (DA-RNN)
=> Luong Attention (Dot-Product Attention)
=> Bahdanau Attention => 현재는 여기서 개고생하는중....
기본적인 접근 방법으로, LSTM으로 기본 Layer만 사용해봤었다.
하지만, 해당 부분은 소스가 남아있지 않고, 그 뒷부분부터 남아있기 때문에, 현재 장까지는 말로 털어야겠다.
LSTM은 Dropout을 적용하는 것보다, BatchNormalization을 적용하는 것이 더 좋다는 아티클들을 많이 읽었어서,
(Google에 'lstm dropout vs batch normalization' 와 같은 형태로 검색하면 많이 나온다.)
논문은,
논문에 보면 batch normal이 좀 더 빠르게 잘 되더라 라는 내용은 있는데, overfit 가능성이 좀 더 높다고 나와있다.
(벤찌오 형님은 못참지...)
논문에서도 학습데이터 양과 같은 요소들이 영향을 좀 미치는 부분이 있다고 나와있는데, 그래서 필자도 사실
1. dropout
2. dropout+batchnormalization
3. batchnormalization
3가지 케이스를 전부 시도해봤다. (물론 dropout은 비율 바꿔가면서도 해봤다.)
결과상
학습속도 : dropout 승!
정확도 : batch normalization 승!
이었지만,
모델 중요도가 운영될 모델이다보니 학습속도<<<<<정확도 였기에, batch normalization을 사용하기로 했다.
(논문에서 다 니가좋니 내가좋니 하지만, 책으로 꽃을 100송이 보느니, 때로는 한송이 꽃을 직접 보는게 나을때도 많다. 꼭 귀차니즘을 이겨내고 실제로 해보고 판단하는 습관을 기르길 바란다.) <- 이말은 꼭 내가 요즘 git에서 attention 모델들 마저도 pull땡겨서 그냥 막연하게 사용하는 초급 사이언티스트들에게 해주고 싶은말이다...ㅋㅋ
Model Architech
그래서
lstm
batch_norm
lstm
batch_norm
......
dense
와 같은 형태로, 매우 단순하게 모델을 구성하였고,
optimizer는 ADAM(0.001), loss는 RMSE를 사용하였다. (매우 기본적인 형태다.)
이때 return_sequence랑 time_distribute를 썼었는지는 기억이 잘 나지않는다. 추후에는 쓰게됐지만...
Dataset은 월/요일/공휴일여부/주말여부/time-1 수요값으로 time+0 (실시간)
월/요일/공휴일여부/주말여부/day-7 ~ day+0 수요값으로 day+1~day+8 (주)
월/요일/공휴일여부/주말여부/day-31 ~ day+0 수요값으로 day+1~day+32 (월)
월/요일/공휴일여부/주말여부/day-93 ~ day+0 수요값으로 day+1~day+94 (분기)
데이터를 예측하는 모델을 일단 1차적으로 만들어봤는데,
뭐 결과야 당연히, time만 잘맞고, 주/월/분기는 엉망이었다. (아마 time dependency 때문이겠지, 라고 생각했었다.)
물론, 바로 seq2seq와 같은 좀 더 고도화된 알고리즘으로 넘어갈 수도 있었으나,
뒤늦게 일부 값을 찾은것 같은데,
빨간선이 예측인데, 패턴은 얼추 따라가나? 싶지만 뭐 역시 잘 못맞춘다.
이제 앞으로 진행되면서 얼마나 잘 맞아가는지 보도록 하자!
비정형 데이터에서 seq2seq를 다뤄본 나는 학습시간과 하드웨어 리소스, 그리고 예측에 소요되는 시간이, 실제 운영으로 적용하는 것이 합리적일지를 고민하다가,
결국엔 단순 lstm모델에서 조금씩 개선해 나가며, 학습 및 예측에 소요되는 리소스 VS 모델의 수려함과 예측 정확도의 Trade-Off 시점을 잘 찾아서 정하기로 결심했다.
느낀점으로는 참 현업에서 일을 하다보면, 가끔은 정확도가 떨어지더라도, 고효용 혹은 저비용의 모델이 더 잘먹혀들때가 있다.
내가 아무리 엔지니어라지만, 결국에 모델을 사용하는 것은 고객이니, 고객의 Needs를 잘 파악하고, 그에 맞게 설계하여 구성하는게 가장 옳바르겠다는 생각이 든다.
'딥러닝으로 하루하루 씹어먹기' 카테고리의 다른 글
LSTM으로 수요 예측하기 - 5장 (K-Fold 사용) (6) | 2021.04.12 |
---|---|
LSTM으로 수요 예측하기 - 4장 (BI-LSTM 사용) (7) | 2021.04.07 |
LSTM으로 수요 예측하기 - 2장 (데이터 전처리) (2) | 2021.03.22 |
LSTM으로 수요 예측하기 - 1장 (데이터 수집) (0) | 2021.03.22 |
논문으로 현업 씹어먹기 (1) | 2021.03.22 |
댓글