Feed Forward Network

  • 일반적으로 Feed Forward Network에서 x_t와 x_t+1이라는 Data가 있을 때, 이 둘은 서로 "Independant(독립적)" 입니다.
  • 따라서, Feature들을 Shuffling 및 Sampling이 가능하며 Classification과 Regression을 위한 학습에 이용되는 일반적인 Network입니다.
  • 이러한 독립이라는 전제로 학습하는 네트워크가 아닌 종속성이 있는 데이터로 학습하는 RNN에 대해 학습해보겠습니다.

RNN

  • 시간별로 기록된 데이터에서 x_1, x_2라는 데이터가 있다고 해봅니다.
  • 이들을 x축을 x_1, y축을 x_2로 나타내면 scatter plot으로 볼 때, 아무런 Pattern을 인지할 수 없습니다.

  • 그런데 시간의 흐름방향으로 x_1, x_2를 plot으로 보면, 특정 Pattern이 나타남으로써 해당 데이터에대한 의미를 탐구할 수 있게 됩니다.
  • 과거와 현재가 Dependant(종속적) 관계인 데이터에서 시계열 Data가 대표적입니다. 이러한 데이터는 종속관계가 깨지지 않아야 의미를 가지므로 FNN을 사용하는 것을 적절하지 않으며 같은 Data 내(x_1 or x_2)에서는 Shuffling도 불가능합니다.
  • 따라서 종송관계가 있는 데이터를 다루기 위한 새로운 인공신경망이 필요한데, 그래서 탄생한 것이 RNN입니다.

RNN 구조

  • x^t : input data, h^0 : initial hidden layer, y^t : output 이라고 하겠습니다.
  • RNN은 풀어쓰면 Recurrent Neural Network 입니다. 위 그림에서 initial hidden layer의 결과가 input data와 합쳐져서들어가면서 순환구조를 만들기 때문에 이름이 이렇게 붙여졌습니다.

  • 좀 더 명확하게 순환구조를 알아보겠습니다.
  • 한 Cycle이 진행됐다고 가정했을 때, input은 x^t+1 이고, hidden layer는 h^t, output은 y^t+1이 됐을 것입니다.
  • h^t는 x^t가 들어갔을 때 만들어진 h^t입니다. 즉 과거에 대한 어떤 정보를 담고 있습니다.
  • 이를 다음 x^t+1 데이터가 들어갈때 합쳐져서 함께 Input으로 들어가면서, 과거의 정보를 현재에 해당하는 정보와 합쳐져서 들어가도록 동작하는데, 이 때 순환적/재귀적 Data flow를 만들어낸다고 볼 수 있겠습니다. Data flow는 뒤에서 좀 더 자세히 알아보겠습니다.

RNN Data 구성

  • Workflow를 알아보기 전에 먼저 시계열 Data를 구성하는 방법을 알아보겠습니다.

  • 시계열 데이터는 시간 순서이고, 시간은 과거로도, 미래로도 무한합니다. 시계열 데이터의 목적은 과거의 데이터로 미래를 예측하는 데에 있습니다. 따라서 무한히 먼 과거까지 종속성을 분석하는 것은 현실적으로 불가능합니다.
  • 이러한 이유로 일정한 Time Step으로 과거의 종속성이있는 데이터를 제한합니다. 위에서는 Step을 5의 시간으로 제한하여 Feature를 생성한 예시입니다.

  • 시계열 Data의 목적은 미래 예측에 있다고했습니다. 여기서 Input으로 사용할 Feature들은 어떤 것을 예측하는 걸까요 ?
  • Feature1을 보면, step이 5이기때문에 t=5까지의 데이터들이고, t=6인 시점을 예측합니다. 그러면 t=6에서 ground truth는 뭘까요 ? step을 5로 나눴기 때문에 실제 시계열 데이터의 t=6의 x_1, x_2가 위 파란 박스의 y_1, y_2의 정체가 됩니다. Feature2도 마찬가지로 2 <= t <= 6의 데이터로 t=7의 데이터를 ground truth로 사용됩니다.
  • 여기서 Feature들 끼리는 서로 Independant합니다. 따라서 전제가 이렇기 때문에 Feature들 끼리는 Shuffling이 가능합니다.
  • Step으로 나누는 행위가 해당 Step 내에서만 종속성이있고, 그 이외의 Step에서는 독립적이라는 관점으로 접근한 것입니다.
  • 그렇기 때문에 Feature 내부에서의 데이터들은 서로 Dependant합니다. Feature 끼리와 Feature 내부 데이터끼리와의 관계를 인지하는 것이 중요합니다.
  • 참고로 데이터들의 차원은 보통 Input Data는 Feature별로 쌓아서 Batch라는 차원이 생겨 3D (Batch, Timestep, feature)가 되고, Output Data는 2D(Batch, Target)/3D 가 일반적입니다.

Data Flow

  • x_1, x_2를 넣고 y_1, y_2를 출력해주는 형태의 RNN 구조입니다.
  • 아래 부분이 RNN으로 순환적 구조로 작동하고, 위쪽 부분은 FFN으로 Regression을 수행하는 예시입니다.
  • 이러한 형태는 하나의 Network로 RNN을 통한 Regression을 설명하는데, RNN의 동작을 이해하기 어렵습니다. 따라서 Unfold 형태를 통해 Data Flow를 이해할 수 있습니다.

Unfolded RNN + Regression Structure Many to One

  • x_n^(a, b) : n은 column, a는 feature number, b는 step 입니다.
  • 하나의 Feature가 주입된다는 것은 5 step의 데이터가 차례로 RNN 구조에서 순환적으로 전달되는 것을 말합니다.
  • W_x를 통한 output이 hidden layer W_h를 통과합니다. 이 W_h의 output은 그대로 다음 step에서 Input(x)와 함께 전달됩니다.
  • Hidden layer는 이전 Time step의 hidden layer output이 다음 Time step의 Input과 함께 전달되기 때문에 과거의 정보를 전달해주고 있다고 볼 수 있습니다.
  • 최종적으로 Regression을 통해 미래 값을 추출해냅니다. y^n : 해당 feature 에 대한 미래 예측 값입니다.
  • W_h, W_x는 Back propagation 시, Loss를 줄이면서 올바른 예측을 하는 방향으로 업데이트 됩니다.
  • 여기서 헷갈리면 안되는 것은 W_h, W_x가 여러개인 것이아니라, step마다 같은 하나의 W_h, W_x를 공유하는 가중치 행렬이라는 점입니다.
    • W_x dim : (n_x, n_h)
    • W_h dim : (n_h, n_h)

'RNN Part' 카테고리의 다른 글

RNN (2) - Back Propagation Through Time (BPTT)  (0) 2024.02.19

+ Recent posts