🐼 목 차 🐼
1. 시계열 데이터(Time series data)
2. 시계열 데이터 분석 방법론 트렌드
3. 다른 시계열 모델과 RNN
4. RNN 한계점
참고 강의 링크 : https://www.youtube.com/watch?v=006BjyZicCo&list=PLpIPLT0Pf7IoTxTCi2MEQ94MZnHaxrP0j&index=3
1. 시계열 데이터(Time series data)
- 시간의 흐름에 따라 관측되어 시간의 영향을 받게 되는 데이터
- 현재 상태가 과거의 상태에 영향을 받음
2. 시계열 데이터 분석 방법론 트렌드
✔️ 전통 통계 기반 시계열 데이터 분석 방법론
- 이동평균법 (Moving average
- 지수평활법 (Exponential smoothing)
- ARIMA (Autoregressive integrated moving average) 모델
- SARIMA (Seasonal ARIMA) 모델
- Binary variable model (해당 시점만 1, 나머지는 0으로 변환)
- Trigonometric model (sine과 cosine 함수의 조합으로 표현)
- Growth curve model
- ARIMAX (Autoregressive integrated moving average exogenous)
- Prophet, ...
✔️ 머신러닝 기반 시계열 데이터 분석 방법론
- Linear regression/Logistic regression models
- SVM/regression
- Random forest
- Boosting
- 앞의 네 가지는 실제 시계열 특화는 아니지만 데이터를 약간 변형해서 사용 가능함
- Hidden Markov model (HMM)
✔️ 인공지능 기반 시계열 데이터 분석 방법론
- RNN (Recurrent neural networks, 1986)
- LSTM (1997)
- GRU (2014)
- Seq2Seq (NIPS 2014)
- Seq2Seq with attention (ICLR 2015)
- CNN (Convolution neural networks) for time series analysis (2016)
- Transformer (NIPS 2017)
- GPT-1 (2018), BERT (2019), GPT-3 (2020), GPT-3.5 (2022), ChatGPT (2023) → 거대 언어 모델
3. 다른 시계열 모델과 RNN
1) 선형 회귀 모델
f(X)=w0+w1X1+w2X2
2) 로지스틱 회귀 모델
f(X)=1+e−(w0+w1X1+w2X2)1
- NN 모델의 베이스
- X들의 선형 결합 결과를 시그모이드 함수를 이용해 비선형 변환을 수행해 0-1 사이 확률값으로 변환
3) 뉴럴 네트워크 모델과 RNN
f(X)=1+exp(−(z01+z111+exp(−(w01+w11X1+w12X2))1+z211+exp(−(w02+w12X1+w22X2))1))1
- 로지스틱 회귀 모델을 여러번 결합한 것
- RNN에서 Hidden vector를 구할 때 사용하는 함수 f :
tanh activation function
- RNN에서 최종 분류 문제를 풀 때 사용하는 함수 g :
softmax function
- 시계열 예측에서 DNN을 사용하지 않는 이유
- DNN은 각 데이터가 서로에 독립적인 경우에 사용됨
- 그러나 시계열 데이터는 각 시점의 데이터가 서로에 독립적이지 않아, 이전 시점 정보를 반영해야하기 때문
- 이전 시점 데이터를 반영해서 더 나은 예측을 하자! → RNN 등장
- 특정 시점 데이터에 이전 시점 데이터를 반영하는 법
- 이전 시점의 hidden vector를 특정 시점의 hidden vector에 합성
- 그 이전 시점의 hidden vector에는 더 이전 시점들의 vector 또한 반영되어 있음
ht−1=f(Wxhxt−1+Whhht−2)ht=f(Wxhxt+Whhht−1)yt=g(Whyht)where f(⋅)=tanh,g(⋅)=softmax
- ⭐ RNN에서 학습(추정)해야하는 파라미터 세 가지
- Why
- 해당 시점에서의 hidden vector를 해당 시점에서의 y값으로 변환하는 파라미터
- Wxh
- 해당 시점에서의 관측치를 해당 시점에서의 hidden vector로 변환하는 파라미터
- Whh
- 이전 시점에서의 hidden vector를 현 시점의 hidden vector로 이동할 때 사용되는 파라미터
- RNN의 파라미터는 시점에 관계없이 종류가 같으면 파라미터 값도 동일함 (parameter sharing)
4) RNN 구조 다양성
5) RNN 학습
- RNN은 t 시점까지의 (과거)정보를 활용하여 yt 예측
- t 시점 데이터 반영 → Wxh
- t 시점 이전 정보 반영 → Whh
- t 시점의 y를 예측 → Why
- 학습 대상(parameters) :
(Wxh, Whh, Why)
- 해당 파라미터는 매 시점마다 공유하는 구조
- 매 시점 파라미터를 구성하는 값이 같음
- 최적의 W : W를 매 시점 적용했을 때 Loss가 최소가 되도록
⭐ RNN 학습 과정
✔️ 1. Loss 계산하기 : Forward propagation
- ht=tanh(Wxhxt+Whhht−1)
- 각 weight 곱하고 더한 값을 -1~1 사이로 정규화한 hidden state (vector)
- y^t=softmax(Whyht)
- Hidden state에 weight 곱하고 0~1 사이로 정규화한 예측값
- Lt
- yt와 y^t 차이
- 이 차이를 최소화하는 방향으로 파라미터 업데이트 (Loss function 최소화)
- One to many, many to many 구조에서는 각 시점별 loss의 평균을 전체 loss로 사용함
✔️ 2. Gradient 계산하기 : Backward propagation
- 갱신된 파라미터를 업데이트하는 방법
- 파라미터를 얼마나 업데이트 해야 하는가? → gradient(기여도) 만큼
- Backward Propagation Trough Time (BPTT) in RNN
Ⅰ.
∂Why∂Loss=∂y^t∂Lt×∂Whyht∂y^t×∂Why∂Whyht
Why
파라미터 업데이트
: Loss의 Why
에 대한 미분값(gradient)을 현재 값에 더하거나 빼 줌
Ⅱ.
∂Whh∂Loss=(∂y^t∂Loss×∂h3∂y^t×∂Whh∂h3)+(∂y^t∂Loss×∂h3∂y^t×∂h2∂h3×∂Whh∂h2)+(∂y^t∂Loss×∂h3∂y^t×∂h2∂h3×∂h1∂h2×∂Whh∂h1)
Whh
파라미터 업데이트
: Loss의 Whh
에 대한 미분값(gradient)을 현재 값에 더하거나 빼 줌
🟡 첫번째 괄호 (T3) : T3(시점 3)에서의 영향
🟡 두번째 괄호 (T2) : T3으로부터 전해진 영향 고려
🟡 세번째 괄호 (T1) : T2로부터 전해진 영향 고려
Ⅲ.
∂Wxh∂Loss=(∂y^t∂Loss×∂h3∂y^t×∂Wxh∂h3)+(∂y^t∂Loss×∂h3∂y^t×∂h2∂h3×∂Wxh∂h2)+(∂y^t∂Loss×∂h3∂y^t×∂h2∂h3×∂h1∂h2×∂Wxh∂h1)
Wxh
파라미터 업데이트
: Loss의 Wxh
에 대한 미분값(gradient)을 현재 값에 더하거나 빼 줌
🟡 괄호 내용 위와 동일
🟡 각 시점마다의 gradient를 구한 다음 모두 더하면 됨
✅ Gradient 계산 정리
∂Why∂Loss=∂y^t∂Lt×∂Whyht∂y^t×∂Why∂Whyht
∂Whh∂Loss=∑k=0t(∂y^t∂L×∂ht∂y^t×∂hk∂ht×∂Whh∂hk)
∂Wxh∂Loss=∑k=0t(∂y^t∂L×∂ht∂y^t×∂hk∂ht×∂Wxh∂hk)
회귀 문제 : Loss function (MSE) = N1∑i=1N(yi−y^i)2
분류 문제 : Loss function (Cross Entropy) = ∑c=1Myo,clog(po,c)
✔️ 3. Parameter Update (학습)
- 파라미터들을 어떻게 더 좋은 수치로 업데이트할지?
- 방향 : Loss를 줄이는 방향
- 학습 정도 : Gradient 만큼 → Gradient Descent
- 학습률(ɳ, learning rate) : 기여도를 얼마나 반영할 것인지 결정 (예, 0.01)
Why
의 gradient 업데이트 : Whynew=Whyold−η⋅∂Why∂Loss
Whh
의 gradient 업데이트 : Whhnew=Whhold−η⋅∂Whh∂Loss
Wxh
의 gradient 업데이트 : Wxhnew=Wxhold−η⋅∂Wxh∂Loss
4. RNN 한계점
- 장기 의존성 문제 (long-term dependency problem)
- 장기 과거 데이터는 h100가 의존하는 h99이 의존하는 h98이 의존하는 ... 형태
- Sequence의 길이가 길수록, 과거 정보 학습에 어려움이 발생
- 원인 : 기울기 소실 (vanishing gradient)
- Gradient는 chain rule에 의해 계산되며, 이때 ht=tanh(Wxhxt+Whhht−1)
- Hidden vector들은 tanh 함수로 되어 있음
- 오래 전 시점들의 Gradient들은 수 많은 시점들의 hidden vector에 한 그 전 시점의 hidden vector 미분값으로 표현되어 있음
- 즉, 오래 전 시점들의 gradient들은 tanh 함수의 미분으로 표현되어 있음
- tanh 함수를 미분하면 함수값은 0~1 사이(소수)에 해당되는데,
- 오래 전 시점들의 소수를 매우 많이 곱하면, gradient는 결국 0에 수렴함
- 이는 현재 시점 업데이트가 되지 않는 것임 (loss function 최소화 불가능)
- 장기 과거 시점에 대한 모델 학습이 안 됨
- RNN 개선 모델 : LSTM (Long Short-Term Memory)