Home LG Aimers 2기 시계열 분석 (고려대학교 강필성 교수님)
Post
Cancel

LG Aimers 2기 시계열 분석 (고려대학교 강필성 교수님)

이번 글에서는 LG Aimers의 AI 전문가 과정에서 시계열 데이터의 순차적 특성을 고려한 모형과 그 학습 원리를 배웁니다. 모형의 어떠한 특성이 시계열 데이터의 특성을 학습에 반영하게 되는지 그리고 어떻게 모델의 성능을 향상시킬 수 있는지를 배울 수 있습니다.


1. 순환신경망 기반의 시계열 데이터 회귀

Non-Sequential vs Sequential (Time-Series) Data

  • Non-Sequential Data: 시간 정보를 포함하지 않고 생성되는 데이터
    • 순차 데이터가 아닌 경우, 데이터는 N by D 행렬로 표현 (N: 관측치 수, D: 변수 수)
    • (예) 특정 고객의 금융 상품 이용 현황으로 대출 상품 추천 (X: 고객별 금융 상품 이용 현황, Y: 대출사용 유무)
    • 순서가 없는 인공신경망 구조: x -> h -> y
  • Sequential Data: 시간 정보를 포함하여 순차적으로 생성되는 데이터
    • 순차 데이터의 경우, 데이터는 (N) by T by D Tensor 로 표현 (T는 측정 시점 수)
    • (예) 반도체 공정에서 주기적으로 측정되는 여러 센서 값을 이용한 Critical Dimension 예측
    • 순서가 있는 인공신경망 구조: x -> h (과거 정보를 누적시켜서 다시 재학습, Recurrent 형태) -> y

RNN Basics: Forward Path

  • 기본 RNN (Vanilla RNN) 구조에서 정보의 흐름
    • t 시점에서의 은닉 노드의 값은 두 부분에서 영향을 받게 됨
    • 첫번째는, t-1 시점까지 은닉 노드에 저장된 정보
    • 두번째는, t 시점에서 새롭게 제공되는 입력 정보

RNN Basics: Gradient Vanishing, Exploding Problem

  • RNN에서의 Backpropagation에서 활성화 함수는 Tanh로 가정
    • 순전파를 통해서 모델이 얼마나 틀렸는지를 확인한 후, Cost 함수를 사용하여 역전파를 수행
    • 그래서 가장 현재 입력과 출력 간의 쌍들을 잘 맞출 수 있는 가중치 행렬을 구하게 됨 (역전파 목적)
    • 이를 일반화시켜서 표현하면, (1 - tanh^2(z_t)) * x_t
      • 그런데, 1 - tanh^2(x)의 값은 값이 양 또는 음의 값으로 발산할 때, 값이 0으로 수렴
      • 즉, 특정한 값을 벗어나게 되면, Gradient 값이 소실되는 문제가 발생한다는 것
      • 이를 해결하기 위해, LSTM과 GRU 방식이 등장

RNN Hidden Unit: LSTM (Long Short-Term Memory)

  • Gradient exploding, vanishing 문제를 해결하여 Long-term dependency 학습 가능
  • Vanilla RNN은 Input이 주어지고, 이전 시점에서의 은닉층 (Hidden State)의 정보가 주어지면 이 두 개를 한 번 연산하고, 다음 State로 내보내게 되고 (Concatenate), 이것이 다음 시점의 Output으로 만들어짐
  • LSTM은 Cell state라고 하여 각 시점마다 Cell state가 존재하고, 모델 상부를 관통하는 선의 모양
  • Vanilla RNN은 주기억장치 하나만 있는데, LSTM은 주기억장치와 보조기억장치가 함께 있어서 보조기억장치의 역할을 잘 개선시켜서 과거에 멀리 떨어져 있던 정보들을 잘 기억하고, 선택적으로 반영할 수 있게 해주는 것

LSTM Process

  • Step 1. 지금까지 Cell state에 저장된 정보 중 얼마만큼 망각 (Forget) 할 것인지 결정
    • Forget gate: 이전 단계의 Hidden state h_t-1과 현 단계의 입력 x_t로부터 0과 1 사이값 출력 (시그모이드)
      • 1: 지금까지 Cell state에 저장된 모든 정보 보존
      • 0: 지금까지 Cell state에 저장된 모든 정보 무시
    • 이전 단계의 결과와 현 단계의 입력을 Concatenate 하고, 모델의 파라미터 (W_f)를 통해 지금까지 저장된 정보가 얼마나 유용한지 현재 시점에서 유용한지 판단 (1 또는 0으로 결과값을 반환)
  • Step 2. 새로운 정보를 얼마만큼 Cell state에 저장할 것인지를 결정
    • Input gate: 어떤 값을 업데이트 할 것인지를 결정
      • 고정적으로 결정하는 것이 아닌, 그때 그때 시점 별로 Data에 따라 Adaptive 하게 결정되는 것
    • Tanh layer를 사용하여 새로운 Cell state의 후보를 생성
      • 후보를 생성하는데 있어서 필요한 데이터는 이전 시점의 Hidden state와 현 시점의 입력 정보
  • Step 3. 예전 Cell state를 새로운 Cell state로 업데이트
    • 예전 Cell state를 얼마만큼 망각할 것인가를 계산한 Forget gate 결과값과 곱합
    • 새로운 Cell state 후보와 얼마만큼 보존할 것인가를 계산한 Input gate 결과값을 곱합
    • 두 값을 더하여 새로운 Cell state 값으로 결정
    • 즉, 과거부터 지금까지 이만큼의 정보를 저장했고, 현재는 이 정도의 정보를 새로 받았는데, 그 과거 정보를 얼마만큼 보존하고, 현재 정보를 얼마만큼 반영해야 하는지를 데이터를 기반으로 학습으로 결정하는 것
  • Step 4. 출력 값을 결정
    • 이전 Hidden state 값과 현재의 입력 값을 이용하여 Output gate 값을 산출
    • Output gate 값과 현재의 Cell state 값을 결합하여 현재의 Hidden state 값을 계산
  • Vanilla RNN은 W_xh, W_hh, W_hy 라는 세 가지 가중치 행렬을 사용하여 학습
  • LSTM은 W_f, W_i, W_c, W_o 라는 네 가지 가중치 행렬을 학습시켜야만 작동
  • 또한 LSTM의 입력 값은 이전 Hidden state 값과 현재의 입력 값 (h_t-1, x_t)을 Concatenate 한 것
  • Vanilla RNN이 먼 시점에서 정보를 기억하지 못해서 보완하게 된 LSTM 방법론

RNN Hidden Unit: GRU (Gated Recurrent Unit)

  • LSTM을 단순화 한 구조. 실제 활용에서는 LSTM과 GRU의 성능 차이는 미비함
    • GRU가 LSTM에 비해 상대적으로 단순하기 때문에 GRU -> LSTM 순서로 적용하는게 일반적 순서
  • 별도의 Cell state가 존재하지는 않음
  • LSTM의 Forget gate와 Input gate를 하나의 Update gate로 결합
    • Update gate는 현재 정보를 얼마만큼 많이 반영해 줄것인가를 결정하는 부분
  • Reset gate를 통해 망각과 새로운 정보 업데이트 정도를 결정
    • Reset gate는 과거의 정보를 얼마만큼 덜 반영하거나, 더 반영하는지를 연산해주는 부분

RNN Variations: Bidirectional RNN

  • Bidirectional RNN (양방향 순환신경망): 정보의 입력을 시간의 순방향과 역방향 관점에서 함께 처리 (번역기 예시)
  • Deep-Bidirectional RNN: RNN의 Hidden layer가 한 층일 필요가 없이, 더 쌓아보는 접근법 (CNN처럼)
    • 단, CNN과는 다르게, RNN은 층을 여러 개 깊게 쌓는다고 해서 성능의 향상을 보장하지는 않음
    • 경험적으로도 쌓지 않거나, 아니면 최대 두 개에서 네 개 층 정도만 쌓는 것이 Maximum 층이 될 것

RNN: Attention

  • 어느 시점 정보가 RNN의 최종 출력 값에 영향을 미치는지를 알려줄 수 있는 매커니즘
  • Bahadanau attention (2015): Attention 매커니즘을 구현하기 위해 별도로 다시 모델을 학습함
  • Luong attention (2015): 별도로 학습하지 않아도, Attention score를 산출할 수 있어서 이 방법론을 더 선호함
  • 일반적인 Vanilla RNN에서는 각 시점 별로 Hidden state의 정보가 전달되고, 가장 마지막 층에서 최종적인 예측값을 도출하는데, Attention 방법에서는 가장 마지막의 Hidden state 정보와 첫번째 Hidden state와의 알파값이라는 유사도 (기여도)를 산출함. 그리고 각 Hidden state 마다 유사도 (기여도) 값을 산출한 후, 과거에 한 번 사용된 Hidden state 값을 버리는 것이 아닌 그 값과 알파값과의 선형 결합을 통해 C라고 하는 Context vector를 만듦. 최종적으로 이 값과 가장 마지막 시점에서의 Hidden state vector를 결합하여 h 틸다라는 새로운 Hidden state vector를 만들고, 이 값을 통해서 최종적인 예측을 수행
  • 이를 통해, Attention 구조를 차용하지 않았을 때에 비해 성능이 훨씬 향상되는 것이 일반적. 또한 알파값이 결국 0부터 1 사이이면서 모든 알파들의 값을 더했을 때는 1이 나오기 때문에, 이 예측 과정에서 몇 번째 시점이 가장 중요한 역할을 수행했는지를 추론할 수 있음
  • 알파_i 값은 i번째 Hidden state vector가 Context vector 생성에 기여하는 비중
    • 두 Hidden state vector 사이의 Score 산출 방식 중 가장 간단한 방식은 두 벡터의 내적을 사용하는 것
  • 알파값이라고 하는 유사도 (기여도)가 산출이 되면, Context vector는 단순히 지금까지 계산을 해왔던 각 시점들의 Hidden state vector와 알파와의 선형 결합
    • Vanilla RNN, LSTM, GRU 모두는 중간 시점에 해당하는 Hidden state h들의 정보는 버려지고, 마지막만 사용
    • Attention을 활용하게 되어 중간 시점에 해당하는 Hidden state vector도 다시 한번 의사결정에 활용
  • 이렇게 Context vector를 만든 후, h 틸다라고 하는 새로운 Hidden state vector는 가장 마지막 시점의 Hidden state와 Context vector를 Concatenate 하고, 학습 대상이 되는 가중치를 곱한 후, 비선형 활성화를 통해 만들어지게 되고, 최종 예측을 수행

Summary

  • 순환신경망은 순차 데이터를 처리하는데 특화된 인공신경망 구조
  • 현 시점에서 Hidden state (H_t)는 이전 시점의 Hidden state (H_t-1)와 현 시점의 입력 (x_t)를 이용해 계산
  • Vanilla RNN은 Long-term relationship을 파악하는데 어려움을 겪어서 LSTM, GRU가 등장
    • LSTM은 Input, Forget, Output gate와 Cell state를 활용하여 정보를 선택적으로 활용
    • GRU는 Reset, Update gate 만을 사용하여 LSTM 보다 단순화 된 구조
  • Attention은 시계열 데이터의 어느 시점이 최종 예측에 영향을 미쳤는지 판별할 수 있는 기법. 일반적으로 Attention 구조가 그렇지 않은 구조보다 일반적으로 예측 성능이 우수한 경향이 있음

2. 합성곱 기반의 시계열 데이터 회귀

  • 합성곱 즉, CNN 구조는 이미지 데이터를 처리하기 위해 고안된 구조
  • 이 모델을 시계열 데이터에 적용했을 때도 효과적이었음
  • 합성곱 신경망: 합성곱 연산을 통해 이미지로부터 필요한 특질 (Feature)을 스스로 학습할 수 있는 능력을 갖춘 신경망
  • 이미지 인식 종류: Classification, Classification + Localization, Object Detection, Instance Segmentation
    • Classification: 주어진 이미지에서 어떤 객체가 있는지 분류하는 것
    • Classification + Localization: 어떤 객체가 어디에 있는지 Bounding box로 표현까지 해주는 것
    • Object Detection: 여러 객체에 대하여 Classification + Localization을 수행
    • Instance Segmentation: Object Detection을 pixel 단위로 수행하는 것 (Polygon 생성)

CNN Basics: Image Representation

  • 이미지를 어떻게 컴퓨터에게 숫자로 인식시킬 것인가?
  • 컬러 이미지는 3차원의 Tensor로 표현됨 (Width * Height * 3 (RGB))
  • 문제점: 모든 픽셀 하나의 입력 노드로 간주하고, 서로 다른 가중치로 연결하면 Input layer와 First hidden layer에 너무 많은 학습을 시켜야 하는 weights (가중치)가 생김
    • 이 단계에서 필요한 가중치 수: 1685 * 2247 * 3 * 첫번째 Hidden layer의 노드 수

CNN Basics: Convolution

  • Image Convolution (Filter, Kernel): 특정 속성을 탐지하는데 사용하는 Matrix (예를 들면, Edge detection)

Convolutional Neural Network (CNN)

  • 합성곱 신경망: 합성곱 연산을 통해 이미지로부터 필요한 특질을 스스로 학습할 수 있는 능력을 갖춘 심층 신경망
  • 이미지 데이터가 갖는 특징: 인접 픽셀 간 높은 상관관계 (Spatially-local correlation), 이미지의 부분적 특성은 고정된 위치에 등장하지 않음 (Feature invariance)
    • Spatially-local correlation을 고려하기 위해 Sparse connection 구성
      • Sparse connection: 전체 픽셀이 아닌 일부 픽셀만 가중치로 연결하여 연산 수행
      • 인접한 변수만을 이용하여 새로운 Feature 생성
    • Invariant feature를 추출하기 위해 Shared weight 개념 이용
      • Shared weight: 동일한 필터는 대상 영역에 상관없이 같은 가중치를 사용하여 연산을 수행
      • 특정 특질을 추출하기 위한 도구로서 같은 대상 크기에는 위치가 다르더라도 동일한 Weight 적용
  • CNN의 작동 과정
    • 일반적인 CNN은 Convolution 연산, Activation 연산 (대부분 ReLU), Pooling 연산의 반복으로 구성
    • 일정 횟수 이상의 Feature Learning 과정 이후에는, Flatten 과정을 통해 이미지가 1차원 벡터로 변환
  • 이미지는 3차원 Tensor (RGB) 이므로, 필터 역시도 3차원
  • Filter가 한번에 한 칸씩 이동하면, 시간이 오래 걸리지 않을까? Stride를 통해 한번에 여러 칸 이동하도록 함
  • 가장자리에 있는 픽셀은 중앙의 픽셀보다 합성곱 연산이 적게 수행되지 않을까? Padding을 추가하여 이를 보완
  • 최종적인 Output size는 Stride와 Padding 값에 따라 달라질 수 있음
    • Output size = ((H + 2P - F / S) + 1) * ((W + 2P - F / S) + 1)

CNN Basics: Activation

  • 합성곱을 통해 학습된 값들의 비선형 변환을 수행 (대부분 ReLU를 사용)
  • 선형 변환만 하게 되면, 아무리 복잡한 구조로 조합해도 선형 조합의 결과는 선형 결과가 도출
  • 대부분 Rectified Linear Unit (ReLU)을 사용
    • 0보다 작은 값들은 0으로 변환하고, 0보다 큰 값들은 그 값을 반환

CNN Basics: Pooling

  • 문제점: 고차원의 Tensor를 보다 Compact 하게 축약해야 하지 않을까?
  • Pooling: 일정 영역의 정보를 축약하는 역할 (Max pooling, Average pooling)
  • Strided convolution: Average pooling은 Strided convolution의 특수한 케이스 (모든 weight가 1/n)

CNN Basics: Flatten

  • 평탄화 (Flatten): 2차원, 3차원의 Matrix, Tensor 구조를 1차원의 Vector로 변환하는 과정

CNN: 하이퍼파라미터

  • Convolution filter의 크기: 이미지 데이터에는 주로 2-d Convolution을 사용 (가로와 세로의 크기가 같음)
  • Convolution filter의 수: 이 수가 많을수록 동질 영역에서 다양한 형태의 특질을 추출할 수 있음
  • Stride의 크기: Conv filter가 건너뛰는 픽셀의 수. Stride가 작을수록 촘촘하게 특질을 추출하지만 시간 오래 걸림
  • Zero Padding 크기: Conv 연산의 편의성을 위해 사용. Conv 연산 전후의 크기를 일치시키기 위한 목적
    • Filter와 Stride의 크기에 따라서 필요한 Padding의 크기가 결정

CNN Architecture 1: AlexNet

  • 원본 이미지가 너무 크게 되면, 연산량이 부족했기 때문에 이미지를 Resize (224 * 224 차원 * 3 (RGB))
  • Filter의 크기는 11 * 11 차원, Stride는 4, Filter의 개수는 96개 (Output 사이즈는 55 * 55)
    • 초반에는 넓게 보되 듬성듬성 보고, 후반부에는 좁게 보되 세밀하게 보자
  • 그 다음 Conv 연산에서는 Max pooling 후, Filter의 크기는 5 * 5 차원으로, 개수는 256개로 늘림
  • 그리고 Max pooling 후, 3 * 3 Filter 384개로 적용
    • 촘촘하게 보되, 특질을 찾아낼 수 있도록 Filter의 개수를 증가시킴
  • 총 5번의 Conv 연산 후, 13 * 13 * 256 차원의 Tensor를 Flatten 하여 4096차원의 Dense layer로 변환
  • 최종적으로 정리하면 다음과 같음
    • 224 * 224 크기의 이미지를 Input으로 사용
    • 초기 단계에서는 큰 필터 사이즈와 Stride를 사용
    • 상위 Layer로 갈수록 작은 필터 사이즈와 Stride를 사용
    • 2개의 Fully connected layer 존재
    • 파라미터의 총 개수: 60 Million

CNN Architecture 2: VGGNet

  • 원본 이미지는 24 * 24 * 3 차원의 Tensor인데, 64 차원의 Filter로 Conv 연산 두 번 수행
  • 그리고 Max pooling 후, 128 차원의 Filter로 Conv 연산 두 번 수행
  • 그 후, Max pooling 후, 사이즈를 줄여서 256 차원의 Filter로 Conv 연산 세 번 수행
  • 최종적으로 정리하면 다음과 같음
    • AlexNet에 비해서 단순하지만 깊은 구조
    • 3 by 3 Convolution with stride 1을 기본 연산으로 하며, 중간 중간에 2 by 2 max pooling을 수행
    • 파라미터의 총 개수: 138 Million

CNN for Time-Series Data

  • Time-Series Data의 가정은 모든 변수는 동일한 주기 (초, 분, 시간 등)로 수집되고 있음
  • Task 1 (분류): 특정 기간 (제품 가공 기간) 데이터를 입력으로 하고, 특정 범주를 출력으로 하는 모델 (양/불 판정 등)
  • Task 2 (회귀): 특정 기간 데이터를 입력으로 하고, 특정 수치 (품질 지표)를 출력으로 하는 모델
    • Task 1, 2는 Input인 X 데이터는 동일하지만, Output인 Y 데이터의 형태가 다름
  • Task 3 (회귀): 일부 기간 데이터를 입력으로 하고, 이후 기간 데이터를 예측 (태양광 발전량 예측, 전력 소모 예측 등)
  • Task 4 (이상탐지): 일부 기간 데이터를 입력으로 하고, 해당 상황의 정상 및 비정상 여부를 탐지

  • 1-D Convolution vs 2-D Convolution
    • 시계열 데이터는 이미지 데이터와 달리, 변수들 사이에 Spatial Correlation이 존재하지 않음
    • 시간 축으로 움직이는 Convolution은 의미가 있지만, 변수 축으로 움직이는 Convolution은 의미가 없음
    • 2-D Convolution은 시간과 변수 두 축을 모두 Convolution 연산을 통해서 탐색하는 방식
    • 1-D Convolution은 모든 변수를 한번에 고려하여 시간 축에 대해서만 Convolution 연산을 수행
    • 따라서 Filter의 크기가 정사각형이 아닌, 직사각형 형태의 Filter를 사용. 즉, 이것은 모든 변수를 한꺼번에 고려하여, 시점에 대해서만 이동을 시키는 것
      • Filter의 세로 크기는 변수의 개수만큼 고정이 될 것 (이미지 CNN과의 차이)
    • 1-D Convolution에서 1개의 Filter를 사용하면 1개의 Vector가 결과물로 산출
    • 이와 같은 Conv 연산을 반복하면, 각 Vector 상의 같은 인덱스는 같은 Time-series에 대한 데이터

Dilated Convolution

  • 의문: 보다 긴 길이의 시계열 데이터를 효율적으로 처리할 수는 없을까?
    • Standard Convolution은 항상 인접한 연속된 시점의 데이터에 대한 합성곱 연산을 수행
    • 합성곱 연산을 조금 더 띄엄띄엄 해본다면?

Summary

  • 합성곱 연산은 Feature Invariance와 Spatial Correlation을 반영하기 위해 사용되는 연산
  • 이미지를 처리할 때는 정방형의 필터를 사용하여 가로, 세로 두 방향으로 움직이는 2-D 합성곱 연산을 사용
  • 반면, 시계열 데이터에서는 변수 축으로 필터가 이동하는 것은 의미가 없어 필터의 한쪽 크기는 변수의 개수와 같음
  • 그리고 시간 축으로만 움직이는 1-D 합성곱 연산을 수행하도록 함
  • 합성곱 연산은 한 레이어에서만 적용하는 것이 아닌, 반복적으로 쌓아 올려서 사용할 수도 있음
  • 보다 긴 길이의 시계열 데이터를 한번에 처리하기 위해서는, Standard Convolution 보다는 중간 지점을 생략하는 Dilated Convolution을 사용하면 보다 효율적인 정보의 처리가 가능

3. 트랜스포머 기반의 시계열 데이터 회귀

  • 앞서 배운 CNN은 원래 이미지 데이터를 처리하기 위해 제안되었으나, 시계열 데이터에 적용한 것
  • RNN은 원래부터 시계열 데이터나, 순차 데이터를 처리하기 위해 만들어진 방법론
  • Transformer는 원래 자연어 데이터를 처리하기 위해 만들어진 모델이지만, 이 모델이 이미지와 시계열으로도 확장
    • Transformer는 언어 모델의 한 종류
    • 언어 모델은 특정 문장 (단어의 나열)이 등장할 확률을 계산해주는 모델
    • 즉, 특정한 언어에서 특정한 문장 즉, 단어의 나열이 얼마나 그럴듯하고 자연스러운지 확률을 계산해주는 모델
  • Transformer는 Attention의 병렬적 사용을 통해 효율적인 학습이 가능한 구조의 언어 모델
    • 개괄적 구조: 내부에 인코더 파트와 디코더 파트가 존재하며, 이 둘 사이를 이어주는 연결고리가 존재함
    • Input 데이터를 처리하는 Encoder 모듈과 처리가 완료된 다음 단어를 하나씩 반환해주는 Decoder 모듈이 있음
    • Encoder는 여섯 개의 블록으로 구성되어 있고, Decoder도 역시 여섯 개의 블록으로 구성됨
    • 입력 데이터가 들어왔을 때, Encoder는 층층이 이전 단계에서 다음 단계로 정보가 전달
    • Decoding 과정에서는 가장 마지막 단계에서의 Encoder가 모든 단계의 Decoder에 정보를 전달하고, 하위 Decoder의 정보가 상위 Decoder로 정보를 전달해주는 구조

Transformer의 작동 원리

  • 개별 단어에 대한 임베딩 벡터 (Word2Vec, GloVe 등)를 최초 입력으로 사용함
    • Word2Vec, GloVe 등의 방법론은 실제 단어에서 두 단어가 의미적으로 유사하면, 공간상에서도 유사하도록 학습
    • 이 단어 임베딩은 가장 아래에 위치한 인코더에서만 입력으로 1회 사용
    • 나머지 인코더들을 하위 인코더에서 출력된 결과물을 입력으로 사용
    • 최초 논문에서는 512 차원의 임베딩을 사용
    • 입력으로 사용되는 리스트는 사용자가 지정하는 하이퍼파라미터 - 컴퓨팅 자원이 충분하다면 큰 값 지정 가능
  • Positional Encoding
    • Transformer는 단어를 순차적이지 않고, 한번에 받아서 입력 시퀀스에서 단어들 간의 위치 관계를 표현해야 함
      • RNN 구조에서는 단어를 순차적으로 받았던 것과 약간 차이가 있음
      • 따라서 Transformer에서는 입력 시퀀스에서 어떤 단어가 먼저 들어왔고, 나중에 들어왔는지 확인 필요
    • 이 역할을 수행하도록 Positional Encoding을 만들고, 모든 단어 임베딩에 이것을 더해 입력 벡터를 구성함
  • Multi-Head Attention
    • 어떤 토큰들을 받았을 때, 그 문서 안에서 또는 문장 안에서 단어들이 서로 어떤 연관관계를 가지는지 해석하는 것
    • Positional Encoding이 더해진 단어 임베딩은 첫 번째 인코더 블록에서 Self-Attention과 FFNN을 거침
    • 특정 위치의 단어는 해당 위치를 유지하면서 연산이 수행
      • Self-Attention 과정에서는 이 경로간 의존성이 존재
      • FFNN (Feed Forward Neural Network) 과정에서는 의존성이 존재하지 않아서 병렬화가 가능
  • Encoding Procedure
    • 인코더는 일련의 벡터들을 입력으로 받음
    • 입력된 벡터들은 Self-Attention과 FFNN을 거쳐서 상위 인코더의 입력으로 투입
    • 즉, Encoder 1의 Output은 Encoder 2의 Input으로도 활용된다는 것
  • Self-Attention에 대한 이해
    • The animal did’t cross the street because it was too tired.
    • 이와 같은 문장에서 it이 해당하는 의미를 사람은 알기 쉽지만, 알고리즘은 그렇지 못함
    • 이는 입력 시퀀스의 다른 위치에 있는 단어를 둘러보면서, 특정 위치의 단어를 잘 설명 및 표현 할 수 있게 함
  • Self-Attention의 절차
    • Step 1. 입력 벡터에 대해서 세 가지의 벡터를 생성
      • 실제로는 Query, Key, Value에 대응하는 행렬을 곱해서 생성
      • Query: 다른 단어들을 고려하여 표현하고자 하는 대상이 되는 현재 단어에 대한 임베딩 벡터
        • 어떤 단어가 다른 단어들과 무슨 관계가 있는지를 알고싶은 질의 대상이 되는 단어
      • Key: Query가 들어왔을 때, 다른 단어들과 매칭을 하기 위해 사용되는 레이블로 사용되는 임베딩 벡터
      • Value: Key와 연결된 실제 단어를 나타내는 임베딩 벡터
    • Step 2. 지금 표현하고자 하는 단어 (Q)에 대하여 어떤 단어를 고려해야 하는지 (K)를 알려주는 스코어 산출
      • Q와 K를 곱한 후, 소프트맥스 함수를 취하여 이 스코어를 계산해줌
    • Step 3. Step 2에서 계산한 스코어를 차원의 루트 수로 나눠줌
      • 이 과정을 통해 Gradient 전파가 보다 안정적으로 수행됨
    • Step 4. Step 3의 결과를 이용하여 소프트맥스 함수를 적용해 해당 단어에 대한 집중도를 산출
    • Step 5. Step 4에서 산출된 확률값과 해당 단언의 Key 값을 곱함
    • Step 6. Step 5에서 산출된 모든 값들을 더해서 출력으로 반환
  • Masked Multi-head Attention
    • 디코딩 단계에서 셀프 어텐션은 Query 토큰보다 뒤에 위치한 토큰들에 대한 정보는 가용하지 않다고 가정하고, 해당 부분을 전부 Masking 처리
    • 순차적으로 수행할 필요 없이 한번에 수행 가능
  • The Final Linear and Softmax Layer
    • Linear layer: 단순 FFNN 형태로서 마지막 디코더의 출력 결과물을 이용해 모든 단어의 출력 확률을 산출하기 위해서 차원을 늘려주는 역할을 수행
    • Softmax layer: 개별 단어들의 출력 확률값을 반환

Transformer의 시계열 데이터 적용

  • Transformer를 다변량 시계열 데이터에 최초로 적용한 논문
    • Transformer의 Encoder 구조만을 사용
    • Pre-training 과업을 위하여 연속적 길이의 Input masking 사용
    • Layer Normalization 대신 Batch Normalization 사용
    • Fine-tuning 단계에서 구조를 어떻게 설계하느냐에 따라 분류, 회귀, 예측 등 다양한 테스크에 적용 가능
  • Time-Series Transformer (TST) 작동 원리
    • TST는 크게 Pre-training과 Fine-tuning의 두 부분으로 구분
      • Pre-training은 데이터를 통해 이 Transformer의 구조를 미리 학습하는 것
      • Fine-tuning은 원하는 문제를 잘 풀 수 있도록 고도화하는 단계
    • 입력 데이터 변환
      • 원본 입력 데이터 X는 m개의 변수와 w개의 Time window length를 가짐
      • Pre-training 과정에서는 이 중 일부를 Masking 한 뒤, Transformer의 Input이 되는 d차원으로 변환
      • Fine-tuning 과정에서는 Masking 없이 d차원으로 변환
    • 입력 데이터 Masking
      • Transformer의 사전 학습 목적은 Masking 된 부분을 정확하게 예측하는 것으로 설계
        • 각 Cell에 대한 Masking 여부를 독립적으로 결정하게 되면, Trivial Solution으로도 문제를 잘 맞춤
        • Trivial Solution은 Masking 된 Cell 이전 시점 혹은 이후 시점 값을 그대로 사용하거나, 평균값 사용
      • Masking 길이가 평균만큼이 되는 기하 분포를 따르도록 Markov Chain을 적용하여 Masking 여부 결정
        • 모든 변수에 대해 동일한 시점을 Masking 하는 것보다 변수 별로 독립적으로 Masking segment를 결정하는 것이 실험적으로 더 우수한 성능을 보였음
    • Positional Encoding
      • NLP의 Transformer처럼 TST에서도 입력 데이터에 이것을 더해 Transformer 인코더의 입력값으로 사용
      • 고정된 Positional Encoding을 사용할 수도 있고, 학습 가능한 Positional Encoding을 사용할 수도 있음
    • Self-Attention in Transformer Encoder Block
      • 총 3개의 Encoder 블록을 사용 (자연어에서는 6개를 사용했음)
      • NLP에서의 Transformer와 다르게 Layer Normalization 대신 Batch Normalization 사용
        • 시계열 데이터는 NLP Word Embedding에는 없는 이상치가 존재
        • 시계열 데이터는 각 관측치의 길이 변화가 NLP의 문장 길이의 변화보다 작음
        • 이러한 상황 하에서는 실험적으로 Batch Normalization이 우수한 성능을 보이는 것으로 입증
    • Pre-training
      • 각 관측치 및 Epoch 마다 독립적으로 생성한 Mask를 Input과 Element-wisse Multiplication 하여 Masked Input을 도출
      • 이것을 Input Encoding과 Transformer Encoder에 순차적으로 넣어서 Latent Representation을 도출하고, 이를 Linear Output Layer에 넣어서 모든 값이 채워져 있는 각 시점의 데이터를 예측
      • Masking 된 부분의 실제값과 예측값의 Mean Squared Error를 기반으로 모델을 학습
    • Fine-tuning
      • 1단계: Masking을 적용하지 않은 Input time window를 Input encoding과 Transformer Encoder에 순차적으로 넣어서 Representation을 도출
      • 2단계: 도출된 모든 시점의 Representation을 Concatenate 한 것을 Output Linear Layer에 Input으로 넣어서 회귀 또는 분류의 정답을 예측
      • 3단계: Task의 실제 정답과 TST가 예측한 값의 차이를 통해 Output Linear Layer를 Fine-tuning

TST의 성능

  • Supervised Learning에 사용되는 Label의 비율 증가에 따른 TST (Pretrained)와 TST (Sup only)의 성능 변화로 다음 결과 도출
    • 두 모델 모두 사용 가능한 Label의 비율이 증가할수록 성능이 향상
    • Pretrained TST가 Sup only TST 보다 모든 비율에서 높은 성능을 도출한 것을 통해 동일한 Training set을 중복 사용하여 모델을 학습한 것이 효과가 있다는 것을 알 수 있음
  • Fine-tuning 데이터의 개수가 고정되었을 때, Pre-training에 사용되는 데이터의 비율 증가에 따른 Pretrained TST의 성능 변화를 통해 다음 결과 도출
    • Pre-training에서 많은 데이터를 학습할수록 Pretrained TST의 성능이 향상
    • Pretrained TST의 Fine-tuning 데이터의 개수가 적을수록 Pre-training에 사용되는 데이터의 비율 증가에 따른 성능 향상 폭이 큼

Summary

  • TST는 Transformer의 Encoder 구조만을 사용
  • Pre-training 과업을 위하여 연속적 길이의 Input masking을 사용
  • Layer Normalization 대신 Batch Normalization 사용
  • Fine-tuning 단계에서 구조를 어떻게 설계하느냐에 따라 회귀, 분류, 예측 등 다양한 테스크로 적용 가능
  • Pre-training을 통해 기존의 Supervised Learning만 수행했을 경우보다, 우수한 예측 성능을 보임
This post is licensed under CC BY 4.0 by the author.

LG Aimers 2기 인과추론 (서울대학교 이상학 교수님)

ETL & Data Pipelines with Shell, Airflow and Kafka 1주차