지난 글에 이어 이번 글에서도 시계열(timeseries) 데이터로부터 24시간 이후의 온도를 예측하기 위한 순환시경망의 동작에 대해 알아본다.
이전 기고문 확인하기
☞ 누적된 날씨 관련 시계열(Timeseries) 데이터에서 미래 기온 예측하기 ①
순환신경망 동작 개요
단순한 순환신경망(RNN) 구조를 통해 작동 원리를 살펴보자. 아래 그림9를 보면 input, output, state라고 하는 값들이 우측으로 진행됨에 따라 t-1, t, t+1 이라는 timestep을 가지고 움직이는 것을 볼 수 있다.
아주 단순하게 RNN을 다른 신경망과 구별 지어 설명한다면, 이전 loop의 반복 동안에 연산 된 값을 재사용하는 for loop으로 설명할 수 있다.
③번의 output_t를 보면, input_t 와 weight Wo가 vector dot product 수행한 ①과, 이전 상태의 output 인 state_t에 weight Uo가 vector dot product가 된 ②와 bias bo를 합산하여 activation 함수를 거쳐서 산출됨을 알 수 있다.
여기서는 t는 timestep을 의미하는데 아래 그림은 결국 이러한 ③번의 output 연산이 timestep t를 따라 반복되는 것임을 나타낸다.
아래 그림 10은 아주 간단한 RNN 실행을 보여준다. 그림9와 함께 보면 좀 더 이해하는데 도움이 될 것 같다.
①번에 RNN에 (timesteps, input_features)의 형태로 2D tensor가 입력 값으로 들어갈 수 있게 설정한다. ②에서 우선 초기 상태 state_t를 모두 0인 벡터로 초기화한다. ③·④의 U, W, b는 weight 매트릭스다. 임의의 초기값으로 생성한다. ⑤번에서 input_t는 (input_features) 형태의 벡터이며, ⑥번은 위의 그림9의 가운데 박스에서 일어나는 연산이다.
결국 ⑤번부터 ⑧번까지의 사이클은, timestep 만큼 loop를 수행하는데, 이전 반복 연산의 결과 state_t와 현재 시점 t시간에서의 입력(input_t)으로 (input_features) 형태의 값을 받아서 이 둘, 즉 state_t와 input_t를 합쳐서 output t를 만들어내는 것이다.
⑦번에서 이 output을 successive_outputs라는 리스트에 timestep에 따라 계속 추가해 넣는다. ⑧에서 output_t를 state_t로 지정해줘 다음 timestep에서 이 output_t가 다시 입력으로 들어갈 수 있도록 해준다. for loop이 끝나면, ⑨와 같이 output_t가 timestep 만큼 쌓인 final_output_sequence가 2D tensor로 (timesteps, output_features) 형태로 만들어진다.
LSTM 층을 사용한 24시간 후 온도 예측
자 이제 실제 LSTM 층을 통해서 온도예측을 수행해보자. 그림11과 같이 keras를 통하여 ①과 같이 input 을 정의하고, ② 32개 unit을 가진 LSTM 층을 설정하는데, dropout 없이 실행하면 바로 과적합이 일어난다.
③번의 Dense 층에도 일반화를 위해 Dropout 층을 추가한다. 여기서 한가지, ⑥번에 시간을 측정했는데 이유는 ②번의 unroll=True를 설명하기 위해서이다.
Keras LSTM 이나 GRU를 GPU 상에서 수행할 때, 복잡한 RNN이 아닌 디폴트 인자로 수행할 경우 cuDNN 커널을 사용하게 되는데, 과적합을 방지하기 위해 ②번의 recurrent dropout과 같은 인자를 사용하면 cuDNN 커널의 도움을 받을 수 없어 2~5배 정도의 GPU 속도 저하를 경험한다. ⑦번의 WARNING 메시지가 그것이다.
cuDNN을 사용하지 않을 때 속도를 올리기 위해 unrolling=True로 설정하는 것이 좋다. 설정하지 않았을 때 Nvidia RTX 2080Ti 1 GPU에서 50 epoch를 훈련하는데 276분이 소요되던 것이 설정하고는 101분으로 줄었다.
⑤번에서 평가는 mean absolute error 로 측정하였다. 즉, 예측한 24시간 이후의 정답 온도의 평균 몇 도(섭씨)의 차이를 보이는 가를 측정한다는 뜻이다
지금까지 2회에 걸쳐 기상 관련 8년간 10분 간격으로 측정된 시계열 데이터세트를 이용하여 순환신경망으로 24시간 후의 온도를 예측하는 것을 살펴보았다. 그림11의 훈련을 50 epoch 수행하고 난 결과는 아래와 같다.
Validated Mean Absolute Error 값은 2.3176을 얻었다. MAE는 예측 값과 실제 값의 차이에 대한 절대값에 대해 평균을 낸 값으로, 간단한 RNN 층을 이용하여 24시간 이후 온도 예측에서 실제 값과 약 2.32도 차이를 보이는 결과를 얻었다.
글 : 주철휘 / 인공지능연구소 소장(CAO) / 에이프리카
관련기사
- 누적된 날씨 관련 시계열(Timeseries) 데이터에서 미래 기온 예측하기 ①
- 에이프리카, 이륜차 운행위험도 예측 AI 개발
- 딥러닝(DL)을 통한 한글 문장의 감성분석은 어떻게 이뤄지나 ①
- “데이터가 부족해요”…딥러닝(DL) 통한 이미지 분류할 때 고려할 점 ②
- 인공지능(AI)을 활용한 객체탐지(Object Detection)는 어떻게 작동하나 ①
- 에이프리카, 서울바이오허브에 인공지능(AI) 개발 인프라 구축
- [그것을 알려주마] 안면인식 시스템은 어떻게 작동하는 걸까? ①
- 넷플릭스, 왓챠…OTT플랫폼의 추천시스템은 어떻게 동작할까?
- 순차 입력 정보를 처리하는 심층신경망(DNN) 구조…어떻게 작용할까?
- 정부, “인공지능(AI) 학습용 데이터 개방, 2배 확대한다”