@@@ 인공지능/수학·통계를 몰라도 이해할 수 있는 쉬운 딥러닝

3 - 2. LSTM 활용하기(1)

HTG 2021. 8. 30. 02:57
728x90

3-2-1. [기상 AI] LSTM을 활용한 일기예보

회귀와 외삽을 이용한 미래예측 시도.

LSTM까지 사용하여 미래 예측을 시도

데이터 살펴보기

2009년 01.01. 00:10부터 10분간격으로 수집된 날씨 데이터.

총 420,532개의 데이터가 준비. 2016.12.31 자정까지의 데이터가 수록. 각각의 데이터는 총 14개의 피쳐로 구성.

데이터를 0 ~ 1 사이의 숫자로 노멀라이즈 대신 음수값도 포함 되어 있어 각각의 피쳐에서 최솟값을 빼주고, 그 다음 최댓값으로 나누어 주었음. 이 과정에서 노멀라이즈된 피쳐의 최솟값은 0, 최댓값은 1로 골고루 펼쳐지게 된다.

 

(2) 윈도잉(windowing)

시계열 데이터를 학습해 미래를 예측할 때에는 일반적으로 윈도잉이라는 기법을 사용함. 이런 예제에서는 과거 12개의 데이터를 학습하여 미래 12개의 데이터를 예측하는 회귀모델을 활용.

윈도잉을 통해 하나의 데이터를 '과거와 미래' 정보가 표시된 작은 조각으로 나누어 준다. 우선 시간의 순서에 따라 나열된 커다란 원본 데이터를 8칸씩 잘라내고,그 데이터를 또다시 반으로 나눔.

윈도우 1은 앞의 데이터를 가지고 뒤의 데이터를 예측하는 회귀 모델을 만들어 활용.

한 칸씩 이동하며 반복하여 모두 모아 정리하면 트레이닝 데이터가 완성.

 

●어떤 인공지능 사용?

(1) 미래 예측 AI의 학습 철학

미래를 예측하는 인공지능의 학습 철학은 윈도잉된 데이터의 과거 정보에 해당하는 데이터를 입력받아 미래 정보에 해당하는 데이터를 잘 예측하도록 회귀학습을 수행하는 것.

 

(2) 신경망의 구조

층수 종류 크기 활성화 함수
1층 LSTM 64, return_sequences = True -
2층 FNN 32 -
3층 FNN 14 -

LSTM 한 층, FNN 2층으로 구성된 신경망.

입력되는 데이터는 총 12개인데 피쳐의 개수가 14이기 때문에 출력층이 14.

여러 개의 값을 회귀할 때에는 데이터 사이즈보다는 피쳐의 개수를 따라가는 것이 중요.

LSTM을 정의할 때, return_sequnces = True라고 설정.

이 값을 True로 지정하면 LSTM이 입력받은 데이터의 시퀀스를 그대로 유지하여, 데이터의 윈도우 크기에 따른 차원 정보가 그대로 유지.

윈도잉 기법을 사용하는 등 동시에 여러 시계열 정보를 순서대로 출력할 때 주로 return_sequences = True 옵션을 사용.

 

●딥러닝 코딩

- 인공신경망 컴파일

옵티마이저(optimizer) - Adam

메트릭(metrics) - accuracy

로스(loss) - mse

 

●인공지능 학습

- 인공신경망 학습

 

 

- 학습 결과 출력

그래프로 출력

 

다른 예제와 달리 이번 예제의 테스트 데이터는 총 84083개라는 큰 규모.

데이터 하나당 피체 14개를 예측하므로 모든 테스트 데이터를 대상으로 그래프를 그릴 경우 좁은 공간에 1177162개나 되는 점을 표기.

 

●인공지능 학습 결과 확인

- 인공지능 성능 확인하기

저자의 경우 인공지능의 최종 성능은 MAE 2.63% 대략 97%이상의 성능을 보임.

콜백이 작용하여 30 에포크에서 중단.

나의 경우도 MAE 2.69% 대략 97%이상의 성능을 보임.

콜백이 작용하여 27 에포크에서 중단

 

- 학습 기록 확인하기

빨간 선이 train, 파란 선이 test

저자의 경우 Loss 의 트레이닝 로스는 꾸준히 줄어들지만 테스트 로스는 감소세가 그렇게 크지는 않음.

둘 사이 간격이 큰 것을 보니 오버피팅의 가능성도 커 보임.

전반적으로 파란선이 빨간 선을 따라 일직선을 분포하는 것을 보니 회귀 학습 자체는 잘 된 것 같지만, AI가 예측한 많은 값이 실제보다 낮은 수치인 것으로 보임. MAE만 놓고 보면 학습이 굉장히 잘 된 것 같지만 그래프로 확인해보니 다른 회귀 예저보다 썩 만족스럽지 못함.

나의 경우도 오버피팅의 가능성이 보이고 트레이닝 로스는 꾸준히 줄어들지만 테스트는 왔다갔다한다.

회쉬의 경우는 잘된것으로 보임.

 

 

정확한 날씨 예측은 불가능.

압축이 가능한 유체의 움직임은 나비에 스토크스 방정식으로 기술.

하지만 3차원 공간에서 해가 존재하는지, 존재한다면 어떻게 찾을 수 있는지 등이 밝혀지지 않음.

그렇기 때문에 정확한 날씨 예측이 불가능.

 

층수를 늘리면 인공지능의 성능이 더욱 향상될까?