Non-Sequential vs. Sequential (Time-Series) Data
데이터에 순서가 없음 → Non-Sequential Data
: 시간 정보를 포함하지 않고 생성되는 데이터
: 순차 데이터가 아닌 경우 데이터는 N by D 행렬(N: 관측하는 데이터 개수, D: 변수 개수)로 표현됨
ex) 특정 고객의 금융상품 이용 현황을 바탕으로 대출 상품 추천
X: 고객별 금융 상품 이용 현황 - 주어지는 부분
Y: 과거 대출 상품 이용 유무(1: 사용, 0: 미사용) - 기계학습이 맞춰야 하는 정답
아래 그림처럼 두 번째 관측치의 하나의 vector가 X이고, 거기에 대응하는 하나의 scalar 값이 Y가 됨
순서(sequence)가 없는 인공신경망 구조
: 그림에서 x가 설명 변수이고, h는 은닉 노드이며 마지막 y라는 것은 model이 출력해야 되는 output임
※ 순서가 없는 인공 신경망의 경우 x에서 h로, h에서 y로 가는 화살표만 존재
데이터에 순서가 있음 → Sequential (Time-Series) Data
: 시간 정보를 포함하여 순차적으로 생성되는 데이터
: 순차데이터의 경우 데이터는 (N) by T by D Tensor (T는 측정 시점 수)로 표현됨 → tensor나 array로 표현됨
: N by T by D → 관측하는 데이터 개수 by 측정 시점 수 by 변수 개수
ex) 반도체 공정에서 주기적으로 측정되는 여러 센서 값을 이용한 Critical Dimension 예측
X: 반도체 공정 설비에서 시간별 측정되는 다양한 센서(변수) 값
Y: 웨이퍼의 Critical Dimension (CD)
아래 그림처럼 첫 번째 웨이퍼 X가 통으로 설명 변수가 되고 거기에 대응하는 하나의 Critical Dimension 값 Y를 예측함
마찬가지로 아래 그림은 N개의 관측 데이터에 대해 T차원의 시간축, D차원의 변수축을 x와 y축으로 갖는 행렬을 이용해 두 번째 Critical dimension, y값 model의 출력을 예측하게 되는 것
순서(sequence)가 있는 인공신경망 구조
: 첫 번째 시점에서 설명 변수인 x값들이 들어왔을 때 첫 번째 히든 노드로 정보가 투입되는 것을 의미함
: 두 번째 시점에서도 마찬가지로 시점만 바뀌었을 뿐 동일한 센서 데이터가 들어온다라고 했을 때 해당하는 입력 변수들이 두 번째 시점에서 히든 노드 정보를 전달함
※ 여기서 주의할 점은 이전 시점에서 히든 노드의 정보들이 다음 시점의 히든 노드들의 정보들로 연결됨
→ 과거의 정보가 다음 단계로 계속적으로 누적해서 전달이 되는 구조라는 뜻이며, 이거를 반복적으로 수행한 다음에 제일 마지막에 여러 시점에 해당하는 값들을 입력 받아서 적절히 처리한 후 최종적인 y를 산출하는 3차원 구조를 지님
순서(sequence)가 있는 인공신경망 구조 (벡터 표현)
: 실제 데이터로 위의 과정을 표현해보자
행에 해당하는 부분들 = 시점 T
열에 해당하는 부분인 센서 data = D
Critical Dimension = Y
순서가 있는 인공 신경망에서 첫 번째 시점에서의 vector 값들인 센서 data들이 첫 번째 hidden state로 전달되고 두 번째 입력 시점에서의 변수들이 두 번째 hidden state로 전달이 됨과 동시에 이전 hidden state에 있었던 정보가 다음 hidden state로 전달
위의 과정을 반복적으로 T만큼 진행을 한 다음에 가장 마지막에 y라고 하는 최종적으로 우리가 찾아야 되는 출력 값을 예측하도록 하는 구조 → 이러한 구조가 순환 신경망의 기본 구조임
지금까지 다룬 순환 신경망을 Vanilla RNN이라고 부르고 기본적인 구조의 RNN임
RNN Basics: Forward Path
RNN이 어떻게 정보를 취급하고 정보가 어디서 어느 방향으로 흐르는지 살펴보도록 하자
RNN에서 h_t가 핵심
: 특정한 small t시점에서의 은닉 노드의 값은 두 방향에서 정보를 전달받음
: t시점에서의 은닉 노드의 값(h_t)은 t-1 시점까지 은닉 노드에 저장된 정보(W_hh * h_t-1)와 t 시점에서 새롭게 제공되는 입력 정보(W_xh * x_t)에 영향을 받음
아래 식에서 W_hy, W_hh, W_xh는 데이터를 통해 학습되는 대상 → model parameter(모델 학습을 통해 최적으로 찾아가야하는 값들)
RNN Basics: Gradient Vanishing/Exploding Problem
: Neural Network를 학습하는 과정은 gradient descent를 이용해서 backpropagation을 진행하는 것임
아래 그림에서는 활성 함수 Tanh를 통해 실제로 얼마만큼 예측에 틀렸는지(Cost)를 안 다음, 역방향으로 어떻게 해야지만이 현재 입력과 출력간의 쌍들을 잘 맞출 수 있는지 가중치 행렬을 구하는 것이 backpropagation의 목적
즉, backpropagation을 하기 위해 연산에 관여하는 부분들을 전부 편미분하여 해당하는 gradient가 무엇인지를 찾아줘야 함
아래 그림에서는 은닉층 사이에서의 정보인 W_xh를 최적화를 진행함
위의 그림처럼 복잡한 식을 일반화하면 아래 식이 도출
그리고 여기서는 활성 함수가 Tanh라고 표현 했기 때문에 이 활성 함수에 대해서 t 시점에서의 은닉 노드를 t-1 시점으로 미분했을 때는 아래와 같은 수식이 나올 수 있음
t 시점에서의 은닉 노드 W_xh로 미분했을 때 나오는 식은 아래와 같이 나옴
여기서 (1 - tanh^2(z_t)) 부분이 문제가 됨
아래 그림에서 빨간색 그래프를 tanh(x)라고 생각을 해보면, 초록색 그래프는 1 - tanh^2(x)가 됨
여기서 초록색 그래프인 1 - tanh^2(x)가 특정한 값을 벗어나게 되면 우리가 gradient 값을 통해 정보를 흘려줘야 하는데 그 gradient 값이 0이 된다는 이야기임
→ 그래서 그래프의 길이가 길어지면 길어질수록 gradient 값이 하나라도 0이 되는 순간 식이 모두 곱하기로 연결되어 있어 지금까지 우리가 누적해서 쌓아왔던 정보가 전부 0이 될 수 있음
(이러한 문제점을 순환 신경망에서 gradient vanishing, gradient exploding problem이라고 부름)
RNN Hidden Unit - LSTM
: gradient vanishing, gradient exploding problem을 해결하기 위한 첫 번째 기법이 LSTM(Long Short-Term Memory)임
: 장기간에 있어서의 어떤 의존성을 학습 가능함
: LSTM은 RNN에 비해 내부 구조가 매우 복잡함
LSTM은 구조가 복잡하며 다양한 diagram이 존재하는데 실질적 구조는 하나임
Vanilla RNN vs LSTM
Vanilla RNN
input이 주어지고 이전 시점에서의 은닉층에서의 정보가 주어지면 그 두 개를 한 번 연산한 다음에 다음 state로 내보냄
아래 그림처럼 초록색 세 개와 빨간색 두 개가 vector로 이어지는데 이것을 concatenation하다고 표현하는데 concatenation된 것이 한 번 Neural Network 연산을 한 다음에 다음 시점에 output으로 만들어짐
LSTM
LSTM은 Vanilla RNN에서 보지 못했던 변수가 등장하고 Vanilla RNN과 다르게 셀 내부에서의 다양한 연산이 진행됨
기본적인 Vanilla RNN과 다르게 LSTM에서는 Cell state라는 구성요소가 필요함
Cell state
: LSTM의 핵심 구성요소, 아래의 diagram에서는 상부를 관통하는 선이며 시점마다 존재함
LSTM은 Vanilla RNN(주기억 장치 하나만 존재)과 다르게 주기억 장치와 보조 기억 장치가 같이 있어서 어떻게든 보조기억장치의 역할을 잘 개선시켜줌으로서 과거에 굉장히 멀리 떨어져 있었던 정보들을 잘 기억할 수 있고 선택적으로 반영할 수 있게 해 줌
아래 진행 과정을 통해 LSTM이 어떻게 진행되는지 살펴보자
Step 1: 지금까지의 cell state에 저장된 정보 중에서 얼마만큼을 망각(forget)할 것인지 결정
Forget gate: 이전 단계의 hidden state(h_t-1) 와 현 단계의 입력(x_t)으로부터 0과 1사이의 값을 출력 (Sigmoid 함수 사용) → 과거의 정보가 얼마나 현재 시점에서 유용한지를 판단
1: 지금까지 cell state에 저장된 모든 정보를 보존
0: 지금까지 cell state에 저장된 모든 정보를 무시
즉, 아래 식처럼 forget gate는 어떠한 복잡한 연산에서도 두 가지의 조합을 만들어냄
forget gate는 이전 시점에서의 Hidden state 정보 vector와 현 시점에서의 입력 vector 두 가지를 concatenation을 해서 사용하게 되고 여기서 W_f(최적화 대상이 되는 model의 parameter)를 곱하여 사용
이러한 위의 과정을 통해 지금까지 저장된 정보가 얼마나 유용한지를 다시 한 번 현재 시점에서 판단을 해볼 수 있음
→ 만약 지금까지 저장된 정보가 충분히 유용하다고 판단이 되면 1의 값을 내보내 지금까지 기억했던 정보를 최대한 계속 기억
→ 만약 지금까지 저장된 정보가 쓸모 없다고 판단이 되면 0의 값을 내보내 지금까지 기억했던 정보를 잊어버림
Step 2: 새로운 정보를 얼마만큼 cell state에 저장할 것인지를 결정
Input gate: 현재 시점에서 어떤 값을 최종적으로 업데이트 할 것인지 결정
Tanh layer를 사용하여 새로운 cell state의 후보 ~C_t을 생성
아래 식처럼 i_t는 h_t-1과 x_t라는 과거 시점에서의 hidden state vector와 현재 시점에서의 input vector를 concatenation 해서 학습의 대상이 되는 W_i라는 가중치 행렬을 이용하게 되면 input gate의 값이 추가적으로 나타남
→ i_t 값이 크면 클수록 우리는 현재 시점에서의 정보들을 최대한 많이 반영함
→ i_t 값이 작으면 현재 시점에서의 정보를 적게 반영함
이러한 i_t 값의 크기는 그때그때 시점별로 Data에 따라서 adaptive하게 결정함
위의 과정을 통해 새로운 cell state의 보조기억장치에 들어갈 정보의 후보(~C_t)를 생성하는게 step 2에서 진행됨
→ 이러한 결정하는데 있어 필요한 정보는 이전 시점에서의 hidden state 정보와 현 시점에서의 입력 정보임
Step 3: 예전 cell state를 새로운 cell state로 업데이트
예전 cell state(C_t-1)를 얼마만큼 망각할 것인가를 계산한 forget gate 결과값(f_t)과 곱함
새로운 cell state 후보(~C_t)와 얼마만큼 보존할 것인가를 계산한 input gate 결과값(i_t)을 곱함
두 값을 더하여 새로운 cell state 값으로 결정
이러한 step 3에서는 예전에 cell state 보조 기억장치를 새로운 cell state 보조 기억장치로 update 함
f_t * C_t-1: 바로 이전 시점의 정보를 앞서 forget gate에서 학습한 값을 통해서 얼마만큼 반영할 것인가를 의미
i_t * ~C_t: 새로운 cell state의 후보를 현재 시점 기준에서 얼마만큼 반영해 줄 것인가를 의미
최종 정리
→ 과거부터 지금까지 어느정도의 정보를 저장해왔고 현재 어느정도의 정보를 새로 받았을 때 과거 정보를 얼마만큼 보존해야 하고 현재 정보를 얼마만큼 반영해야 되는지를 데이터 기반으로한 학습을 통해 adaptive하게 결정함
Step 4: 출력 값을 결정
출력값을 결정하는데 있어서 이전 hidden state 값(h_t-1)과 현재 입력 값(x_t)을 이용하여 output gate 값을 산출
output gate 값(o_t)을 이용해 현재의 cell state(C_t)를 업데이트 한 후에 최종적으로 h_t를 산출
LSTM 요약
Vanilla RNN은 W_xh, W_hh, W_hy라는 세 개의 가중치를 학습시켰지만, LSTM에서는 W_f, W_i, W_c, W_o라는 네 가지의 가중치 행렬을 학습시켜야지만이 작동함
모든 상황에서의 입력은 h_t-1과 x_t를 concatenation 해야 함
→ 즉, Vanilla RNN이 과거 먼 거리에서의 정보를 잘 기억하지 못하는 문제점을 해결하기 위해서 LSTM이 제안됨
RNN Hidden Unit: GRU
: gradient vanishing, gradient exploding problem을 해결하기 위한 두 번째 기법이 GRU(Gate Recurrent Units)임
: LSTM과 GRU의 성능 차이는 비슷함 → 하지만, GRU 구조가 좀 더 단순
: 별도의 cell state가 존재하지 않음 (보조 메모리가 존재하지 않음)
Update gate: LSTM에서의 forget gate와 input gate가 결합된 형태
→ 현재 정보를 얼마만큼 많이 반영해 줄 것이냐를 결정하는 부분
Reset gate: 망각과 새로운 정보 update 정도를 결정
→ 과거의 정보를 얼마만큼 덜 반영하거나 더 반영할지 연산해주는 부분
Vanilla RNN vs. LSTM vs. GRU
최종적으로 세 가지 RNN 구조를 아래 그림을 통해 비교해볼 수 있음
'실습 & 활동 > LG Aimers' 카테고리의 다른 글
Module 7. 시계열 데이터 및 AI 모델 성능 최적화 - 합성곱 기반의 시계열 회귀(1) (2) | 2023.02.01 |
---|---|
Module 7. 시계열 데이터 및 AI 모델 성능 최적화 - 순환 신경망 기반의 시계열 회귀(2) (0) | 2023.02.01 |
Module 5. Explainable AI (XAI) - 3 (2) | 2023.01.26 |
Module 5. Explainable AI (XAI) - 2 (0) | 2023.01.26 |
Module 5. Explainable AI (XAI) - 1 (0) | 2023.01.25 |