- 개요
지금까지 선형회귀모델과 XGBoost로 서울 하루 뒤 기온 예측을 했습니다.
이번에는 DNN으로 기온을 예측해보고자 합니다.
그전에 DNN에 대해 간단하게는 알아봐야겠죠.
(전공이 아니라서 글 내용이 틀릴 수 있음)
- DNN이란?
DNN은 Deep Neural Network로 기계학습 모델 중 딥러닝 모델의 한 종류입니다.
DNN의 동작방식이 신경의 단위인 뉴런의 구조와 닮았다고 하여 Neural Network입니다.
원래 Neural Network는 입력층 > 은닉층(뉴런이 있는 층) > 출력층 이렇게 3개로 구성되어있지만 뉴런층을 여러 개로 늘리면서 깊어졌다는 의미에서 Deep을 붙입니다.
참고로 지금까지 다룬 선형회귀모델, XGBoost은 기계학습 모델 중 전통적인 기계학습 모델입니다.
위의 그림에서는 입력층의 동그라미가 5개고 출력층의 동그라미가 4개이므로 5개의 입력값을 받아서 4개의 출력의 출력값을 줍니다.
제가 만들 DNN 모델에서는 여러 입력 변수로 하루 뒤 기온, 하나의 변수만 예측하면 되므로 출력이 1개면 됩니다.
- DNN의 핵심개념(학습 원리)
DNN의 핵심개념은 2가지입니다.
DNN은 최종적으로 여러 개의 활성함수(activation function)을 더해서 함수를 만들어낸다.
여기서 원래 함수란 ground true, 즉 참값을 의미하며 이 참 값과의 차이(오차)가 적어지는 방식으로 학습한다.
1. 여러 개의 활성함수(activation)을 더해서 함수를 만들어낸다.
DNN은 ReLU라는 활성화함수로 예측을 위한 함수를 만들어냅니다(완벽한 표현은 아님).
예를 들어 정답이 sine함수라서 sine 함수를 만든다고 쳐보죠.
ReLU 함수를 y = f(x)라 쳤을 때 f(x)는 x가 0이하에서는 0, x가 0 이상일 때 선형적으로 증가합니다.
ReLU 함수에 특정값을 곱하면 기울기가 변화하고 특정값을 더하고 빼면 x축 이동, y축 이동을 할 수 있습니다.
한 두개의 ReLU 함수로 사인 함수를 표현할 수 없겠지만 충분히 ReLU가 많으면 사인 함수를 만들 수 있습니다.
그럼 원하는 모양의 함수를 만드는 게 왜 중요할까요?
DNN 모델도 결국에는 특정값을 입력 받고 출력하는 함수입니다.
제 경우에는 기상 자료를 입력 자료로 하루 뒤 온도를 출력하는 함수를 찾고 있는 셈이죠.
근본적으로는 y = f(x)를 찾는 문제이기 때문에 ReLU 함수 여러 개로 f(x)를 만들 수 있는지가 중요합니다.
자세한 건 universal approximate theorem 설명을 참고해주세요.
2. 오차를 최소화하는 역전파
DNN 모델을 만드는 과정은 아래와 같습니다.
일단 입력 변수로 예측 > 예측값과 실제값 비교(오차 계산) > 다음 단계에 오차 최소화하도록 조절하고 다시 예측
오차 계산에는 RMSE와 같이 적당히 예측값과 모델값의 차이로 구하는 에러값을 씁니다.
그럼 오차는 어떻게 줄일까요?
아까 ReLU 함수에 특정값을 곱하거나 덧셈, 뺄셈을 한다고 했습니다.
수식적 표현하자면 [y = ax + b a, b는 상수]이고, 층과 뉴런은 여러 개니까 a와 b값도 여러 개입니다.
이를 함수 관점에서 보자면 여러 개의 a, b값을 입력값을 받아서 오차값이 산출되는겁니다.
오차값 = f(a값들, b값들)인거죠(a, b를 weights, 가중치라 부름).
이 때 오차를 감소시키기 위해서는 미분해서 나온 방향의 반대로 가면 됩니다.
오차값을 미분해서 여러 a, b값을 증가시킬지 감소시킬지를 결정합니다.
모델 내에서 흐름은 입력층에서 은닉층, 출력층 방향입니다.
하지만 오차를 감소시킬 때는 반대 흐름으로 가게 되죠.
그래서 역전파라고 부릅니다.
- 결론 및 다음 방향
DNN은 y=f(x)와 같은 함수로 볼 수 있으며 많은 활성화 함수가 이를 구성한다.
단계마다 오차의 미분을 이용해서 오차값을 줄여나간다.
하지만 DNN 모델을 만들기 전에 학습기간, 검증기간, 테스트기간을 알아야 한다(다음 포스트 내용).
'프로젝트 > 기계학습 기반 서울 기온 예측' 카테고리의 다른 글
[서울기온예측][pytorch][DNN 3] 서울 ASOS 자료 기반 기온 예측 (0) | 2025.03.06 |
---|---|
[서울기온예측][pytorch][DNN 2] DNN으로 y=sin(x) 예측해보기, DNN 코드 이해하기 (0) | 2025.03.05 |
[서울기온예측][XGboost 2] 서울 ASOS 자료 기반 기온 예측 (0) | 2025.02.25 |
[서울기온예측][XGboost 1] 의사결정나무, XGboost란? (0) | 2025.02.20 |
[서울기온예측][다중선형회귀모델 3] 예측 변수와 입력 변수 간 선형상관계수 확인 (0) | 2025.02.17 |